2.3.2 注意事項
クライアントアプリケーションの作成,および実行時の注意事項について次に示します。
-
TP1/Message Queue Accessは2相コミットに対応しています。ただし,ローカルトランザクション機能は1相コミットです。
-
MQCクライアント機能は,トランザクションの決着をMQCサーバ機能に依頼します。そのため,回線障害やサーバダウンが原因でトランザクションの決着時にMQCサーバ機能と連絡が取れない場合は,TMの決着依頼に対しリトライを要求します。
したがって,トランザクション中にMQCサーバ機能を停止した場合は,MQCクライアント機能はMQCサーバ機能が再起動するまで,TMの決着依頼に対し繰り返しリトライを要求します。
-
TP1/Message Queue Accessは,次の命令のエラー時に理由コードとしてMQRC_CONNECTION_BROKEN(コネクション切断)を返す場合があります。この理由コードを受け取った場合は,MQIに指定したコネクションハンドルが無効になります。MQCONN命令の発行によってコネクションを再度設定してください。
-
MQDISC,MQOPEN,MQCLOSE,MQGET,MQPUT,MQPUT1,MQSET,MQINQ,MQCMIT,またはMQBACK
-
-
TP1/Message Queue Accessを使用するUAPで,MQGMO構造体のOptionsパラメタにMQGMO_WAITを指定した場合は,MQGET命令が完了するまで,UAPを正常に停止させることはできません。
-
UAPをJavaで作成する場合,Javaがプロセスメモリを解放します。このため,メモリ不足(理由コード:SIGSEGV)でJavaが異常終了する場合があります。Java起動時に,-XmxXXm(XXm:サイズ(m:メガバイトを表す))を指定して最大ヒープサイズを調整してください。
-
TP1/Message Queue Accessは,MQDISC命令発行時にMQCゲートウェイサーバで後処理をするため,直後に発行されたMQCONN命令がMQRC_Q_MGR_NOT_AVAILABLE(キューマネジャが接続不能)でエラーリターンする場合があります。
MQDISC命令,またはMQCONN命令を繰り返し発行するUAPを使用した場合は,同時MQCONN数とMQCゲートウェイサーバ数が同じであるときにも,MQCONN命令のリトライ発行処理をしてください。
-
TP1/Message Queue Accessを使用するUAPでは,MQCONN命令発行時に回線障害(ソケット関数異常終了)が発生した場合に,理由コードとしてMQRC_UNEXPECTED_ERROR(予期しないエラーが発生)を返します。また,MQCゲートウェイサーバが不足した場合には,理由コードとしてMQRC_Q_MGR_NOT_AVAILABLE(キューマネジャが接続不能)を返します。どちらの場合もUAPでMQCONN命令のリトライ発行処理をしてください。
-
サーバ側に対するトランザクション制御依頼の送受信中にクライアントアプリケーションがダウンした場合,サーバ側のトランザクション状態とクライアント側のトランザクション状態が不一致となることがあります。この場合,サーバ側で次の対処をすることでトランザクションをロールバックできます。
-
OpenTP1のトランザクション状態表示コマンド(trnls -t)を実行し,不一致となったトランザクションを発生させたサーバ名(MQCGWPサーバ名)を確認します。
-
確認したMQCGWPサーバをdcsvstopコマンドで正常停止します。
-
1.で確認したMQCGWPサーバに対してmqccontrnコマンドに-fオプションを指定して実行します。
-
-
JMSインタフェースのAPIトレース取得情報について
JMSインタフェースのAPIトレースは,MQIレベルの情報が取得されます。JMSインタフェースでは,デプロイ以降で発行されたすべてのMQI情報が取得されます。
-
トランザクションが中断している間(xa_end(TM_SUSPEND))は,別のトランザクションを開始できません。
-
クライアントアプリケーションをマルチスレッドで作成する場合,JMSインタフェースの使用有無によって動作や注意事項が異なります。動作や注意事項を次の表に示します。
表2‒8 動作と注意事項 JMSインタフェースの使用有無
動作と注意事項
なし
(JMSインタフェース以外の場合)
-
MQCONN命令でMQCサーバと接続し,MQDISC命令でMQCサーバとの接続を解放します。
-
同一スレッド内で複数のMQCONN命令を発行できます。ただし,同一のコネクションハンドルを使用したMQI命令を複数スレッドで同時に発行した場合の動作は保証できません。
-
コネクションハンドルを別スレッドで使用できます。
あり
(JMSインタフェースの場合)
-
MQCONN命令でMQCサーバと接続し,MQDISC命令でMQCサーバとの接続を解放します。ただし,コネクションプーリング機能を使用している場合は,TP1/Message Queue Accessリソースアダプタ起動時にMQCサーバとの接続を行い,コネクションプーリングの仕様に従って接続が保持されます。
-
同一スレッド内で複数のMQCONN命令を発行できます。また,同一のコネクションハンドルを使用したMQI命令を複数スレッドで同時に発行できますが,MQCサーバへの要求はスレッド単位でシリアライズされます。
-
コネクションハンドルを別スレッドで使用できます。
-
-
UAP(JavaインタフェースやJMSインタフェースの場合,JavaVM)のプロセスでユーザが同時に使用可能なファイル記述子の最大数(ソケット用のファイル記述子も含む)は,次に示す計算式で求められます。
次に示す計算式を超えるファイル記述子を同時に使用できません。使用した場合,UAPまたはJavaVMが異常終了するおそれがあるため,計算式を超えないように注意してください。
A ≦ B - (C × 5※1 + D)
A:プロセスでユーザが同時に使用可能なファイル記述子の最大数
- B:プロセスで使用可能なファイル記述子の最大数(次表参照)
-
適用OS
最大数
Linux
1024
AIX
32767※2
- C:JMSインタフェース以外の場合,uCosminexus TP1/Message Queue Accessの関数を発行するスレッドの同時実行数
-
JMSインタフェースの場合,uCosminexus TP1/Message Queue Accessのリソースアダプタの数(通常は1)
D:同時使用コネクション数※3
- 注※1
-
uCosminexus TP1/Message Queue Accessが同時に使用するファイル記述子の最大数
- 注※2
-
次のすべてに合致した場合,プロセスで使用可能なファイル記述子の最大数は,65534となります。
・環境変数DCMQCAPITRCOUT(APIトレースディスク出力要否)を省略,または「OFF」を指定
・環境変数DCMQCDEFCON(接続先情報定義ファイル読み込み要否)を省略,または「N」を指定
- 注※3
-
コネクション数の最大値は,すべての接続先uCosminexus TP1/Message QueueのMQCゲートウェイサーバの総数となります。
詳細は,マニュアル「TP1/Message Queue使用の手引」のMQCサービス定義の種類について説明している個所の表の「注※」の説明を参照してください。MQCサービス定義の種類については,MQCサービス定義の準備作業で説明されています。