このトピックは IBM Business Automation Workflow Advanced 構成にのみ適用されます。

エラー処理の一般的な使用パターン

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

同期呼び出し

アクティビティーの単位がトランザクションで、トランザクション内ではリソースに対する複数の更新をすべて永続的なものとするか、または永続的なものにしないように互いに依存させることができます。 トランザクションの修飾子を使用して、サービス呼び出しに関するトランザクションの動作を制御できます。
注: このセクションでは、すべてのコンポーネントがグローバル・トランザクションで実行されるように設定されていることを前提としています。
サービス・コンポーネントが同期的に呼び出され、同期呼び出しを実行すると、サービス・リクエスターとサービス・プロバイダーはどちらも同じ実行スレッドで実行されます。 呼び出し側コンポーネントは、プロバイダーから応答を受け取るまでブロックされます。
図 1. 同期呼び出しのエラー処理

キューを持たない同期呼び出しフロー。

図 1 に示すように、同期フローにキューはありません。 フロー内のいずれかのポイントで未処理エラーが発生すると、アクティブなトランザクションはすべてロールバックされ、モデル化されていないフォールトがサービス・リクエスターに返されます。

非同期呼び出し

サービス・コンポーネントが非同期的に呼び出されると、サービス・リクエスターとサービス・プロバイダーは別の実行スレッドで実行されます。 SCA ランタイムは、リクエスターに即座に制御を返します。

図 2. 非同期呼び出しのエラー処理

非同期呼び出しのエラー処理 (4 つのキューとトランザクション境界を含む)

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

図3: キュー 2 を使用しない非同期呼び出しのエラー処理

3 つのキューとトランザクション境界を持つ非同期呼び出しエラー処理
デフォルトでは、パフォーマンスを向上させるために、最初の非同期呼び出しを実行するとき、キュー 2 はフローから省略されます。 図 3に示すように、1 つの実行スレッドがキュー 1 から開始されます。 メディエーション・フロー・コンポーネントで例外が発生した場合、メッセージはトランザクション境界 A 内にあるため、キュー 1 に送り返されます。 図 4に示すように、メッセージはエクスポートに再配信され、前に省略されたキュー 2 が再導入されます。 後続の再試行には、キュー 2 が含まれます。 このパフォーマンス最適化は自動的に行われます。 特に、JMS、MQ、および非同期 SCA バインディングのすべてに、この最適化動作が備わっています。
図4: 非同期呼び出しのエラー処理

4 つすべてのキューでの非同期呼び出しのエラー処理

デフォルトでは、メッセージが内部のモジュール宛先にロールバックされると、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 の前でエラーが発生した場合、エラーはサービス・リクエスターに送り返されます。

図 5. 同期および非同期呼び出しのエラー処理

キュー 3 と 4、およびトランザクション境界 C と D のみを使用した非同期呼び出しによる同期エラー処理。

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

図 6. 非同期および同期呼び出しのエラー処理

キュー 1 と 2、およびトランザクション境界 C と D のみを使用した非同期 over sync 呼び出しのエラー処理。