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