
エラー処理の一般的な使用パターン
サービス・コンポーネントが同期的または非同期的に呼び出されるとき、予期しないランタイム・エラーが発生する可能性があります。 SCA では、メッセージが失われないようにするためのエラー処理が用意されています。 このトピックでは、エラーが発生したときに SCA ランタイムによってメッセージを処理する方法について説明します。 同期および非同期の両方の呼び出しスタイルについての説明があります。
同期呼び出し

図 1 に示すように、同期フローにキューはありません。 フロー内のいずれかのポイントで未処理エラーが発生すると、アクティブなトランザクションはすべてロールバックされ、モデル化されていないフォールトがサービス・リクエスターに返されます。
非同期呼び出し
サービス・コンポーネントが非同期的に呼び出されると、サービス・リクエスターとサービス・プロバイダーは別の実行スレッドで実行されます。 SCA ランタイムは、リクエスターに即座に制御を返します。

図 2 は、非同期フロー内でエラーを処理する方法を示しています。 フローはトランザクション境界 (A、B、C、D) に分割され、それぞれの新しい境界は新しいキュー (1、2、3、4) によってマークが付けられています。 あるトランザクション境界内でエラーが発生すると、メッセージはそのトランザクションの先頭のキューにロールバックされます。 例えば、メディエーション・フロー・コンポーネント内でエラーが発生すると、メッセージはトランザクション境界 B の内部にあるため、キュー番号 2 にロールバックされます。


デフォルトでは、メッセージが内部のモジュール宛先にロールバックされると、SCA 再試行ロジックによって、メッセージが最大 5 回まで再送達されることが指示されます。 メッセージが再び失敗すると、メッセージは定義された例外宛先に自動的に転送されます。 これは、管理コンソールの Service Integration Bus Explorer を介して表示できます。 Failed Event Manager が使用可能な場合、例外宛先にあるメッセージは除去され、失敗したイベントとしてデータベースに保管されます。 各モジュールには独自の内部例外キューがあります。 再試行されるバインディングは、バインディングにおいて、またはメッセージング・プロバイダー上で構成することができます。 バインディングの再試行が少なくとも 1 回は発生するので、Failed Event Manager はどのようなフォールトでも認識できます。
Failed Event Manager は、呼び出しの失敗を処理および再サブミットする ための Web ベースのクライアントです。 これはインテグレーション・アプリケーションであり、 管理コンソールで使用できます。 このアプリケーションによって、失敗イベントの数が表示され、多数の検索機能が 提供されます。 再試行カウントを超えたメッセージは、Failed Event Manager によって自動的に取得されます。 非同期のエクスポート・バインディングおよびインポート・バインディングは、失敗したメッセージが再試行カウントを超える前にそれらのメッセージを Failed Event Manager に送信するように構成できます。
呼び出しスタイルの混合
サービス・リクエスターがサービス・プロバイダーを呼び出すとき、呼び出しは同期または非同期のいずれかで行うことができます。 サービス・リクエスターは同期呼び出しを行うが、サービス・プロバイダーはメディエーション・フロー・コンポーネントから非同期的に呼び出さなければならない場合があります。 この場合、キュー 1 と 2、および境界 A と B は存在せず、フローは 図 5のようになります。 この状況で境界 C の前でエラーが発生した場合、エラーはサービス・リクエスターに送り返されます。

サービス・リクエスターは非同期呼び出しを行い、サービス・プロバイダーは同期サービスである場合、メディエーション・フロー・コンポーネントはインポートを同期的に呼び出します。 この場合、キュー 3 と 4、および境界 C と D は 図 6には存在しません。 この状況で境界 B の後にエラーが発生した場合、エラーはサービス・プロバイダーに送り返されます。
