アプリケーション・サーバーでの Web Services ビジネス・アクティビティー・サポート
アプリケーション・サーバーにおける Web Services ビジネス・アクティビティー (WS-BA) サポートにより、異なるシステム上の Web サービスが、アトミック・トランザクションよりも疎結合されているアクティビティーを調整することができます。 このようなアクティビティーでは、アトミックにロールバックすることが困難または不可能であるため、 エラー発生時に補正処理が必要となります。
- WS-BA はビジネス・アクティビティーのプロトコルを定義する特定の調整タイプです。 仕様は次のとおりです。
- Web Services Coordination (WS-COOR) は、CoordinationContext および Registration サービスを指定して、参加プログラムである Web サービスが特定の調整タイプによって提供されるプロトコルに参加できるようにします。 仕様は次のとおりです。
- Web Services Coordination バージョン 1.0
- Web Services Coordination バージョン 1.1
- Web Services Coordination バージョン 1.2
WS-BA のインターオペラビリティー・プロトコルをサポートするほかに、アプリケーション・サーバーは、ビジネス・アクティビティーと補正ハンドラーを作成するためのプログラミング・インターフェースを提供します。 このプログラミング・インターフェースを使用して、 補正データを指定し、 ビジネス・アクティビティーの状況をチェックしたり、 変更したりすることができます。
この補正機能は、Web サービス以外のアプリケーションで使用することもできます。 ただし、この補正機能を使用できるのは、これらのアプリケーションが関係するのが、WebSphere® Application Server 間で行われる通信のみである場合です。 詳しくは、関連トピックを参照してください。
WS-BusinessActivity プロトコルのポリシーを構成できます。WS-BA コンテキストを、クライアントが伝搬するかどうか、およびサーバーが受信するかどうかを構成できます。 アウトバウンド・サービス要求の作成時に、クライアントが常に WS-BusinessActivity コンテキストを送信するようにするには、ポリシー・セットとクライアントを関連付ける必要があります。このポリシー・セットには WS-Transaction ポリシー・タイプが組み込まれている必要があり、このポリシー・タイプは WS-BusinessActivity 設定「Mandatory」を保持していなければなりません。 WS-BusinessActivity BAAtomicOutcomeAssertion ポリシー・タイプ属性を含むリモート・エンドポイントをクライアントが常に呼び出すことが分かっている場合は、プロバイダーの WS-Policy 構成を適用するようにクライアントを構成して、クライアントがプロバイダーの必須ポリシーを自動的に選択するようにできます。
Web サービス・プロバイダーが受信する要求に WS-BusinessActivity コンテキストが含まれるようにするには、ポリシー・セットとプロバイダーを関連付ける必要があります。 このポリシー・セットには WS-Transaction ポリシー・タイプが組み込まれている必要があり、このポリシー・タイプは WS-BusinessActivity 設定「Mandatory」を保持していなければなりません。
クライアントまたはプロバイダーが WS-BusinessActivity コンテキストを使用しないようにするには、ポリシー・セットとクライアントまたはプロバイダーを関連付ける必要があります。このポリシー・セットには WS-Transaction ポリシー・タイプが組み込まれている必要があり、このポリシー・タイプは WS-BusinessActivity 設定「Never」を保持していなければなりません。 この構成は、Web サービス要求でクライアントとプロバイダーの間に密結合が作成されないようにする環境の場合、例えばエンタープライズ間での要求が存在する場合などに使用できます。
クライアントまたはプロバイダーに関連付けられたポリシー・セットが存在しない場合、あるいは WS-Transaction ポリシー・タイプがポリシー・セットに含まれていない場合、デフォルトの WS-Transaction 動作が使用されます。
アプリケーション開発
WS-BA を活用するために、Web サービス・アプリケーションに必要な特定の開発タスクはありません。
JAX-RPC アプリケーションでは、BusinessActivity 有効範囲で稼働するように構成されている Enterprise JavaBeans (EJB) コンポーネントは、アウトバウンド JAX-RPC Web サービス要求を行う場合にその有効範囲を自動的に伝搬します。 JAX-RPC ランタイムは WS-BA 1.0 をサポートします。
JAX-WS アプリケーションでは、ポリシー・セットの作成、ポリシー・セットへの WS-Transaction ポリシー・タイプの追加、ポリシー・タイプの構成 (オプション)、および WS-BA 通信に関係するアプリケーションまたはクライアントへのポリシー・セットの追加を行うことで、WS-BA サポートが可能になります。 JAX-WS ランタイムでは、WS-BA 1.0、WS-BA 1.1、WS-BA 1.2、および WS-BA 向け WS-Policy アサーションがサポートされます。
JAX-WS ランタイムがインバウンド要求を受信した場合は、WS-Transaction 1.0、WS-Transaction 1.1、および WS-Transaction 1.2 仕様レベルがサポートされます。 アウトバウンド JAX-WS 要求が送信される場合、1 つの仕様レベルのみを使用できます。 WS-Transaction WS-Policy アサーションを使用可能な場合、ターゲット Web サービスの Web サービス記述言語 (WSDL) またはクライアントの WS-Transaction ポリシー・タイプのいずれかから、クライアントおよびターゲット Web サービスに適用可能な仕様レベルが使用されます。 例えば、ターゲット Web サービスのホスティング環境が WS-Transaction 1.0 のみをサポートする場合、WS-BA 1.0 が使用されます。両方の仕様レベルを適用可能な場合、または使用可能な WS-Transaction WS-Policy アサーションが存在しない場合、トランザクションのサービス設定で指定されているデフォルトの WS-Transaction 仕様レベルが使用されます。
- クライアントでプロバイダーのポリシーが考慮されない場合、クライアントは Web Service アトミック・トランザクション (WS-AT) または WS-BA コンテキストを送信しません。 この動作は、WS-Transaction ポリシー構成設定「Never」と同じです。
- クライアントでプロバイダーのポリシーが考慮される場合、プロバイダーのポリシーに WS-AT または WS-BA アサーションが含まれていれば、クライアントは WS-AT または WS-BA コンテキストを送信します。 この動作は、WS-Transaction ポリシー構成設定「Supports」と同じです。
- サーバーは WS-AT または WS-BA コンテキストを受信しません。 この動作は、WS-Transaction ポリシー構成設定「Never」と同じです。
WS-Transaction ポリシー・アサーション
プロバイダーについて WS-BusinessActivity プロトコルのポリシーを構成する場合、これは、ポリシー・タイプが関連付けられた Web サービス用に生成される WSDL に含まれるアサーションに影響します。 WS-BusinessActivity を使用するクライアントまたはプロバイダーの補正要件の記述に使用する WS-Policy アサーションは、BAAtomicOutcomeAssertion です。 WS-Transaction ポリシー・タイプが WS-BusinessActivity 設定「Mandatory」または「Supports」である場合、ポリシー・アサーションは WSDL に組み込まれます。
アプリケーション・サーバーは、解析対象の WSDL に含まれるこのようなアサーションを解析、解釈、および適用することもできます。
以下は、WSDL の例を示しています。 この WSDL では、要求メッセージに含まれる WS-BA コンテキストを使用してエンドポイントを呼び出す必要があり、コンテキストには WS-Transaction 1.0 または 1.1 フォーマットを使用できることを WS-BusinessActivity BAAtomicOutcomeAssertion が示しています。 2 つの名前空間と 2 つのアサーションがあります。それぞれ、各 WS-Transaction 仕様レベル用であり、WS-Policy ExactlyOne 演算子を使用して、使用する仕様レベルをクライアントが選択する必要があることを示しています。
<wsdl:definitions targetNamespace="bank.example.com"
xmlns:tns="bank.example.com"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsat11="http://docs.oasis-open.org/ws-tx/wsba/2006/06"
xmlns:wsat10="http://schemas.xmlsoap.org/ws/2004/10/wsba"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:Policy wsu:Id="BAPolicy">
<wsp:ExactlyOne>
<wsat11:BAAtomicOutcomeAssertion />
<wsat10:BAAtomicOutcomeAssertion />
<!-- omitted assertions -->
</wsp:ExactlyOne />
</wsp:Policy>
<!-- omitted elements -->
<wsdl:binding name="BankBinding" type="tns:BankPortType">
<!-- omitted elements -->
<wsdl:operation name="TransferFunds">
<wsp:PolicyReference URI="#BAPolicy" wsdl:required="true"/>
<!-- omitted elements -->
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>