Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム システム構築・運用ガイド


7.7.2 SessionBean実行時の障害対策

〈この項の構成〉

(1) SessionBeanでの通信でのエラーの伝わり方

サービスリクエスタから標準受付を使用してサービス部品を呼び出す場合のエラーの伝わり方を説明します。エラーの伝わり方は,エラーの種類やビジネスプロセスの有無によって異なります。

サービス部品からユーザ定義例外のエラーがリターンした場合(ビジネスプロセスを使用しないとき)

サービス部品からユーザ定義例外のエラーがリターンした場合でビジネスプロセスを使用しないときのSessionBeanでの通信でのエラーの伝わり方を次の図に示します。

図7‒57 サービス部品からユーザ定義例外のエラーがリターンした場合(ビジネスプロセスを使用しないとき)のSessionBeanでの通信でのエラーの伝わり方

[図データ]

サービス部品で発生した例外は,そのまま例外としてHCSCサーバに伝わります。例外をキャッチしたHCSCサーバはサービスリクエスタに対してCSCMsgServerExceptionをスローします。キャッチした例外オブジェクトのgetterを使用することで,発生した例外名や例外の内容(エラーの詳細)を取得できます。CSCMsgServerExceptionの詳細については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.4.7 エラー情報を取得する」を参照してください。

サービス部品からユーザ定義例外以外のエラーがリターンした場合(ビジネスプロセスを使用しないとき)

サービス部品からユーザ定義例外以外のエラーがリターンした場合でビジネスプロセスを使用しないときのSessionBeanでの通信でのエラーの伝わり方を次の図に示します。

図7‒58 サービス部品からユーザ定義例外以外のエラーがリターンした場合(ビジネスプロセスを使用しないとき)のSessionBeanでの通信でのエラーの伝わり方

[図データ]

サービス部品で想定外の例外が発生した場合,RuntimeException(システム例外)としてHCSCサーバに伝わります。

サービスアダプタからサービス部品を呼び出したときに発生したシステム例外は,サービスアダプタでフォルト電文に変換することもできます。システム例外をフォルト電文に変換する方法については,「7.11 サービスアダプタでの例外発生時の運用」を参照してください。

例外をキャッチしたHCSCサーバはサービスリクエスタに対してCSCMsgServerExceptionをスローします。キャッチした例外オブジェクトのgetterを使用することで,発生した例外の内容(エラーの詳細)を取得できます。CSCMsgServerExceptionの詳細については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.4.7 エラー情報を取得する」を参照してください。

HCSCサーバからエラーがリターンした場合(ビジネスプロセスを使用しないとき)

HCSCサーバからエラーがリターンした場合でビジネスプロセスを使用しないときのSessionBeanでの通信でのエラーの伝わり方を次の図に示します。

図7‒59 HCSCサーバからエラーがリターンした場合(ビジネスプロセスを使用しないとき)のSessionBeanでの通信でのエラーの伝わり方

[図データ]

図中の各エラーには,次に示すケースが該当します。

  • エラー1:要求パラメタ不正など

  • エラー2:宛先(ロケーション)が見つからない,サービスアダプタが停止しているなど

  • エラー3:データ変換に失敗したなど

  • エラー4:宛先不正,サービス部品が停止,通信障害など

HCSCサーバで図中のエラー1〜エラー3のどれかを検知した場合,発生したエラーの情報をCSCMsgServerExceptionでサービスリクエスタにスローします。図中のエラー4を検知した場合,発生したエラーの例外をサービスリクエスタにそのままスローするか,サービスアダプタでエラーの例外をフォルト電文に変換するか選択できます。例外発生時に取得するエラーの選択方法については,「7.11 サービスアダプタでの例外発生時の運用」を参照してください。

サービスリクエスタは,キャッチした例外オブジェクトのgetterを使用することで,発生した例外の内容(エラーの詳細)を取得できます。CSCMsgServerExceptionの詳細については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.4.7 エラー情報を取得する」を参照してください。

サービス部品からユーザ定義例外のエラーがリターンした場合(ビジネスプロセスを使用するとき)

サービス部品からユーザ定義例外のエラーがリターンした場合でビジネスプロセスを使用するときのSessionBeanでの通信でのエラーの伝わり方を次の図に示します。

図7‒60 サービス部品からユーザ定義例外のエラーがリターンした場合(ビジネスプロセスを使用するとき)のSessionBeanでの通信でのエラーの伝わり方

[図データ]

サービス部品でユーザ定義例外が発生すると,ビジネスプロセスはエラーを次の順に処理します。

  1. エラーを一度,ビジネスプロセスでキャッチします。

  2. ビジネスプロセスで,サービス部品が失敗したことを示す例外に変換し,例外を伝えます。

  3. サービスリクエスタに対してCSCMsgServerExceptionをスローします。

キャッチした例外オブジェクトのgetterを使用することで,発生した例外の内容(エラーの詳細)を取得できます。CSCMsgServerExceptionの詳細については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.4.7 エラー情報を取得する」を参照してください。

サービス部品からユーザ定義例外以外のエラーがリターンした場合(ビジネスプロセスを使用するとき)

サービス部品からユーザ定義例外以外のエラーがリターンした場合でビジネスプロセスを使用するときのSessionBeanでの通信でのエラーの伝わり方を次の図に示します。

図7‒61 サービス部品からユーザ定義例外以外のエラーがリターンした場合(ビジネスプロセスを使用するとき)のSessionBeanでの通信でのエラーの伝わり方

[図データ]

サービス部品で想定外の例外が発生した場合,発生した例外をサービスリクエスタにそのままリターンするか,サービスアダプタで例外をフォルト電文に変換するか選択できます。例外をフォルト電文に変換する方法については,「7.11 サービスアダプタでの例外発生時の運用」を参照してください。

例外をフォルト電文に変換しない場合,ビジネスプロセスはエラーを次の順に処理します。

  1. エラーを一度,ビジネスプロセスでキャッチします。

  2. ビジネスプロセスで,サービス部品が失敗したことを示す例外に変換し,例外を伝えます。

    例外をフォルト電文に変換した場合,フォルトとしてビジネスプロセスでキャッチできます。

  3. サービスリクエスタに対してCSCMsgServerExceptionをスローします。

キャッチした例外オブジェクトのgetterを使用することで,発生した例外の内容(エラーの詳細)を取得できます。CSCMsgServerExceptionの詳細については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.4.7 エラー情報を取得する」を参照してください。

HCSCサーバからエラーがリターンした場合(ビジネスプロセスを使用するとき)

HCSCサーバからエラーがリターンした場合でビジネスプロセスを使用するときのSessionBeanでの通信でのエラーの伝わり方を次の図に示します。

図7‒62 HCSCサーバからエラーがリターンした場合(ビジネスプロセスを使用するとき)のSessionBeanでの通信でのエラーの伝わり方

[図データ]

図中の各エラーには,次に示すケースが該当します。

  • エラー1:要求パラメタ不正など

  • エラー2:宛先(ロケーション)が見つからない,サービスアダプタが停止しているなど

  • エラー3:データ変換に失敗したなど

  • エラー4:宛先不正,サービス部品が停止,通信障害など

  • エラー5:ビジネスプロセス処理上での例外エラーなど

HCSCサーバで図中のエラー1〜エラー3およびエラー5のどれかを検知した場合,発生したエラーの情報をCSCMsgServerExceptionでサービスリクエスタにスローします。

図中のエラー4を検知した場合,発生したエラーの例外をサービスリクエスタにそのままスローするか,サービスアダプタでエラーの例外をフォルト電文に変換するか選択できます。例外発生時に取得するエラーの選択方法については,「7.11 サービスアダプタでの例外発生時の運用」を参照してください。

サービスリクエスタは,キャッチした例外オブジェクトのgetterを使用することで,発生した例外の内容(エラーの詳細)を取得できます。CSCMsgServerExceptionの詳細については,マニュアル「サービスプラットフォーム 開発ガイド 基本開発編」の「9.4.7 エラー情報を取得する」を参照してください。

サービスリクエスタでエラーを検知した場合

サービスリクエスタでエラーを検知した場合のSessionBeanでの通信でのエラーの伝わり方を次の図に示します。

図7‒63 サービスリクエスタでエラーを検知した場合のSessionBeanでの通信でのエラーの伝わり方

[図データ]

サービスリクエスタからHCSCサーバを呼び出せなかった場合や,サービス部品の呼び出しは完了したが何らかの原因でHCSCサーバからサービスリクエスタへの応答が返らなかった場合などは,サービスリクエスタ側(クライアント側)のスタブ(J2EEコンテナ)がエラーをリターンします。サービスリクエスタはRuntimeExceptionで例外をキャッチできます。キャッチした例外オブジェクトのgetterを使用することで,発生したフォルト情報(エラーの詳細)を取得できます。

(2) 問題発生個所の切り分け方

サービスリクエスタから標準受付(SessionBean)を使用してサービス部品を呼び出した場合の問題発生個所の切り分け方について説明します。問題発生個所の切り分け方を次の図に示します。

図7‒64 問題発生個所の切り分け方(サービスリクエスタから標準受付(SessionBean)を使用してサービス部品を呼び出した場合)

[図データ]

(i)サービス部品に障害の要因がある場合(サービス部品で定義したユーザ定義例外の場合)

サービス部品に障害の要因があるおそれがあります。次のメソッドを使用してサービス部品が返した例外の内容を取得できます。

  • getErrorMessage:サービス部品からの例外の内容を取得します。

  • getErrorCode:サービス部品からの例外の内容に対応するエラーコードを取得します。

要因は,次の観点で調査してください。

  • サービスリクエスタから要求したユーザ電文

  • サービス部品稼働マシン

  • サービス部品のプログラム

サービス部品の呼び出しを再送するかどうかは,HCSCサーバを介したサービスリクエスタとサービス部品間(エンドツーエンド)の取り決めとなります。

(ii)ビジネスプロセスに障害の要因がある場合(ビジネスプロセスで定義したフォルトの場合)

ビジネスプロセスで実行したアクティビティの処理に障害の要因があるおそれがあります(サービス呼出アクティビティの場合,呼び出したサービス部品に障害の要因があるおそれがあります)。次のメソッドを使用してビジネスプロセスが返したフォルトの内容を取得できます。

  • getErrorMessage:ビジネスプロセスからの例外の内容を取得します。

  • getErrorCode:ビジネスプロセスからの例外の内容に対応するエラーコードを取得します。

  • getCscmsgFaultCode:FaultCode情報を取得します。

  • getCscmsgFaultString:FaultString情報を取得します。

  • getCscmsgFaultActor:FaultActor情報を取得します。

  • getCscmsgFaultDetail:FaultDetail情報を取得します。

要因は,次の観点で調査してください。

  • サービスリクエスタから要求したユーザ電文

  • サービス部品稼働マシン

  • サービス部品のプログラム

  • ビジネスプロセスの定義内容

サービス部品の呼び出しを再送するかどうかは,HCSCサーバを介したサービスリクエスタとサービス部品間(エンドツーエンド)の取り決めとなります。

また,ビジネスプロセスの設計内容によっても,再送(ビジネスプロセスの再実行)するかどうかシステム設計する必要があります。

(iii)HCSCサーバでエラーを検知した場合(例外名が設定されていない場合)

次のメソッドを使用してエラーの内容を取得できます。取得したエラーコードおよびエラーメッセージの対策に従って対処します。

  • getErrorMessage:HCSCサーバ内で検知したエラーのエラーメッセージを取得します。

  • getErrorCode:HCSCサーバ内で検知したエラーのエラーコードを取得します。

また,サービスプラットフォームが出力するメッセージログも参照して,調査します。

要因は,次の観点で調査してください。

  • サービスリクエスタから要求した引数の内容

  • HCSCサーバの設定または状態

  • サービスアダプタの定義内容

  • ビジネスプロセスの定義内容

  • サービスリクエスタから要求したユーザ電文

  • サービス部品稼働マシン

  • サービス部品のプログラム

  • ネットワークの状態

サービス部品呼び出しを再送するかどうかは,エラーの内容によって異なります。一時的な障害の場合は,再送を試みることで成功することがありますが,次に示すエラーの場合は,再送を試みてもエラーとなります。

  • サービスリクエスタから要求した引数の内容が誤っている場合

  • HCSCサーバの設定に誤りがある場合

  • サービスアダプタやビジネスプロセスの定義に誤りがある場合

  • サービスリクエスタから要求したユーザ電文に誤りがある場合など

(iv)通信基盤でエラーを検知した場合(RuntimeExceptionの場合)

RuntimeExceptionからエラーの内容を取得できます。取得した例外のエラー情報を基に対処してください。

要因は,次の観点で調査してください。

  • サービスリクエスタで使用しているスタブ

  • サービスリクエスタ稼働マシンのJ2EEコンテナの設定または状態

  • HCSCサーバの設定または状態

  • ネットワークの状態

サービス部品の呼び出しを再送するかどうかは,エラーの内容によって異なります。一時的な障害の場合は,再送を試みることで成功することがありますが,次に示すエラーの場合は,再送を試みてもエラーとなります。

  • サービスリクエスタで使用しているスタブが誤っている場合

  • サービスリクエスタ稼働マシンのJ2EEコンテナの設定に誤りがある場合

  • HCSCサーバの設定に誤りがある場合

(3) HCSCサーバから応答する例外の内容

HCSCサーバから応答するSOAP Fault(SOAPメッセージ)について,どの要素に何の情報が設定されるかを示します。HCSCサーバから応答する例外の内容を次の表に示します。エラーのケースの番号は「7.7.2(2) 問題発生個所の切り分け方」で示す番号に相当します。

表7‒78 HCSCサーバから応答する例外の内容

HCSCサーバから応答するCSCMsgServerExceptionのフォルト名

エラーのケース

(ii)の場合

(i),(iii)の場合

errorMessage

次に示すエラーの内容です。

  • HCSCサーバ内で検知したエラー

  • サービス部品,ビジネスプロセス,およびサービスアダプタからのエラー

errorCode

次に示す例外の内容に対応するエラーコードです。

  • HCSCサーバ内で検知したエラー

  • サービス部品,ビジネスプロセス,およびサービスアダプタからのエラー

processInstanceID

ビジネスプロセスのインスタンスIDの情報です。ビジネスプロセスでエラーが発生した場合に値が設定されます。

cscmsgFaultCode

サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultCode情報です。

値はありません。

cscmsgFaultString

サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultString情報です。

値はありません。

cscmsgFaultActor

サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのFaultActor情報です。

値はありません。

cscmsgFaultDetail

サービス部品(Webサービス),ビジネスプロセス,またはサービスアダプタからのDetail情報です。

値はありません。

faultName

サービス部品(WebサービスまたはSessionBean)またはビジネスプロセスからのフォルト名(例外名)情報です。次の場合に値が設定されます。

  • サービス部品(WebサービスまたはSessionBean)からのユーザ定義例外のSOAP Faultの場合

  • ビジネスプロセスからのフォルトの場合

値はありません。

注1

(iv)の場合は,サービスリクエスタ側のスタブ(J2EEコンテナ)からRuntimeExceptionをスローします。

注2

標準受付(SessionBean)からSOAPアダプタのサービス部品を呼び出した場合,(ii)の場合と同様にFault情報が設定されます。

注※

次に示すサービスアダプタは対象外です。

・SOAPアダプタ

・SessionBeanアダプタ

・MDB(WS-R)アダプタ

・MDB(DBキュー)アダプタ

(4) そのほかの障害要因の特定方法(サービス部品呼び出し要求の実行履歴の追跡)

サービスリクエスタへ応答した例外およびエラーメッセージから問題発生個所を切り分ける方法のほかに,サービスリクエスタ側で設定したクライアント相関IDや,ビジネスプロセスの相関セットを基に問題発生個所を特定する方法があります。サービス部品呼び出し要求の実行履歴の追跡を次の図に示します。

図7‒65 サービス部品呼び出し要求の実行履歴の追跡(SessionBeanの場合)

[図データ]

特定方法やビジネスプロセスを使用する場合の手順については,Webサービス(SOAP通信)の場合の手順と同様です。詳細については,「7.7.1 Webサービス(SOAP通信)実行時の障害対策」を参照してください。

ここでは,SessionBeanの場合にだけ該当する手順について説明します。

(a) サービスリクエスタから指定したクライアント相関IDからたどる方法

サービスリクエスタから指定したクライアント相関IDからたどる手順を次に示します。

  1. クライアント相関IDを調査します。

  2. メッセージ共通IDを取得します。

  3. ビジネスプロセスのプロセスIDを取得します。

  4. アクティビティの状態を取得します。

  5. ユーザ電文を確認します。

詳細については,「7.7.1 Webサービス(SOAP通信)実行時の障害対策」を参照してください。

性能解析トレースを使ってさらに調査し,問題が発生した個所をより細かく特定できます。また,性能解析トレースのスレッドIDをたどることで,サービス部品稼働マシンのログとの対応を次のように確認できます。

  1. メッセージ共通IDと一致する文字列を含む行を検索します。

    HCSCサーバのリクエスト受付の入口で「ASCII」列に出力されているため,そこが最初に検索されます。

  2. 検索で一致した行のスレッドIDを確認して,そのスレッドIDをたどってエラー発生個所を調査します。

    RMI-IIOP呼び出しによってスレッドIDが変化しますが,「Root AP CommonNo」列によってつながりがわかります。

  3. 「Rc(リターンコード)」列の値が0以外の個所がエラー個所です。エラー個所が見つかったらその前後の処理内容を確認して原因を調査します。

さらに調べたい場合は,J2EEサーバが出力する障害情報のログを使って,エラー発生個所のスレッドIDをたどります。

性能解析トレースの例を次に示します。

図7‒66 性能解析トレースの例

[図データ]

[図データ]

図7-66 性能解析トレースの例」の図中の番号は次の内容を示します。

(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-66 性能解析トレースの例」で示した(13)で,サービス部品のRMIを呼び出し,そのあとEJBコンテナがリクエストを受信した直後にエラーが発生していることがわかります(性能解析トレースの採取レベルは「通常」と「詳細」の2つありますが,「図7-66 性能解析トレースの例」は「通常」で採取した場合のトレースです)。

サービス部品稼働マシンがApplication Serverを使用している場合は,エラーが起きた個所のスレッドIDとサービス部品稼働マシン側の障害情報を突き合わせることで,さらに調査できます。

なお,性能解析トレースのスレッドIDは10進数ですが,J2EEサーバが出力する障害情報は16進数表現なので,個別にスレッドIDを16進数に直す必要があるため注意してください。

サービスアダプタからのサービス部品呼び出しについては,SessionBeanの呼び出しによってスレッドIDが変化しますが,Root AP CommonNo列によってつながりがわかります。性能解析トレースファイルの利用方法の詳細については,次に示すマニュアルを参照してください。

(b) ユーザ電文に指定したビジネスプロセスの相関セットからたどる方法

ユーザ電文に指定したビジネスプロセスの相関セットからたどる手順を次に示します。

  1. 相関セットを調査します。

  2. ビジネスプロセスのプロセスIDを取得します。

  3. アクティビティの状態を取得します。

詳細については,「7.7.1 Webサービス(SOAP通信)実行時の障害対策」を参照してください。