Class WmqMessagingProvider
java.lang.Object
nablarch.integration.messaging.wmq.provider.WmqMessagingProvider
- All Implemented Interfaces:
Initializable
,MessagingProvider
WebSphere MQを使用した
MessagingProvider
の実装クラス。-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected void
backout
(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションをバックアウトする。protected void
begin
(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションを開始する。protected void
退避キューの設定不備がないことをチェックする。protected void
checkXa()
分散トランザクションを使用するに設定されていることをチェックする。protected void
close
(com.ibm.mq.MQQueue mqQueue) 指定されたMQQueue
をクローズする。protected void
指定された全てのMQQueue
をクローズする。protected void
commit
(com.ibm.mq.MQQueueManager mqQueueManager) 分散トランザクションをコミットする。WmqMessagingContext
を生成する。protected com.ibm.mq.MQQueueManager
キューマネージャ名称を指定してMQQueueManager
を生成する。protected void
disconnect
(com.ibm.mq.MQQueueManager mqQueueManager) MQQueueManager
の接続を切断する。protected com.ibm.mq.MQGetMessageOptions
getGetMessageOptions
(String messageId, long timeout) MQQueue
からのメッセージ読み取りを制御するオプションを取得する。protected int
メッセージ読み取り時に使用する同期点オプションを取得する。protected Connection
getJdbcConnection
(com.ibm.mq.MQQueueManager mqQueueManager, XADataSource xaDataSource) MQQueueManager
からConnection
を取得する。protected ReceivedMessage
getMessage
(com.ibm.mq.MQQueue receivedMqQueue, String messageId, long timeout, com.ibm.mq.MQQueue poisonMqQueue) 指定されたMQQueue
から受信メッセージを読み込む。protected com.ibm.mq.MQQueue
getMQQueue
(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.MQPutMessageOptions
MQQueue
へのメッセージ書き込みを制御するオプションを取得する。protected com.ibm.mq.MQPutMessageOptions
MQQueue
へのポイズンメッセージ書き込みを制御するオプションを取得する。protected int
メッセージ書き込み時に使用する同期点オプションを取得する。protected int
受信先MQQueue
のオープンを制御するオプションを取得する。protected int
送信先MQQueue
のオープンを制御するオプションを取得する。void
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 String
putMessage
(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
オブジェクトを設定する。void
setPoisonQueueName
(String poisonQueueName) 退避キュー名(論理名)を設定する。void
setPoisonQueueNamePattern
(String poisonQueueNamePattern) 退避キュー名パターン(論理名)を設定する。void
setPutPoisonFailedExitCode
(int putPoisonFailedExitCode) ポイズンメッセージの送信に失敗した場合に使用する終了コード(プロセスを終了(System.exit(int)
)する際に設定する値)を設定する。void
setPutPoisonFailedFailureCode
(String putPoisonFailedFailureCode) ポイズンメッセージの送信に失敗した場合に使用する障害コードを設定する。setQueueManagerName
(String queueManagerName) キューマネージャ名称を設定する。setReceivedQueueName
(String receivedQueueName) 受信キュー名(論理名)を設定する。setSendingQueueNames
(List<String> sendingQueueNames) 送信キュー名(論理名)リストを設定する。void
setUseProductSystemErrorOutput
(boolean useProductSystemErrorOutput) WebSphere MQによるMQException
発生時の標準エラー出力を使用するか否かを設定する。void
setUseXa
(boolean useXa) 分散トランザクションを使用するか否かを設定する。
-
Constructor Details
-
WmqMessagingProvider
public WmqMessagingProvider()
-
-
Method Details
-
initialize
public void initialize()WebSphere MQの初期化処理を行う。 下記の処理を行う。checkPoisonSetting()
メソッドを呼び出し退避キューの設定不備がないことをチェックする。- 接続モード(
CMQC.TRANSPORT_PROPERTY
)をバインディングモードに設定する。 - スレッド類縁性(
CMQC.THREAD_AFFINITY_PROPERTY
)にuseXa
プロパティの値を設定する。 useProductSystemErrorOutput
プロパティがfalseの場合はWebSphere MQによる標準エラー出力を無効化する。- 接続モード(
CMQC.TRANSPORT_PROPERTY
)をバインディングモードに設定する。 poisonQueueNamePattern
が指定された場合はreceivedQueueName
を使用してフォーマットした退避キュー名を設定する。
- Specified by:
initialize
in 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:
createContext
in 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_OUTPUT
CMQC.MQOO_FAIL_IF_QUIESCING
- Returns:
- 送信先
MQQueue
のオープンを制御するオプション
-
getReceivedQueueOpenOptions
protected int getReceivedQueueOpenOptions()受信先MQQueue
のオープンを制御するオプションを取得する。 下記オプションを指定した値を返す。CMQC.MQOO_INPUT_SHARED
CMQC.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
-MQQueueManager
queueNames
- キュー名リスト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
-MQQueueManager
queueName
- キュー名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
-MQQueue
sendingMessage
- 送信メッセージ- 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
-MQQueue
messageId
- 相関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_ID
CMQC.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
-MQQueueManager
xaDataSource
- 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:
setDefaultResponseTimeout
in interfaceMessagingProvider
- Parameters:
defaultResponseTimeout
- デフォルトタイムアウト値(単位:msec)- Returns:
- このオブジェクト自体
-
setDefaultTimeToLive
送信電文の有効期間(単位:msec)を設定する。 デフォルトは60秒。- Specified by:
setDefaultTimeToLive
in interfaceMessagingProvider
- Parameters:
defaultTimeToLive
- 送信電文の有効期間(単位:msec)- Returns:
- このオブジェクト自体
-
setMqmdFieldsOperator
WmqMqmdFieldsOperator
オブジェクトを設定する。 デフォルトはBasicWmqMqmdFieldsOperator
。- Parameters:
mqmdFieldsOperator
-WmqMqmdFieldsOperator
オブジェクト- Returns:
- このオブジェクト自体
-
setMessagingExceptionFactory
public WmqMessagingProvider setMessagingExceptionFactory(MessagingExceptionFactory messagingExceptionFactory) MessagingException
ファクトリオブジェクトを設定する。 デフォルトはBasicWmqMessagingExceptionFactory
。- Specified by:
setMessagingExceptionFactory
in interfaceMessagingProvider
- Parameters:
messagingExceptionFactory
-MessagingException
ファクトリオブジェクト- Returns:
- このオブジェクト自体
-
setUseXa
public void setUseXa(boolean useXa) 分散トランザクションを使用するか否かを設定する。 デフォルトはtrue。- Parameters:
useXa
- 分散トランザクションを使用する場合はtrue
-
setUseProductSystemErrorOutput
public void setUseProductSystemErrorOutput(boolean useProductSystemErrorOutput) WebSphere MQによるMQException
発生時の標準エラー出力を使用するか否かを設定する。 デフォルトはfalse。- Parameters:
useProductSystemErrorOutput
- WebSphere MQによるMQException
発生時の標準エラー出力を使用する場合はtrue
-