Class WmqMessagingProvider
java.lang.Object
nablarch.integration.messaging.wmq.provider.WmqMessagingProvider
- All Implemented Interfaces:
Initializable,MessagingProvider
IBM MQを使用した
MessagingProviderの実装クラス。-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidbackout(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションをバックアウトする。protected voidbegin(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションを開始する。protected void退避キューの設定不備がないことをチェックする。protected voidcheckXa()分散トランザクションを使用するに設定されていることをチェックする。protected voidclose(com.ibm.mq.MQQueue mqQueue) 指定されたMQQueueをクローズする。protected void指定された全てのMQQueueをクローズする。protected voidcommit(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションをコミットする。WmqMessagingContextを生成する。protected com.ibm.mq.MQQueueManagerキューマネージャ名称を指定してMQQueueManagerを生成する。protected voiddisconnect(com.ibm.mq.MQQueueManager mqQueueManager) MQQueueManagerの接続を切断する。protected com.ibm.mq.MQGetMessageOptionsgetGetMessageOptions(String messageId, long timeout) MQQueueからのメッセージ読み取りを制御するオプションを取得する。protected intメッセージ読み取り時に使用する同期点オプションを取得する。protected ConnectiongetJdbcConnection(com.ibm.mq.MQQueueManager mqQueueManager, XADataSource xaDataSource) MQQueueManagerからConnectionを取得する。protected ReceivedMessagegetMessage(com.ibm.mq.MQQueue receivedMqQueue, String messageId, long timeout, com.ibm.mq.MQQueue poisonMqQueue) 指定されたMQQueueから受信メッセージを読み込む。protected com.ibm.mq.MQQueuegetMQQueue(com.ibm.mq.MQQueueManager mqQueueManager, String queueName, int openOptions) 指定されたキュー名とオプションを使用して、正常にオープンされたMQQueueを取得する。getMQQueues(com.ibm.mq.MQQueueManager mqQueueManager, Collection<String> queueNames, int openOptions) 指定されたキュー名とオプションを使用して、正常にオープンされたMQQueueを取得する。protected intポイズンメッセージの退避先MQQueueのオープンを制御するオプションを取得する。protected com.ibm.mq.MQPutMessageOptionsMQQueueへのメッセージ書き込みを制御するオプションを取得する。protected com.ibm.mq.MQPutMessageOptionsMQQueueへのポイズンメッセージ書き込みを制御するオプションを取得する。protected intメッセージ書き込み時に使用する同期点オプションを取得する。protected int受信先MQQueueのオープンを制御するオプションを取得する。protected int送信先MQQueueのオープンを制御するオプションを取得する。voidIBM MQの初期化処理を行う。protected booleanisPoisonMessage(com.ibm.mq.MQMessage mqMessage) 指定されたMQMessageがポイズンメッセージであるか否かを判定する。protected voidprocessPoisonMessage(com.ibm.mq.MQQueue poisonMqQueue, com.ibm.mq.MQMessage mqMessage) ポイズンメッセージの処理を行う。protected StringputMessage(com.ibm.mq.MQQueue mqQueue, SendingMessage sendingMessage) 送信メッセージを指定されたMQQueueに書き込む。setBackoutLimit(int backoutLimit) バックアウト回数の上限値を設定する。setBackoutLimitExceededExitCode(int backoutLimitExceededExitCode) バックアウト上限を超えた場合に使用する終了コード(プロセスを終了(System.exit(int))する際に設定する値)を設定する。setBackoutLimitExceededFailureCode(String backoutLimitExceededFailureCode) バックアウト上限を超えた場合に使用する障害コードを設定する。setDefaultResponseTimeout(long defaultResponseTimeout) デフォルトタイムアウト値(単位:msec)を設定する。setDefaultTimeToLive(long defaultTimeToLive) 送信電文の有効期間(単位:msec)を設定する。setMessagingExceptionFactory(MessagingExceptionFactory messagingExceptionFactory) MessagingExceptionファクトリオブジェクトを設定する。setMqmdFieldsOperator(WmqMqmdFieldsOperator mqmdFieldsOperator) WmqMqmdFieldsOperatorオブジェクトを設定する。voidsetPoisonQueueName(String poisonQueueName) 退避キュー名(論理名)を設定する。voidsetPoisonQueueNamePattern(String poisonQueueNamePattern) 退避キュー名パターン(論理名)を設定する。voidsetPutPoisonFailedExitCode(int putPoisonFailedExitCode) ポイズンメッセージの送信に失敗した場合に使用する終了コード(プロセスを終了(System.exit(int))する際に設定する値)を設定する。voidsetPutPoisonFailedFailureCode(String putPoisonFailedFailureCode) ポイズンメッセージの送信に失敗した場合に使用する障害コードを設定する。setQueueManagerName(String queueManagerName) キューマネージャ名称を設定する。setReceivedQueueName(String receivedQueueName) 受信キュー名(論理名)を設定する。setSendingQueueNames(List<String> sendingQueueNames) 送信キュー名(論理名)リストを設定する。voidsetUseProductSystemErrorOutput(boolean useProductSystemErrorOutput) IBM MQによるMQException発生時の標準エラー出力を使用するか否かを設定する。voidsetUseXa(boolean useXa) 分散トランザクションを使用するか否かを設定する。
-
Constructor Details
-
WmqMessagingProvider
public WmqMessagingProvider()
-
-
Method Details
-
initialize
public void initialize()IBM MQの初期化処理を行う。 下記の処理を行う。checkPoisonSetting()メソッドを呼び出し退避キューの設定不備がないことをチェックする。- 接続モード(
CMQC.TRANSPORT_PROPERTY)をバインディングモードに設定する。 - スレッド類縁性(
CMQC.THREAD_AFFINITY_PROPERTY)にuseXaプロパティの値を設定する。 - 接続モード(
CMQC.TRANSPORT_PROPERTY)をバインディングモードに設定する。 poisonQueueNamePatternが指定された場合はreceivedQueueNameを使用してフォーマットした退避キュー名を設定する。
- Specified by:
initializein interfaceInitializable
-
checkPoisonSetting
protected void checkPoisonSetting()退避キューの設定不備がないことをチェックする。 チェック内容は下記のとおり。-
receivedQueueNameが指定されない場合は、poisonQueueNamePatternとpoisonQueueNameも指定されないこと。 -
receivedQueueNameが指定された場合は、poisonQueueNamePatternとpoisonQueueNameの両方が指定されないか、 いずれか一方のみ指定されること。
-
-
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)メソッド に例外処理を委譲する。- Specified by:
createContextin interfaceMessagingProvider- Returns:
WmqMessagingContext
-
createMQQueueManager
protected com.ibm.mq.MQQueueManager createMQQueueManager() throws com.ibm.mq.MQExceptionキューマネージャ名称を指定してMQQueueManagerを生成する。- Returns:
MQQueueManager- Throws:
com.ibm.mq.MQException-MQQueueManagerの生成に失敗した場合
-
getSendingQueueOpenOptions
protected int getSendingQueueOpenOptions()送信先MQQueueのオープンを制御するオプションを取得する。 下記オプションを指定した値を返す。CMQC.MQOO_OUTPUTCMQC.MQOO_FAIL_IF_QUIESCING
- Returns:
- 送信先
MQQueueのオープンを制御するオプション
-
getReceivedQueueOpenOptions
protected int getReceivedQueueOpenOptions()受信先MQQueueのオープンを制御するオプションを取得する。 下記オプションを指定した値を返す。CMQC.MQOO_INPUT_SHAREDCMQC.MQOO_FAIL_IF_QUIESCING
- Returns:
- 受信先
MQQueueのオープンを制御するオプション
-
getPoisonQueueOpenOptions
protected int getPoisonQueueOpenOptions()ポイズンメッセージの退避先MQQueueのオープンを制御するオプションを取得する。getSendingQueueOpenOptions()メソッドに処理を委譲する。- Returns:
- ポイズンメッセージの退避先
MQQueueのオープンを制御するオプション
-
getMQQueues
protected Map<String,com.ibm.mq.MQQueue> getMQQueues(com.ibm.mq.MQQueueManager mqQueueManager, Collection<String> queueNames, int openOptions) throws com.ibm.mq.MQException 指定されたキュー名とオプションを使用して、正常にオープンされたMQQueueを取得する。- Parameters:
mqQueueManager-MQQueueManagerqueueNames- キュー名リストopenOptions-MQQueueのオープンを制御するオプション- Returns:
- 正常にオープンされた
MQQueueマップ(キーはキュー名) - Throws:
com.ibm.mq.MQException-MQQueueのオープンに失敗した場合
-
getMQQueue
protected com.ibm.mq.MQQueue getMQQueue(com.ibm.mq.MQQueueManager mqQueueManager, String queueName, int openOptions) throws com.ibm.mq.MQException 指定されたキュー名とオプションを使用して、正常にオープンされたMQQueueを取得する。- Parameters:
mqQueueManager-MQQueueManagerqueueName- キュー名openOptions-MQQueueのオープンを制御するオプション- Returns:
- 正常にオープンされた
MQQueue。キュー名の指定がない場合はnull - Throws:
com.ibm.mq.MQException-MQQueueのオープンに失敗した場合
-
putMessage
送信メッセージを指定されたMQQueueに書き込む。 送信メッセージからMQMessageを作成しMQQueueに書き込む。
メッセージ送信前のMQMDフィールドの設定は、WmqMqmdFieldsOperator.setFieldsBeforeSend(SendingMessage, MQMessage, long)メソッドに委譲する。
MQQueueへの書き込みを制御するオプションはgetGetMessageOptions(String, long)メソッドから取得する。
メッセージ送信後のMQMDフィールドの取得は、WmqMqmdFieldsOperator.getFieldsAfterSend(MQMessage, SendingMessage)メソッドに委譲する。 MQExceptionを捕捉した場合は、MessagingExceptionFactory.createMessagingException(String, Throwable)メソッドに例外処理を委譲する。- Parameters:
mqQueue-MQQueuesendingMessage- 送信メッセージ- Returns:
- メッセージID
-
getPutMessageOptions
protected com.ibm.mq.MQPutMessageOptions getPutMessageOptions()MQQueueへのメッセージ書き込みを制御するオプションを取得する。 下記オプションを指定した値を返す。getPutSyncpointOption()メソッドが返す同期点オプションCMQC.MQPMO_NEW_MSG_ID
- Returns:
MQQueueへのメッセージ書き込みを制御するオプション
-
getPutPoisonMessageOptions
protected com.ibm.mq.MQPutMessageOptions getPutPoisonMessageOptions()MQQueueへのポイズンメッセージ書き込みを制御するオプションを取得する。getPutMessageOptions()に処理を委譲する。- Returns:
MQQueueへのメッセージ書き込みを制御するオプション
-
getPutSyncpointOption
protected int getPutSyncpointOption()メッセージ書き込み時に使用する同期点オプションを取得する。useXaプロパティがtrueの場合はCMQC.MQPMO_SYNCPOINT、 falseの場合はCMQC.MQPMO_NO_SYNCPOINTを返す。- Returns:
- メッセージ書き込み時に使用する同期点オプション
-
getMessage
protected ReceivedMessage getMessage(com.ibm.mq.MQQueue receivedMqQueue, 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)メソッドから取得する。
メッセージ受信後のMQMDフィールドの取得はWmqMqmdFieldsOperator.getFieldsAfterReceive(MQMessage, ReceivedMessage)メソッドに委譲する。MQExceptionが送出され、理由コードがCMQC.MQRC_NO_MSG_AVAILABLEの場合はnullを返す。 MQExceptionを捕捉した場合は、MessagingExceptionFactory.createMessagingException(String, Throwable)メソッド に例外処理を委譲する。- Parameters:
receivedMqQueue-MQQueuemessageId- 相関IDに指定するメッセージIDtimeout- タイムアウト値(単位:msec)poisonMqQueue- ポイズンメッセージ送信先MQQueue。指定がない場合はnull- Returns:
- 受信メッセージ。受信できなかった場合はnull
-
isPoisonMessage
protected boolean isPoisonMessage(com.ibm.mq.MQMessage mqMessage) 指定されたMQMessageがポイズンメッセージであるか否かを判定する。MQMessageのバックアウト回数がbackoutLimitプロパティより大きい場合にtrueを返す。- Parameters:
mqMessage-MQMessage- Returns:
- ポイズンメッセージである場合はtrue
-
processPoisonMessage
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プロパティを指定する。- Parameters:
poisonMqQueue- ポイズンメッセージ送信先MQQueue。指定がない場合はnullmqMessage- ポイズンメッセージ- Throws:
ProcessAbnormalEnd- ポイズンメッセージ送信先MQQueueの指定がない場合。 ポイズンメッセージの送信に失敗し、かつリトライ不可な場合MessagingException- ポイズンメッセージの送信に失敗し、かつリトライ可能な場合
-
getGetMessageOptions
MQQueueからのメッセージ読み取りを制御するオプションを取得する。 下記オプションを指定した値を返す。getGetSyncpointOption()メソッドが返す同期点オプションCMQC.MQPMO_NEW_MSG_IDCMQC.MQGMO_WAIT-
相関IDに指定するメッセージIDが指定された場合は
CMQC.MQMO_MATCH_CORREL_ID、 指定がない場合はCMQC.MQMO_NONE -
タイムアウト値。タイムアウト値が0以下の場合は
defaultResponseTimeoutプロパティの値を使用する。
- Parameters:
messageId- 相関IDに指定するメッセージIDtimeout- タイムアウト値(単位:msec)- Returns:
MQQueueからのメッセージ読み取りを制御するオプション
-
getGetSyncpointOption
protected int getGetSyncpointOption()メッセージ読み取り時に使用する同期点オプションを取得する。useXaプロパティがtrueの場合はCMQC.MQPMO_SYNCPOINT、 falseの場合はCMQC.MQPMO_NO_SYNCPOINTを返す。- Returns:
- メッセージ読み取り時に使用する同期点オプション
-
disconnect
protected void disconnect(com.ibm.mq.MQQueueManager mqQueueManager) MQQueueManagerの接続を切断する。 MQExceptionが送出された場合はTRACEレベルのログを出力し、MQExceptionを送出しない。- Parameters:
mqQueueManager-MQQueueManager
-
close
- Parameters:
mqQueues-MQQueueマップ
-
close
protected void close(com.ibm.mq.MQQueue mqQueue) 指定されたMQQueueをクローズする。 MQExceptionが送出された場合はTRACEレベルのログを出力し、MQExceptionを送出しない。- Parameters:
mqQueue-MQQueue
-
getJdbcConnection
protected Connection getJdbcConnection(com.ibm.mq.MQQueueManager mqQueueManager, XADataSource xaDataSource) throws SQLException, XAException MQQueueManagerからConnectionを取得する。 MQExceptionを捕捉した場合は、MessagingExceptionFactory.createMessagingException(String, Throwable)メソッド に例外処理を委譲する。- Parameters:
mqQueueManager-MQQueueManagerxaDataSource- XAデータソース- Returns:
Connection- Throws:
SQLException-Connectionの取得に失敗した場合XAException-Connectionの取得に失敗した場合
-
checkXa
protected void checkXa()分散トランザクションを使用するに設定されていることをチェックする。useXaプロパティがfalseの場合はIllegalStateExceptionを送出する。 -
begin
protected void begin(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションを開始する。 MQExceptionを捕捉した場合は、MessagingExceptionFactory.createMessagingException(String, Throwable)メソッド に例外処理を委譲する。- Parameters:
mqQueueManager-MQQueueManager
-
commit
protected void commit(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションをコミットする。 MQExceptionを捕捉した場合は、MessagingExceptionFactory.createMessagingException(String, Throwable)メソッド に例外処理を委譲する。- Parameters:
mqQueueManager-MQQueueManager
-
backout
protected void backout(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションをバックアウトする。 MQExceptionを捕捉した場合は、MessagingExceptionFactory.createMessagingException(String, Throwable)メソッド に例外処理を委譲する。- Parameters:
mqQueueManager-MQQueueManager
-
setQueueManagerName
キューマネージャ名称を設定する。- Parameters:
queueManagerName- キューマネージャ名称- Returns:
- このオブジェクト自体
-
setSendingQueueNames
送信キュー名(論理名)リストを設定する。- Parameters:
sendingQueueNames- 送信キュー名(論理名)リスト- Returns:
- このオブジェクト自体
-
setReceivedQueueName
受信キュー名(論理名)を設定する。- Parameters:
receivedQueueName- 受信キュー名(論理名)- Returns:
- このオブジェクト自体
-
setPoisonQueueNamePattern
退避キュー名パターン(論理名)を設定する。受信先キュー名を使用した命名規約により退避キュー名が規定されている場合は、 本プロパティを指定する。 本プロパティの設定例を示す。 設定値: "%s.POISON" 受信先キュー名が"TEST"の場合は、"TEST.POISON"となる。- Parameters:
poisonQueueNamePattern- 退避キュー名パターン(論理名)
-
setPoisonQueueName
退避キュー名(論理名)を設定する。退避キュー名が受信先キュー名と命名規約により規定されていない場合は、 本プロパティを指定する。
- Parameters:
poisonQueueName- 退避キュー名(論理名)
-
setBackoutLimit
バックアウト回数の上限値を設定する。 デフォルトは0。- Parameters:
backoutLimit- バックアウト回数の上限値- Returns:
- このオブジェクト自体
-
setBackoutLimitExceededExitCode
バックアウト上限を超えた場合に使用する終了コード(プロセスを終了(System.exit(int))する際に設定する値)を設定する。 デフォルトは190。- Parameters:
backoutLimitExceededExitCode- バックアウト上限を超えた場合に使用する終了コード(プロセスを終了(System.exit(int))する際に設定する値)- Returns:
- このオブジェクト自体
-
setBackoutLimitExceededFailureCode
public WmqMessagingProvider setBackoutLimitExceededFailureCode(String backoutLimitExceededFailureCode) バックアウト上限を超えた場合に使用する障害コードを設定する。- Parameters:
backoutLimitExceededFailureCode- バックアウト上限を超えた場合に使用する障害コード- Returns:
- このオブジェクト自体
-
setPutPoisonFailedExitCode
public void setPutPoisonFailedExitCode(int putPoisonFailedExitCode) ポイズンメッセージの送信に失敗した場合に使用する終了コード(プロセスを終了(System.exit(int))する際に設定する値)を設定する。 デフォルトは191。- Parameters:
putPoisonFailedExitCode- ポイズンメッセージの送信に失敗した場合に使用する終了コード(プロセスを終了(System.exit(int))する際に設定する値)
-
setPutPoisonFailedFailureCode
ポイズンメッセージの送信に失敗した場合に使用する障害コードを設定する。- Parameters:
putPoisonFailedFailureCode- ポイズンメッセージの送信に失敗した場合に使用する障害コード
-
setDefaultResponseTimeout
デフォルトタイムアウト値(単位:msec)を設定する。 デフォルトは300秒。- Specified by:
setDefaultResponseTimeoutin interfaceMessagingProvider- Parameters:
defaultResponseTimeout- デフォルトタイムアウト値(単位:msec)- Returns:
- このオブジェクト自体
-
setDefaultTimeToLive
送信電文の有効期間(単位:msec)を設定する。 デフォルトは60秒。- Specified by:
setDefaultTimeToLivein interfaceMessagingProvider- Parameters:
defaultTimeToLive- 送信電文の有効期間(単位:msec)- Returns:
- このオブジェクト自体
-
setMqmdFieldsOperator
WmqMqmdFieldsOperatorオブジェクトを設定する。 デフォルトはBasicWmqMqmdFieldsOperator。- Parameters:
mqmdFieldsOperator-WmqMqmdFieldsOperatorオブジェクト- Returns:
- このオブジェクト自体
-
setMessagingExceptionFactory
public WmqMessagingProvider setMessagingExceptionFactory(MessagingExceptionFactory messagingExceptionFactory) MessagingExceptionファクトリオブジェクトを設定する。 デフォルトはBasicWmqMessagingExceptionFactory。- Specified by:
setMessagingExceptionFactoryin interfaceMessagingProvider- Parameters:
messagingExceptionFactory-MessagingExceptionファクトリオブジェクト- Returns:
- このオブジェクト自体
-
setUseXa
public void setUseXa(boolean useXa) 分散トランザクションを使用するか否かを設定する。 デフォルトはtrue。- Parameters:
useXa- 分散トランザクションを使用する場合はtrue
-
setUseProductSystemErrorOutput
@IgnoreProperty("IBM MQ8.0\u7cfb\u4ee5\u964d\u3067\u30ed\u30ae\u30f3\u30b0\u6a5f\u80fd\u304c\u524a\u9664\u3055\u308c\u305f\u305f\u3081\u3001\u672c\u30d7\u30ed\u30d1\u30c6\u30a3\u306f\u5ec3\u6b62\u3057\u307e\u3057\u305f\u3002(\u5024\u3092\u8a2d\u5b9a\u3057\u3066\u3082\u610f\u5473\u304c\u3042\u308a\u307e\u305b\u3093)") public void setUseProductSystemErrorOutput(boolean useProductSystemErrorOutput) IBM MQによるMQException発生時の標準エラー出力を使用するか否かを設定する。IBM MQ8.0系以降でロギング機能が削除されたため、本プロパティは廃止しました。(値を設定しても意味がありません)
- Parameters:
useProductSystemErrorOutput- IBM MQによるMQException発生時の標準エラー出力を使用する場合はtrue
-