サービスリクエスタから標準受付(SessionBean)を使用してサービス部品を呼び出した場合の問題発生個所の切り分け方について説明します。問題発生個所の切り分け方を次の図に示します。
図7-40 問題発生個所の切り分け方(サービスリクエスタから標準受付(SessionBean)を使用してサービス部品を呼び出した場合)
![[図データ]](figure/zc076200.gif)
- (i)サービス部品に障害の要因がある場合(サービス部品で定義したユーザ定義例外の場合)
- サービス部品に障害の要因があるおそれがあります。次のメソッドを使用してサービス部品が返した例外の内容を取得できます。
- getErrorMessage:サービス部品からの例外の内容を取得します。
- getErrorCode:サービス部品からの例外の内容に対応するエラーコードを取得します。
- 要因は,次の観点で調査してください。
- サービスリクエスタから要求したユーザ電文
- サービス部品稼働マシン
- サービス部品のプログラム
- サービス部品の呼び出しを再送するかどうかは,HCSCサーバを介したサービスリクエスタとサービス部品間(エンドツーエンド)の取り決めとなります。
- (ii)ビジネスプロセスに障害の要因がある場合(ビジネスプロセスで定義したフォルトの場合)
- ビジネスプロセスで実行したアクティビティの処理に障害の要因があるおそれがあります(サービス呼出アクティビティの場合,呼び出したサービス部品に障害の要因があるおそれがあります)。次のメソッドを使用してビジネスプロセスが返したフォルトの内容を取得できます。
- getErrorMessage:ビジネスプロセスからの例外の内容を取得します。
- getErrorCode:ビジネスプロセスからの例外の内容に対応するエラーコードを取得します。
- getCscmsgFaultCode:FaultCode情報を取得します。
- getCscmsgFaultString:FaultString情報を取得します。
- getCscmsgFaultActor:FaultActor情報を取得します。
- getCscmsgFaultDetail:FaultDetail情報を取得します。
- 要因は,次の観点で調査してください。
- サービスリクエスタから要求したユーザ電文
- サービス部品稼働マシン
- サービス部品のプログラム
- ビジネスプロセスの定義内容
- サービス部品の呼び出しを再送するかどうかは,HCSCサーバを介したサービスリクエスタとサービス部品間(エンドツーエンド)の取り決めとなります。
- また,ビジネスプロセスの設計内容によっても,再送(ビジネスプロセスの再実行)するかどうかシステム設計する必要があります。
- (iii)HCSCサーバでエラーを検知した場合(例外名が設定されていない場合)
- 次のメソッドを使用してエラーの内容を取得できます。取得したエラーコードおよびエラーメッセージの対策に従って対処します。
- getErrorMessage:HCSCサーバ内で検知したエラーのエラーメッセージを取得します。
- getErrorCode:HCSCサーバ内で検知したエラーのエラーコードを取得します。
- また,Cosminexusサービスプラットフォームが出力するメッセージログも参照して,調査します。
- 要因は,次の観点で調査してください。
- サービスリクエスタから要求した引数の内容
- HCSCサーバの設定または状態
- サービスアダプタの定義内容
- ビジネスプロセスの定義内容
- サービスリクエスタから要求したユーザ電文
- サービス部品稼働マシン
- サービス部品のプログラム
- ネットワークの状態
- サービス部品呼び出しを再送するかどうかは,エラーの内容によって異なります。一時的な障害の場合は,再送を試みることで成功することがありますが,次に示すエラーの場合は,再送を試みてもエラーとなります。
- サービスリクエスタから要求した引数の内容が誤っている場合
- HCSCサーバの設定に誤りがある場合
- サービスアダプタやビジネスプロセスの定義に誤りがある場合
- サービスリクエスタから要求したユーザ電文に誤りがある場合など
- (iv)通信基盤でエラーを検知した場合(RuntimeExceptionの場合)
- RuntimeExceptionからエラーの内容を取得できます。取得した例外のエラー情報を基に対処してください。
- 要因は,次の観点で調査してください。
- サービスリクエスタで使用しているスタブ
- サービスリクエスタ稼働マシンのJ2EEコンテナの設定または状態
- HCSCサーバの設定または状態
- ネットワークの状態
- サービス部品の呼び出しを再送するかどうかは,エラーの内容によって異なります。一時的な障害の場合は,再送を試みることで成功することがありますが,次に示すエラーの場合は,再送を試みてもエラーとなります。
- サービスリクエスタで使用しているスタブが誤っている場合
- サービスリクエスタ稼働マシンのJ2EEコンテナの設定に誤りがある場合
- HCSCサーバの設定に誤りがある場合
サービスリクエスタへ応答した例外およびエラーメッセージから問題発生個所を切り分ける方法のほかに,サービスリクエスタ側で設定したクライアント相関IDや,ビジネスプロセスの相関セットを基に問題発生個所を特定する方法があります。サービス部品呼び出し要求の実行履歴の追跡を次の図に示します。
図7-41 サービス部品呼び出し要求の実行履歴の追跡(SessionBeanの場合)
![[図データ]](figure/zc076300.gif)
特定方法やビジネスプロセスを使用する場合の手順については,Webサービス(SOAP通信)の場合の手順と同様です。詳細については,「7.7.1 Webサービス(SOAP通信)実行時の障害対策」を参照してください。
ここでは,SessionBeanの場合にだけ該当する手順について説明します。
(a) サービスリクエスタから指定したクライアント相関IDからたどる方法
サービスリクエスタから指定したクライアント相関IDからたどる手順を次に示します。
- クライアント相関IDを調査します。
- メッセージ共通IDを取得します。
- ビジネスプロセスのプロセスIDを取得します。
- アクティビティの状態を取得します。
- ユーザ電文を確認します。
詳細については,「7.7.1 Webサービス(SOAP通信)実行時の障害対策」を参照してください。
- 性能解析トレースを使ってさらに調査し,問題が発生した個所をより細かく特定できます。また,性能解析トレースのスレッドIDをたどることで,サービス部品稼働マシンのログとの対応を確認できます。次のように確認します。
1. メッセージ共通IDと一致する文字列を含む行を検索します。
HCSCサーバのリクエスト受付の入口で「ASCII」列に出力されているため,そこが最初に検索されます。
2. 検索で一致した行のスレッドIDを確認して,そのスレッドIDをたどってエラー発生個所を調査します。
RMI-IIOP呼び出しによってスレッドIDが変化しますが,「Root AP CommonNo」列によってつながりがわかります。
3. 「Rc(リターンコード)」列の値が0以外の個所がエラー個所です。
4. エラー個所が見つかったらその前後の処理内容を確認して原因を調査します。
5. さらに調べたい場合は,Cosminexusが出力する障害情報であるJ2EEサーバ,リダイレクタ,サーバ管理コマンドのログを使って,エラー発生個所のスレッドIDをたどります。
図7-42 性能解析トレースの例
![[図データ]](figure/zc076400.gif)
![[図データ]](figure/zc076500.gif)
図7-42の図中の番号は次の内容を示します。
(1)メッセージ共通IDと一致する文字列を含む行です。共通のIDが与えられているためつながりがわかります。
(2)RMI呼び出しで複数のスレッドにわたるため,番号が変化しています。
(3)検索で一致したスレッド番号です。
(4)スレッド番号(項番3)のスレッドIDです。
(5)標準受付(SessionBean)の入口です。
(6)ビジネスプロセスの呼び出し口です。
(7)メッセージング基盤からのビジネスプロセス実行要求呼び出しです。
(8)データ変換要求の呼び出しです。
(9)データ変換要求からの応答です。
(10)メッセージング基盤へのビジネスプロセスからのサービス部品要求の呼び出しです。
(11)ビジネスプロセス受付の入口です。
(12)サービスアダプタ(SessionBean)のサービス部品呼び出し口です。
(13)HCSCサーバ稼働マシンからサービス部品稼働マシンの呼び出しです。
(14)EJBコンテナリクエスト直後
(15)EJBコンテナレスポンス直前
(16)エラー発生
この例では,図7-42で示した(13)で,サービス部品のRMIを呼び出し,そのあとEJBコンテナがリクエストを受信した直後にエラーが発生していることがわかります(性能解析トレースの採取レベルは「通常」と「詳細」の二つありますが,図7-42は「通常」で採取した場合のトレースです)。
サービス部品稼働マシンがCosminexus Application Serverを使用している場合は,エラーが起きた個所のスレッドIDとサービス部品稼働マシン側の障害情報を突き合わせることで,さらに調査できます。
なお,性能解析トレースのスレッドIDは10進数ですが,Cosminexusが出力する障害情報は16進数表現なので,個別にスレッドIDを16進数に直す必要があるため注意してください。
サービスアダプタからのサービス部品呼び出しについては,SessionBeanの呼び出しによってスレッドIDが変化しますが,Root AP CommonNo列によってつながりがわかります。性能解析トレースファイルの利用方法の詳細については,マニュアル「Cosminexus システム運用ガイド」を参照してください。
(b) ユーザ電文に指定したビジネスプロセスの相関セットからたどる方法
ユーザ電文に指定したビジネスプロセスの相関セットからたどる手順を次に示します。
- 相関セットを調査します。
- ビジネスプロセスのプロセスIDを取得します。
- アクティビティの状態を取得します。
詳細については,「7.7.1 Webサービス(SOAP通信)実行時の障害対策」を参照してください。