コンポーネントはインポートを使用して、要求をモジュール外部のサービスに送信します。 要求の処理中に障害が発生すると、サービスはインポート・バインディングに障害を返します。障害を処理してコンポーネントに返す方法は、インポート・バインディングを構成して指定することができます。
インポート・バインディングの構成は WebSphere Integration Developer を使用して行います。
障害データ・ハンドラー (または障害データ・バインディング) を指定できますが、障害セレクターを指定することもできます。
障害データ・ハンドラー
要求を処理するサービスがインポート・バインディングに障害情報を送信するときには、例外の形式または障害データが含まれる応答メッセージが使用されます。
インポート・バインディングはサービス例外または応答メッセージをサービス・ビジネス例外またはサービス・ランタイム例外に変換します。これについて以下の図で示し、その次のセクションで説明します。
図 1. 障害情報をインポートを経由してサービスからコンポーネントに送信する方法
障害を処理するカスタムのデータ・ハンドラーまたはデータ・バインディングを作成することができます。
障害セレクター
インポート・バインディングを構成するとき、障害セレクターを指定することができます。障害セレクターは、インポートの応答が実際の応答か、ビジネス例外か、またはランタイム障害であるかを判別します。またこれは、応答の本体またはヘッダーからネイティブの障害名を判別します。ネイティブの障害名は、バインディング構成によって、関連するインターフェースの障害名にマップされます。
JMS、MQ JMS、
汎用 JMS、WebSphere MQ、および HTTP インポートでは、プリパッケージされた 2 つのタイプの障害セレクターを使用できます。
表 1. プリパッケージされている障害セレクター障害セレクター・タイプ |
説明 |
ヘッダー・ベース |
着信応答メッセージのヘッダーに基づいて、応答メッセージがビジネス障害、ランタイム例外、または通常のメッセージのいずれであるかを判別します。 |
SOAP |
応答 SOAP メッセージが通常応答、ビジネス障害、またはランタイム例外のいずれであるかを判別します。 |
以下は、ヘッダー・ベースの障害セレクターおよび SOAP 障害セレクターの例です。
- ヘッダー・ベースの障害セレクター
アプリケーションで、着信メッセージがビジネス障害であることを示す場合、着信メッセージにはビジネス障害に対応する以下の 2 つのヘッダーが含まれます。
Header name = FaultType, Header value = Business
Header name = FaultName, Header value = <user defined native fault name>
アプリケーションで、着信応答メッセージがランタイム例外であることを示す場合、着信メッセージには以下に示す 1 つのヘッダーが含まれます。
Header name = FaultType, Header value = Runtime
- SOAP 障害セレクター
ビジネス障害は、SOAP メッセージの一部として送信できます。それには、SOAP メッセージに以下のカスタム SOAP ヘッダーを設定します。
この場合の障害名は、「CustomerAlreadyExists」です。
<ibmSoap:BusinessFaultName
xmlns:ibmSoap="http://www.ibm.com/soap">CustomerAlreadyExists
<ibmSoap:BusinessFaultName>
障害セレクターはオプションです。障害セレクターを指定しないと、インポート・バインディングは応答のタイプを判別できません。そのため、バインディングは応答をビジネス応答として扱い、応答データ・ハンドラーまたはデータ・バインディングを呼び出します。
カスタム障害セレクターを作成することができます。
カスタム障害セレクターを作成するステップは、WebSphere Integration Developer インフォメーション・センターのトピック『カスタム障害セレクターの開発』にあります。
ビジネス障害
要求の処理にエラーがあると、ビジネス障害が発生することがあります。例えば、顧客を作成する要求を送信したときにその顧客が既に存在する場合、サービスはインポート・バインディングにビジネス例外を送信します。
ビジネス例外がバインディングによって受信された場合、処理ステップは障害セレクターがバインディングにセットアップされているかどうかに依存します。
- 障害セレクターが設定されていない場合、バインディングは応答データ・ハンドラーまたは応答データ・バインディングを呼び出します。
- 障害セレクターが設定されている場合、以下の処理が実行されます。
- インポート・バインディングは障害セレクターを呼び出して、応答がビジネス障害、ビジネス応答、またはランタイム障害のいずれであるかを判別します。
- 応答がビジネス障害である場合、インポート・バインディングは、ネイティブ障害名を提供するために障害セレクターを呼び出します。
- インポート・バインディングは、障害セレクターによって返されたネイティブ障害名に対応する WSDL 障害を判別します。
- インポート・バインディングは、この WSDL 障害用に構成された障害データ・ハンドラーを判別します。
- インポート・バインディングは障害データについて、この障害データ・ハンドラーを呼び出します。
- 障害データ・ハンドラーは障害データをデータ・オブジェクトに変換し、これをインポート・バインディングに返します。
- インポート・バインディングはデータ・オブジェクトおよび障害名を使用して、サービス・ビジネス例外オブジェクトを構成します。
- インポートはサービス・ビジネス例外オブジェクトをコンポーネントに返します。
ランタイム例外
ランタイム例外は、サービスとの通信に問題があるときに発生することがあります。ランタイム
例外の処理は、ビジネス例外の処理と似ています。障害セレクターが設定されている場合、以下の処理が実行されます。
- インポート・バインディングは例外データについて適切なランタイム例外データ・ハンドラーを呼び出します。
- ランタイム例外データ・ハンドラーは例外データをサービス・ランタイム例外オブジェクトに変換し、これをインポート・バインディングに返します。
- インポートはサービス・ランタイム例外オブジェクトをコンポーネントに返します。