7.7.4 MDB(DBキュー)実行時の障害対策
(1) MDB(DBキュー)でのエラーの伝わり方
MDB(DBキュー)でのサービス部品呼び出しでは,サービスリクエスタとHCSCサーバの間,HCSCサーバとサービス部品の間でエラーは伝わりません。検知できる障害の種類と,ログおよびトレースの出力先を次に説明します。
なお,非同期の標準受付(MDB(DBキュー))からMDB(DBキュー)アダプタへのサービス部品呼び出しはできません。そのため,サービス部品側がDBキューの場合,またはサービスリクエスタ側がDBキューの場合とに分けて説明します。
(a) DBキューがサービス部品側にある場合
- サービス部品でエラーが発生した場合
-
サービス部品で発生したエラーは,HCSCサーバおよびサービスリクエスタへエラー情報として伝わりません。エラーの情報はサービス部品稼働マシン側に出力されます。サービス部品でエラーが発生した場合のエラーの伝わり方を次の図に示します。
図7‒80 サービス部品でエラーが発生した場合のエラーの伝わり方
(b) DBキューがサービスリクエスタ側にある場合
- HCSCサーバからエラーが発生した場合
-
HCSCサーバからエラーが発生した場合のエラーの伝わり方を次の図に示します。
図7‒81 HCSCサーバからエラーが発生した場合のエラーの伝わり方 図中の各エラーには,次に示すケースが該当します。
-
エラー1:要求パラメタ不正など
-
エラー2:宛先(ロケーション)が見つからない,サービスアダプタが停止しているなど
-
エラー3:データ変換に失敗したなど
-
エラー4:メッセージ送信失敗など
HCSCサーバで図中のエラー1〜エラー3のどれかを検知した場合,HCSCサーバ稼働マシン上のReliable Messagingにエラーを伝えます。
図中のエラー4を検知した場合,HCSCサーバ稼働マシン上のReliable Messagingにエラーを伝えるか,サービスアダプタでエラーの例外をフォルト電文に変換するか選択できます。例外発生時に取得するエラーの選択方法については,「7.11 サービスアダプタでの例外発生時の運用」を参照してください。
発生したエラーのメッセージをメッセージログに出力します。また,Reliable Messagingは,ローカルキューからメッセージの取り出しに失敗したことを示すメッセージをHCSCサーバ稼働マシン上のログに出力します。
なお,HCSCサーバでエラーを検知した場合,HCSCサーバ側でロールバックして再度サービス部品でメッセージの取り出し(サービス部品呼び出し)を試みます。
HCSCサーバ稼働マシン上のメッセージの取り出しでロールバックして,ロールバックの回数(メッセージの配送回数)が最大値に達した場合,そのメッセージはデッドメッセージキューに移動します。デッドメッセージキュー名を設定していない場合,およびデッドメッセージキューを作成していない場合は,無限にメッセージの取り出しとトランザクションのロールバック処理が再実行されるため,必ずデッドメッセージキュー名やデッドメッセージキューを設定してください。なお,処理の再実行がHCSCサーバランタイム定義ファイルのrequest-jms.rollback-countプロパティに指定した回数を超えた場合,警告メッセージ(KDEC00049-W)が出力されます。
Reliable Messagingのセットアップについては,「3.1.2 実行環境に必要なソフトウェアを設定する」を参照してください。Reliable Messagingの詳細については,マニュアル「Reliable Messaging」を参照してください。
-
- サービスリクエスタでエラーを検知した場合
-
サービスリクエスタでエラーを検知した場合のエラーの伝わり方を次の図に示します。
図7‒82 サービスリクエスタでエラーを検知した場合のエラーの伝わり方 サービスリクエスタがDBキューにメッセージをキューイングしたときに発生したエラーは,サービスリクエスタ稼働マシン側に出力されます。
- 同期のサービス部品を呼び出してユーザ定義例外のエラーが発生した場合
-
同期のサービス部品を呼び出してユーザ定義例外のエラーが発生した場合のエラーの伝わり方を次の図に示します。
図7‒83 同期のサービス部品を呼び出してユーザ定義例外のエラーが発生した場合のエラーの伝わり方 非同期(MDB(DBキュー))の標準受付に対してサービス部品を呼び出すときに応答用のキューを指定して,非同期(MDB(DBキュー))の標準受付から同期のSOAPアダプタのサービス部品を呼び出します。このとき,サービス部品側でユーザ定義例外が発生すると,エラー情報のメッセージが応答用のキュー(送信用共用キュー)に送信されます。送信用共用キューの送信先をサービスリクエスタ側のDBキューに指定しておくと,そこからメッセージを取り出すことで,エラーの内容を取得できます。
応答用のキュー(送信用共用キュー)はあらかじめ作成して準備しておく必要があります。応答用のキューの設定をしていない場合や,応答用のキューのメッセージ数が超過し,応答用のキューへの送信が失敗した場合,HCSCサーバ内で処理がロールバックして,標準受付の受信用共用キューからメッセージが再送されます(ただし,サービス部品側の処理(トランザクション)はロールバックしません)。さらに,ロールバックの回数(メッセージの配送回数)が最大値に達したメッセージはデッドメッセージキューに移動するため,事前に必ずデッドメッセージキュー名の設定とデッドメッセージキューの作成を実施してください。デッドメッセージキュー名を設定していない場合,およびデッドメッセージキューを作成していない場合は,無限にサービス部品を呼び出す処理が再実行されます。
(2) 問題発生個所の切り分け方
サービスリクエスタから標準受付(MDB(DBキュー))を使用して,サービス部品を呼び出した場合の問題発生個所の切り分け方について説明します。問題発生個所の切り分けの流れを次の図に示します。
- (i)サービス部品稼働マシンでのエラーの場合
-
サービス部品稼働マシン側に出力する障害情報から,障害を調査します。
要因は,次の観点で調査してください。
-
サービスリクエスタから要求したユーザ電文
-
サービス部品稼働マシンの状態
-
サービス部品稼働マシンの設定
-
サービス部品のプログラム
-
- (ii)HCSCサーバ稼働マシンでのエラーの場合
-
HCSCサーバ稼働マシン側のメッセージログ,またはHCSCサーバ稼働マシン側のReliable Messagingが出力する障害情報を参照して,障害を調査します。
要因は,次の観点で調査してください。
-
サービスリクエスタから要求したバイナリデータの内容
-
サービスリクエスタから要求したバイナリデータの形式
-
HCSCサーバの設定または状態
-
HCSCサーバのReliable Messagingの設定
-
サービスアダプタの定義内容
-
ビジネスプロセスの定義内容
-
サービスリクエスタから要求したユーザ電文
-
ネットワークの状態
-
- (iii)サービスリクエスタ稼働マシンでのエラーの場合
-
サービスリクエスタ稼働マシン側に出力する障害情報から,障害を調査します。
要因は,次の観点で調査してください。
-
サービスリクエスタから要求したユーザ電文
-
サービスリクエスタ稼働マシンの状態
-
サービスリクエスタ稼働マシンの設定
-
サービスリクエスタのプログラム
-
(3) そのほかの障害要因の特定方法(サービス部品呼び出し要求の実行履歴の追跡)
サービスリクエスタから指定した情報や,HCSCサーバからの情報を基に,サービス部品呼び出しの処理がどこまで進んだか実行履歴を追跡できます。ここでは,実行履歴を追跡するために必要な情報(ID)について説明します。
(a) クライアント相関ID
クライアント相関IDは,サービス部品呼び出し要求を行うサービスリクエスタ側のプログラムで,要求時に設定する情報です。サービスリクエスタからの要求電文と,HCSCサーバで管理しているログおよびトレースとを対応づけるために使用します。そのため,HCSCサーバに送信した要求ごとに異なるIDを指定することを推奨します(サービスリクエスタ作成時に指定が必要です)。クライアント相関IDが引き継がれる範囲を次の図に示します。
(b) メッセージ共通ID
HCSCサーバが付与するIDです。HCSCサーバ内のログやトレースを識別するために使用します。メッセージ共通IDが引き継がれる範囲を次の図に示します。
(c) JMSMessageID
Reliable Messagingが付与するIDです。HCSCサーバ内のログやトレースに出力します。JMSMessageIDが引き継がれる範囲を次の図に示します。
注 JMSCorrelationIDやユーザ固有のプロパティなどの情報は引き継がれません。
(d) スレッドID
J2EEコンテナによって処理するスレッドごとに与えられるIDです。スレッドIDが引き継がれる範囲を次の図に示します。
- 注
-
サービス部品側のプログラムと関連づける場合は,ユーザ電文に関連づけのための情報を埋め込む必要があります。