サービス・ランタイム例外は、未宣言の例外です。一般にこの例外は、アプリケーションによって予期されていないエラー状態を表します。
サービス・ランタイム例外を使用して、実行時の予期せぬ状態を知らせます。
コンポーネント開発者は、次の方法でサービス・ランタイム例外を処理できます。
例えば、あるパートナーが要求を処理できなくても、別のパートナーでは処理できることもあります。
例えば、パートナーがタイムアウトになると、ビジネス例外が生成される可能性があります。その例外では、ほとんどの要求が処理されたものの、完了していない 1 つの要求が残されており、その要求を後で再試行するか、異なるパラメーターを指定して試行すべきことが示されます。
例外が catch されない場合、例外は現行コンポーネントを呼び出したコンポーネントに渡されます。 この呼び出しチェーンは、チェーンの最初の呼び出し元に戻るまで続きます。 例えば、Module A が Module B を呼び出し、Module B が Module C を呼び出して、Module C が例外を throw すると、Module B は例外を catch する場合も、またはしない場合もあります。Module B が例外を catch しない場合、例外は Module A まで戻されます。
コンポーネントから ServiceRuntimeException が throw されると、現在のトランザクションがロールバックされます。このタイプの例外処理は、チェーン内のすべてのコンポーネントに対して繰り返されます。例えば、Module C から ServiceRuntimeException が throw された場合は、そのトランザクションに、ロールバック対象としてのマークが付けられます。次にその例外は Module B に throw され、Module B で例外が catch されず、別のトランザクションが存在する場合は、そのトランザクションもロールバックされます。コンポーネント開発者は、呼び出しが現行トランザクションと新規トランザクションのどちらで行われるかを制御するサービス品質 (QoS) 修飾子を使用できます。例えば、Module A が Module B を呼び出し、Module B が新しいトランザクションの一部である場合、Module A は Module B からの ServiceRuntimeException を "catch" することで、Module A のトランザクションをロールバックすることなく、処理を続行できます。
ロールバック・トランザクションの内容は、トランザクションの性質によって異なることに注意してください。 例えば、長期実行の BPEL プロセスが、多数の小規模なトランザクションにセグメント化される場合があります。非同期要求および応答の呼び出しは、自動的にトランザクションから取り出されます (そうしないと、呼び出し側のアプリケーションが長時間にわたって応答を待たなければならなくなります)。
1 つのトランザクションが、(1 つの大きなトランザクションとして扱われるのではなく) 複数の非同期呼び出しに分割される場合、トランザクションの最初の作業は ServiceRuntimeException の発生時にロールバックします。ただし、非同期呼び出しの応答が別のトランザクションから送信された場合、その非同期呼び出しの応答の行き先がなくなるため、Failed Event Manager (FEM) でイベントが作成されます。
以下に、ServiceRuntimeException の現行サブクラス 4 つを示します。
この例外を使用して、非同期 SCA メッセージの有効期限が切れたことを示します。 有効期限は、サービス参照で RequestExpiration 修飾子を使用して設定できます。
この例外を使用して、非同期要求への応答を構成された期間内に受信しなかったことを示します。有効期限は、サービス参照で ResponseExpiration 修飾子を使用して設定できます。
この例外を使用して、インポートを介して外部サービスを呼び出し中に throw された例外が存在することを示します。
この例外を使用して、コンポーネントでのサービス参照が正しくワイヤーされていないことを示します。