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が異常終了する。
-
コネクションの確立が長時間完了しないで待ち状態となる。
-
MQCONN命令が理由コードMQRC_UNEXPECTED_ERROR(予期しないエラーが発生)で失敗する。
-
APIトレースファイルの出力に失敗する。
ユーザがプロセスで同時に使用できるファイル記述子の最大数は,次に示す計算式で求められます。ユーザがプロセスで同時に使用するファイル記述子の数が右辺の計算式で求めた値を超えないように,UAPの処理方式やプロセス構成を設計してください。
A ≦ B - ((C × 5) + D)
- A:ユーザがプロセスで同時に使用できるファイル記述子の最大数
-
適用OS
バージョン
Aが右辺の計算式で求めた値を超えた場合の対処方法
Linux
07-51-01以前
-
カーネル設定値が1024未満の場合
カーネル設定値を変更することでプロセスで使用できるファイル記述子の数を増やせます。
-
カーネル設定値が1024以上の場合
カーネル設定値を変更するといった対策はありません。Aの同時使用数を減らしてください。多数のファイル記述子を同時に使用する必要がある(減らせない)ときは,プロセスを分割してください。
07-51-02以降
カーネル設定値を変更することでプロセスで使用できるファイル記述子の数を増やせます。
AIX
07-50以降
カーネル設定値を変更することでプロセスで使用できるファイル記述子の数を増やせます。
-
- B:プロセスで使用できるファイル記述子の最大数
-
OSの制限による上限またはuCosminexus TP1/Message Queue Accessの制限による上限のどちらか小さい方の値が上限値です。
適用OS
バージョン
プロセスで使用できるファイル記述子の上限
OSの制限による上限
uCosminexus TP1/Message Queue Accessの制限による上限
Linux
07-51-01以前
カーネル設定値※1
1024
07-51-02以降
カーネル設定値※1
カーネル設定値※1
AIX
07-50以降
カーネル設定値※1
65534※2
- C:JMSインタフェース以外の場合,uCosminexus TP1/Message Queue Accessの関数を発行するスレッドの同時実行数
-
JMSインタフェースの場合,uCosminexus TP1/Message Queue Accessのリソースアダプタの数(通常は1)
1スレッド当たりuCosminexus TP1/Message Queue Accessが同時に使用するファイル記述子は最大5個です。
D:同時使用コネクション数※3
- 注※1
-
カーネル設定値の詳細については,OSのマニュアルを参照してください。
- 注※2
-
ファイル記述子の最大数は65534です。
ただし,fopen関数の最大同時使用数は,OSの仕様によってFOPEN_MAXで制限されています。詳細については,OSのマニュアルを参照してください。
uCosminexus TP1/Message Queue Accessが同時に使用するfopen関数の最大同時使用数は1スレッド当たり最大2個です。プロセスで同時に使用するfopen関数の同時使用数が制限を超えないようにしてください。
制限を超えて使用した場合は,次に示す現象が起こるおそれがあります。
・MQCONN命令が理由コードMQRC_UNEXPECTED_ERROR(予期しないエラーが発生)で失敗する。
・APIトレースファイルの出力に失敗する。
- 注※3
-
コネクション数の最大値は,すべての接続先uCosminexus TP1/Message QueueのMQCゲートウェイサーバの総数となります。
詳細は,マニュアル「TP1/Message Queue使用の手引」のMQCサービス定義の種類について説明している個所の表の「注※」の説明を参照してください。MQCサービス定義の種類については,MQCサービス定義の準備作業で説明されています。
-