クライアント・アプリケーションからの要求の処理中に障害が発生したとき、エクスポート・バインディングは障害情報をクライアントに返すことができます。障害を処理してクライアントに返す方法を指定するようにエクスポート・バインディングを構成します。
エクスポート・バインディングの構成は WebSphere® Integration Developer を使用して行います。
要求を処理するとき、クライアントは要求でエクスポートを呼び出し、エクスポートは SCA コンポーネントを呼び出します。要求の処理中に、SCA コンポーネントは
ビジネス応答を返すか、またはサービス・ビジネス例外あるいはサービス・
ランタイム例外を throw することができます。
これが発生すると、エクスポート・バインディングは例外を障害メッセージに変換して、
クライアントに送信します。これについて以下の図で示し、その次のセクションで説明します。
図 1. 障害情報をエクスポート・バインディングを経由してコンポーネントからクライアントに送信する方法
障害を処理するカスタムのデータ・ハンドラーまたはデータ・バインディングを作成することができます。
ビジネス障害
ビジネス障害とは、処理中に発生するビジネス・エラーまたはビジネス例外です。
createCustomer 操作を持つ以下のインターフェースについて考えてみます。この操作には、 CustomerAlreadyExists および MissingCustomerId の 2 つのビジネス障害が定義されています。
この例で、クライアントが顧客を作成する要求を (この SCA コンポーネントに) 送信したときにその顧客が既に存在する場合、コンポーネントは CustomerAlreadyExists 障害をエクスポートに throw します。エクスポートはこのビジネス障害を、呼び出し側のクライアントに伝搬して返す必要があります。エクスポートはこれを行うために、エクスポート・バインディングに設定された障害データ・ハンドラーを使用します。
ビジネス障害がエクスポート・バインディングによって受信されると、以下の処理が行われます。
- バインディングは、どの障害を障害データ・ハンドラーを呼び出して処理させるかを決定します。
サービス・ビジネス例外に障害名が含まれている場合、その障害について設定されているデータ・ハンドラーが呼び出されます。サービス・ビジネス例外が障害名を含まない場合、障害名は障害タイプをマッチングすることによって導き出されます。
- バインディングは、サービス・ビジネス例外からのデータ・オブジェクトを使用して、障害データ・ハンドラーを呼び出します。
- 障害データ・ハンドラーは障害データ・オブジェクトを応答メッセージに変換し、これをエクスポート・バインディングに返します。
- エクスポートは応答メッセージをクライアントに返します。
サービス・ビジネス例外に障害名が含まれている場合、その障害について設定されているデータ・ハンドラーが呼び出されます。サービス・ビジネス例外が障害名を含まない場合、障害名は障害タイプをマッチングすることによって導き出されます。
ランタイム例外
ランタイム例外とは、要求の処理中に SCA アプリケーション内で発生する、ビジネス障害に対応しない例外のことです。ビジネス障害とは異なり、ランタイム例外はインターフェースで定義されません。
シナリオによっては、これらのランタイム例外をクライアント・アプリケーションに伝搬して、クライアント・アプリケーションが適切なアクションを実行できるようにしたい場合もあります。
例えば、クライアントが顧客を作成する要求を (SCA コンポーネントに) 送信したとき、要求の処理中に権限エラーが発生した場合、コンポーネントはランタイム例外を throw します。このランタイム例外は呼び出し側のクライアントに戻すよう伝搬させて、クライアントが権限に関して適切なアクションを実行できるようにする必要があります。これはランタイム例外データ・ハンドラーをエクスポート・バインディングに構成することによって実現できます。
注: ランタイム例外データ・ハンドラーは、HTTP バインディングでのみ構成できます。
ランタイム例外の処理は、ビジネス障害の処理と似ています。ランタイム例外データ・ハンドラーが設定されている場合、以下の処理が実行されます。
- エクスポート・バインディングはサービス・ランタイム例外について適切なデータ・ハンドラーを呼び出します。
- データ・ハンドラーは障害データ・オブジェクトを応答メッセージに変換し、これをエクスポート・バインディングに返します。
- エクスポートは応答メッセージをクライアントに返します。
障害処理およびランタイム例外処理はオプションです。障害またはランタイム例外を呼び出し側のクライアントに伝搬させたくない場合、障害データ・ハンドラーまたはランタイム例外データ・ハンドラーを構成しないでください。