public class WmqMessagingProvider extends java.lang.Object implements MessagingProvider, Initializable
MessagingProvider
の実装クラス。コンストラクタと説明 |
---|
WmqMessagingProvider() |
修飾子とタイプ | メソッドと説明 |
---|---|
protected void |
backout(com.ibm.mq.MQQueueManager mqQueueManager)
分散トランザクションをバックアウトする。
|
protected void |
begin(com.ibm.mq.MQQueueManager mqQueueManager)
分散トランザクションを開始する。
|
protected void |
checkPoisonSetting()
退避キューの設定不備がないことをチェックする。
|
protected void |
checkXa()
分散トランザクションを使用するに設定されていることをチェックする。
|
protected void |
close(java.util.Map<java.lang.String,com.ibm.mq.MQQueue> mqQueues)
指定された全ての
MQQueue をクローズする。 |
protected void |
close(com.ibm.mq.MQQueue mqQueue)
指定された
MQQueue をクローズする。 |
protected void |
commit(com.ibm.mq.MQQueueManager mqQueueManager)
分散トランザクションをコミットする。
|
MessagingContext |
createContext()
WmqMessagingContext を生成する。 |
protected com.ibm.mq.MQQueueManager |
createMQQueueManager()
キューマネージャ名称を指定して
MQQueueManager を生成する。 |
protected void |
disconnect(com.ibm.mq.MQQueueManager mqQueueManager)
MQQueueManager の接続を切断する。 |
protected com.ibm.mq.MQGetMessageOptions |
getGetMessageOptions(java.lang.String messageId,
long timeout)
MQQueue からのメッセージ読み取りを制御するオプションを取得する。 |
protected int |
getGetSyncpointOption()
メッセージ読み取り時に使用する同期点オプションを取得する。
|
protected java.sql.Connection |
getJdbcConnection(com.ibm.mq.MQQueueManager mqQueueManager,
javax.sql.XADataSource xaDataSource)
MQQueueManager からConnection を取得する。 |
protected ReceivedMessage |
getMessage(com.ibm.mq.MQQueue receivedMqQueue,
java.lang.String messageId,
long timeout,
com.ibm.mq.MQQueue poisonMqQueue)
指定された
MQQueue から受信メッセージを読み込む。 |
protected com.ibm.mq.MQQueue |
getMQQueue(com.ibm.mq.MQQueueManager mqQueueManager,
java.lang.String queueName,
int openOptions)
指定されたキュー名とオプションを使用して、正常にオープンされた
MQQueue を取得する。 |
protected java.util.Map<java.lang.String,com.ibm.mq.MQQueue> |
getMQQueues(com.ibm.mq.MQQueueManager mqQueueManager,
java.util.Collection<java.lang.String> queueNames,
int openOptions)
指定されたキュー名とオプションを使用して、正常にオープンされた
MQQueue を取得する。 |
protected int |
getPoisonQueueOpenOptions()
ポイズンメッセージの退避先
MQQueue のオープンを制御するオプションを取得する。 |
protected com.ibm.mq.MQPutMessageOptions |
getPutMessageOptions()
MQQueue へのメッセージ書き込みを制御するオプションを取得する。 |
protected com.ibm.mq.MQPutMessageOptions |
getPutPoisonMessageOptions()
MQQueue へのポイズンメッセージ書き込みを制御するオプションを取得する。 |
protected int |
getPutSyncpointOption()
メッセージ書き込み時に使用する同期点オプションを取得する。
|
protected int |
getReceivedQueueOpenOptions()
受信先
MQQueue のオープンを制御するオプションを取得する。 |
protected int |
getSendingQueueOpenOptions()
送信先
MQQueue のオープンを制御するオプションを取得する。 |
void |
initialize()
WebSphere MQの初期化処理を行う。
|
protected boolean |
isPoisonMessage(com.ibm.mq.MQMessage mqMessage)
指定された
MQMessage がポイズンメッセージであるか否かを判定する。 |
protected void |
processPoisonMessage(com.ibm.mq.MQQueue poisonMqQueue,
com.ibm.mq.MQMessage mqMessage)
ポイズンメッセージの処理を行う。
|
protected java.lang.String |
putMessage(com.ibm.mq.MQQueue mqQueue,
SendingMessage sendingMessage)
送信メッセージを指定された
MQQueue に書き込む。 |
WmqMessagingProvider |
setBackoutLimit(int backoutLimit)
バックアウト回数の上限値を設定する。
|
WmqMessagingProvider |
setBackoutLimitExceededExitCode(int backoutLimitExceededExitCode)
バックアウト上限を超えた場合に使用する終了コード(プロセスを終了(
System.exit(int) )する際に設定する値)を設定する。 |
WmqMessagingProvider |
setBackoutLimitExceededFailureCode(java.lang.String backoutLimitExceededFailureCode)
バックアウト上限を超えた場合に使用する障害コードを設定する。
|
MessagingProvider |
setDefaultResponseTimeout(long defaultResponseTimeout)
デフォルトタイムアウト値(単位:msec)を設定する。
|
MessagingProvider |
setDefaultTimeToLive(long defaultTimeToLive)
送信電文の有効期間(単位:msec)を設定する。
|
WmqMessagingProvider |
setMessagingExceptionFactory(MessagingExceptionFactory messagingExceptionFactory)
MessagingException ファクトリオブジェクトを設定する。 |
WmqMessagingProvider |
setMqmdFieldsOperator(WmqMqmdFieldsOperator mqmdFieldsOperator)
WmqMqmdFieldsOperator オブジェクトを設定する。 |
void |
setPoisonQueueName(java.lang.String poisonQueueName)
退避キュー名(論理名)を設定する。
|
void |
setPoisonQueueNamePattern(java.lang.String poisonQueueNamePattern)
退避キュー名パターン(論理名)を設定する。
|
void |
setPutPoisonFailedExitCode(int putPoisonFailedExitCode)
ポイズンメッセージの送信に失敗した場合に使用する終了コード(プロセスを終了(
System.exit(int) )する際に設定する値)を設定する。 |
void |
setPutPoisonFailedFailureCode(java.lang.String putPoisonFailedFailureCode)
ポイズンメッセージの送信に失敗した場合に使用する障害コードを設定する。
|
WmqMessagingProvider |
setQueueManagerName(java.lang.String queueManagerName)
キューマネージャ名称を設定する。
|
WmqMessagingProvider |
setReceivedQueueName(java.lang.String receivedQueueName)
受信キュー名(論理名)を設定する。
|
WmqMessagingProvider |
setSendingQueueNames(java.util.List<java.lang.String> sendingQueueNames)
送信キュー名(論理名)リストを設定する。
|
void |
setUseProductSystemErrorOutput(boolean useProductSystemErrorOutput)
WebSphere MQによる
MQException 発生時の標準エラー出力を使用するか否かを設定する。 |
void |
setUseXa(boolean useXa)
分散トランザクションを使用するか否かを設定する。
|
public void initialize()
checkPoisonSetting()
メソッドを呼び出し退避キューの設定不備がないことをチェックする。CMQC.TRANSPORT_PROPERTY
)をバインディングモードに設定する。CMQC.THREAD_AFFINITY_PROPERTY
)にuseXa
プロパティの値を設定する。useProductSystemErrorOutput
プロパティがfalseの場合はWebSphere MQによる標準エラー出力を無効化する。CMQC.TRANSPORT_PROPERTY
)をバインディングモードに設定する。poisonQueueNamePattern
が指定された場合はreceivedQueueName
を使用してフォーマットした退避キュー名を設定する。initialize
インタフェース内 Initializable
protected void checkPoisonSetting()
receivedQueueName
が指定されない場合は、
poisonQueueNamePattern
とpoisonQueueName
も指定されないこと。
receivedQueueName
が指定された場合は、
poisonQueueNamePattern
とpoisonQueueName
の両方が指定されないか、
いずれか一方のみ指定されること。
public MessagingContext createContext()
WmqMessagingContext
を生成する。
指定された設定情報からMQQueueManager
を生成し、MQQueue
マップ(送信先と受信先とポイズンメッセージ送信先)の初期化を行う。MQQueueManager
の生成はcreateMQQueueManager()
メソッドに委譲する。 送信先MQQueue
マップの初期化はgetMQQueues(MQQueueManager, Collection, int)
メソッド、 受信先MQQueue
とポイズンメッセージ送信先MQQueue
の初期化はgetPoisonQueueOpenOptions()
メソッドに委譲する。 送信先MQQueue
のオープンを制御するオプションはgetSendingQueueOpenOptions()
メソッド、 受信先MQQueue
のオープンを制御するオプションはgetReceivedQueueOpenOptions()
メソッド、 ポイズンメッセージ送信先MQQueue
のオープンを制御するオプションはgetPoisonQueueOpenOptions()
メソッド、 から取得する。 MQExceptionを捕捉した場合は、MessagingExceptionFactory.createMessagingException(String, Throwable)
メソッド に例外処理を委譲する。
createContext
インタフェース内 MessagingProvider
WmqMessagingContext
protected com.ibm.mq.MQQueueManager createMQQueueManager() throws com.ibm.mq.MQException
MQQueueManager
を生成する。MQQueueManager
com.ibm.mq.MQException
- MQQueueManager
の生成に失敗した場合protected int getSendingQueueOpenOptions()
MQQueue
のオープンを制御するオプションを取得する。
下記オプションを指定した値を返す。
CMQC.MQOO_OUTPUT
CMQC.MQOO_FAIL_IF_QUIESCING
MQQueue
のオープンを制御するオプションprotected int getReceivedQueueOpenOptions()
MQQueue
のオープンを制御するオプションを取得する。
下記オプションを指定した値を返す。
CMQC.MQOO_INPUT_SHARED
CMQC.MQOO_FAIL_IF_QUIESCING
MQQueue
のオープンを制御するオプションprotected int getPoisonQueueOpenOptions()
MQQueue
のオープンを制御するオプションを取得する。
getSendingQueueOpenOptions()
メソッドに処理を委譲する。MQQueue
のオープンを制御するオプションprotected java.util.Map<java.lang.String,com.ibm.mq.MQQueue> getMQQueues(com.ibm.mq.MQQueueManager mqQueueManager, java.util.Collection<java.lang.String> queueNames, int openOptions) throws com.ibm.mq.MQException
MQQueue
を取得する。mqQueueManager
- MQQueueManager
queueNames
- キュー名リストopenOptions
- MQQueue
のオープンを制御するオプションMQQueue
マップ(キーはキュー名)com.ibm.mq.MQException
- MQQueue
のオープンに失敗した場合protected com.ibm.mq.MQQueue getMQQueue(com.ibm.mq.MQQueueManager mqQueueManager, java.lang.String queueName, int openOptions) throws com.ibm.mq.MQException
MQQueue
を取得する。mqQueueManager
- MQQueueManager
queueName
- キュー名openOptions
- MQQueue
のオープンを制御するオプションMQQueue
。キュー名の指定がない場合はnullcom.ibm.mq.MQException
- MQQueue
のオープンに失敗した場合protected java.lang.String putMessage(com.ibm.mq.MQQueue mqQueue, SendingMessage sendingMessage)
MQQueue
に書き込む。
送信メッセージからMQMessage
を作成しMQQueue
に書き込む。
WmqMqmdFieldsOperator.setFieldsBeforeSend(SendingMessage, MQMessage, long)
メソッドに委譲する。
MQQueue
への書き込みを制御するオプションはgetGetMessageOptions(String, long)
メソッドから取得する。
WmqMqmdFieldsOperator.getFieldsAfterSend(MQMessage, SendingMessage)
メソッドに委譲する。
MQExceptionを捕捉した場合は、
MessagingExceptionFactory.createMessagingException(String, Throwable)
メソッドに例外処理を委譲する。mqQueue
- MQQueue
sendingMessage
- 送信メッセージprotected com.ibm.mq.MQPutMessageOptions getPutMessageOptions()
MQQueue
へのメッセージ書き込みを制御するオプションを取得する。
下記オプションを指定した値を返す。
getPutSyncpointOption()
メソッドが返す同期点オプションCMQC.MQPMO_NEW_MSG_ID
MQQueue
へのメッセージ書き込みを制御するオプションprotected com.ibm.mq.MQPutMessageOptions getPutPoisonMessageOptions()
MQQueue
へのポイズンメッセージ書き込みを制御するオプションを取得する。
getPutMessageOptions()
に処理を委譲する。MQQueue
へのメッセージ書き込みを制御するオプションprotected int getPutSyncpointOption()
useXa
プロパティがtrueの場合はCMQC.MQPMO_SYNCPOINT
、
falseの場合はCMQC.MQPMO_NO_SYNCPOINT
を返す。protected ReceivedMessage getMessage(com.ibm.mq.MQQueue receivedMqQueue, java.lang.String messageId, long timeout, com.ibm.mq.MQQueue poisonMqQueue)
MQQueue
から受信メッセージを読み込む。
MQQueue
から読み込んだMQMessage
から受信メッセージを作成する。
MQMessage
がポイズンメッセージの場合は
processPoisonMessage(MQQueue, MQMessage)
メソッドに処理を委譲する。
MQMessage
がポイズンメッセージであるか否かの判定は
isPoisonMessage(MQMessage)
メソッドが行う。
メッセージ受信前のMQMDフィールドの設定は
WmqMqmdFieldsOperator.setFieldsBeforeReceive(String, MQMessage)
メソッドに委譲する。
MQQueue
への書き込みを制御するオプションはgetGetMessageOptions(String, long)
メソッドから取得する。
WmqMqmdFieldsOperator.getFieldsAfterReceive(MQMessage, ReceivedMessage)
メソッドに委譲する。
MQException
が送出され、理由コードがCMQC.MQRC_NO_MSG_AVAILABLE
の場合はnullを返す。
MQExceptionを捕捉した場合は、
MessagingExceptionFactory.createMessagingException(String, Throwable)
メソッド
に例外処理を委譲する。receivedMqQueue
- MQQueue
messageId
- 相関IDに指定するメッセージIDtimeout
- タイムアウト値(単位:msec)poisonMqQueue
- ポイズンメッセージ送信先MQQueue
。指定がない場合はnullprotected boolean isPoisonMessage(com.ibm.mq.MQMessage mqMessage)
mqMessage
- MQMessage
protected void processPoisonMessage(com.ibm.mq.MQQueue poisonMqQueue, com.ibm.mq.MQMessage mqMessage) throws ProcessAbnormalEnd, MessagingException
ポイズンメッセージ送信先MQQueue
の指定有無により処理が分かれる。 ポイズンメッセージ送信先MQQueue
の指定がない場合 メッセージ受信処理が無限ループになるのを防止するために、ProcessAbnormalEnd
を送出しプロセスを異常終了させる。ProcessAbnormalEnd
の終了コードと障害コードには、backoutLimitExceededExitCode
プロパティとbackoutLimitExceededFailureCode
プロパティを指定する。 ポイズンメッセージ送信先MQQueue
が指定された場合 FATALレベルで障害ログを出力し、指定されたMQQueue
にポイズンメッセージを送信する。 送信時は、メッセージ存続時間を無制限、元々設定されていたメッセージIDを相関IDに設定する。 ポイズンメッセージの送信でMQException
が送出された場合は、 送出されたMQException
がリトライ可能な例外である場合は再送出し、 リトライ不可の場合は、メッセージ受信処理が無限ループになるのを防止するために、ProcessAbnormalEnd
を送出しプロセスを異常終了させる。ProcessAbnormalEnd
の終了コードと障害コードには、backoutLimitExceededExitCode
プロパティとbackoutLimitExceededFailureCode
プロパティを指定する。
poisonMqQueue
- ポイズンメッセージ送信先MQQueue
。指定がない場合はnullmqMessage
- ポイズンメッセージProcessAbnormalEnd
- ポイズンメッセージ送信先MQQueue
の指定がない場合。
ポイズンメッセージの送信に失敗し、かつリトライ不可な場合MessagingException
- ポイズンメッセージの送信に失敗し、かつリトライ可能な場合protected com.ibm.mq.MQGetMessageOptions getGetMessageOptions(java.lang.String messageId, long timeout)
MQQueue
からのメッセージ読み取りを制御するオプションを取得する。
下記オプションを指定した値を返す。
getGetSyncpointOption()
メソッドが返す同期点オプションCMQC.MQPMO_NEW_MSG_ID
CMQC.MQGMO_WAIT
CMQC.MQMO_MATCH_CORREL_ID
、
指定がない場合はCMQC.MQMO_NONE
defaultResponseTimeout
プロパティの値を使用する。
messageId
- 相関IDに指定するメッセージIDtimeout
- タイムアウト値(単位:msec)MQQueue
からのメッセージ読み取りを制御するオプションprotected int getGetSyncpointOption()
useXa
プロパティがtrueの場合はCMQC.MQPMO_SYNCPOINT
、
falseの場合はCMQC.MQPMO_NO_SYNCPOINT
を返す。protected void disconnect(com.ibm.mq.MQQueueManager mqQueueManager)
MQQueueManager
の接続を切断する。
MQExceptionが送出された場合はTRACEレベルのログを出力し、MQExceptionを送出しない。mqQueueManager
- MQQueueManager
protected void close(java.util.Map<java.lang.String,com.ibm.mq.MQQueue> mqQueues)
mqQueues
- MQQueue
マップprotected void close(com.ibm.mq.MQQueue mqQueue)
MQQueue
をクローズする。
MQExceptionが送出された場合はTRACEレベルのログを出力し、MQExceptionを送出しない。
mqQueue
- MQQueue
protected java.sql.Connection getJdbcConnection(com.ibm.mq.MQQueueManager mqQueueManager, javax.sql.XADataSource xaDataSource) throws java.sql.SQLException, javax.transaction.xa.XAException
MQQueueManager
からConnection
を取得する。
MQExceptionを捕捉した場合は、
MessagingExceptionFactory.createMessagingException(String, Throwable)
メソッド
に例外処理を委譲する。mqQueueManager
- MQQueueManager
xaDataSource
- XAデータソースConnection
java.sql.SQLException
- Connection
の取得に失敗した場合javax.transaction.xa.XAException
- Connection
の取得に失敗した場合protected void checkXa()
useXa
プロパティがfalseの場合はIllegalStateException
を送出する。protected void begin(com.ibm.mq.MQQueueManager mqQueueManager)
MessagingExceptionFactory.createMessagingException(String, Throwable)
メソッド
に例外処理を委譲する。mqQueueManager
- MQQueueManager
protected void commit(com.ibm.mq.MQQueueManager mqQueueManager)
MessagingExceptionFactory.createMessagingException(String, Throwable)
メソッド
に例外処理を委譲する。mqQueueManager
- MQQueueManager
protected void backout(com.ibm.mq.MQQueueManager mqQueueManager)
MessagingExceptionFactory.createMessagingException(String, Throwable)
メソッド
に例外処理を委譲する。mqQueueManager
- MQQueueManager
public WmqMessagingProvider setQueueManagerName(java.lang.String queueManagerName)
queueManagerName
- キューマネージャ名称public WmqMessagingProvider setSendingQueueNames(java.util.List<java.lang.String> sendingQueueNames)
sendingQueueNames
- 送信キュー名(論理名)リストpublic WmqMessagingProvider setReceivedQueueName(java.lang.String receivedQueueName)
receivedQueueName
- 受信キュー名(論理名)public void setPoisonQueueNamePattern(java.lang.String poisonQueueNamePattern)
受信先キュー名を使用した命名規約により退避キュー名が規定されている場合は、 本プロパティを指定する。 本プロパティの設定例を示す。 設定値: "%s.POISON" 受信先キュー名が"TEST"の場合は、"TEST.POISON"となる。
poisonQueueNamePattern
- 退避キュー名パターン(論理名)public void setPoisonQueueName(java.lang.String poisonQueueName)
退避キュー名が受信先キュー名と命名規約により規定されていない場合は、 本プロパティを指定する。
poisonQueueName
- 退避キュー名(論理名)public WmqMessagingProvider setBackoutLimit(int backoutLimit)
backoutLimit
- バックアウト回数の上限値public WmqMessagingProvider setBackoutLimitExceededExitCode(int backoutLimitExceededExitCode)
System.exit(int)
)する際に設定する値)を設定する。
デフォルトは190。backoutLimitExceededExitCode
- バックアウト上限を超えた場合に使用する終了コード(プロセスを終了(System.exit(int)
)する際に設定する値)public WmqMessagingProvider setBackoutLimitExceededFailureCode(java.lang.String backoutLimitExceededFailureCode)
backoutLimitExceededFailureCode
- バックアウト上限を超えた場合に使用する障害コードpublic void setPutPoisonFailedExitCode(int putPoisonFailedExitCode)
System.exit(int)
)する際に設定する値)を設定する。
デフォルトは191。putPoisonFailedExitCode
- ポイズンメッセージの送信に失敗した場合に使用する終了コード(プロセスを終了(System.exit(int)
)する際に設定する値)public void setPutPoisonFailedFailureCode(java.lang.String putPoisonFailedFailureCode)
putPoisonFailedFailureCode
- ポイズンメッセージの送信に失敗した場合に使用する障害コードpublic MessagingProvider setDefaultResponseTimeout(long defaultResponseTimeout)
setDefaultResponseTimeout
インタフェース内 MessagingProvider
defaultResponseTimeout
- デフォルトタイムアウト値(単位:msec)public MessagingProvider setDefaultTimeToLive(long defaultTimeToLive)
setDefaultTimeToLive
インタフェース内 MessagingProvider
defaultTimeToLive
- 送信電文の有効期間(単位:msec)public WmqMessagingProvider setMqmdFieldsOperator(WmqMqmdFieldsOperator mqmdFieldsOperator)
WmqMqmdFieldsOperator
オブジェクトを設定する。
デフォルトはBasicWmqMqmdFieldsOperator
。mqmdFieldsOperator
- WmqMqmdFieldsOperator
オブジェクトpublic WmqMessagingProvider setMessagingExceptionFactory(MessagingExceptionFactory messagingExceptionFactory)
MessagingException
ファクトリオブジェクトを設定する。
デフォルトはBasicWmqMessagingExceptionFactory
。setMessagingExceptionFactory
インタフェース内 MessagingProvider
messagingExceptionFactory
- MessagingException
ファクトリオブジェクトpublic void setUseXa(boolean useXa)
useXa
- 分散トランザクションを使用する場合はtruepublic void setUseProductSystemErrorOutput(boolean useProductSystemErrorOutput)
MQException
発生時の標準エラー出力を使用するか否かを設定する。
デフォルトはfalse。useProductSystemErrorOutput
- WebSphere MQによるMQException
発生時の標準エラー出力を使用する場合はtrue