アプリケーション・サーバーでの Web Services アトミック・トランザクション・サポート
アプリケーション・サーバーでの Web Services アトミック・トランザクション (WS-AT) サポートは、 Web サービス環境にトランザクションのサービスの品質を提供します。分散 Web サービス・アプリケーションおよび各アプリケーションが使用するリソースは、分散グローバル・トランザクションに参加できます。
- WS-AT はアトミック・トランザクションのプロトコルを定義する特定の調整タイプです。 仕様は次のとおりです。
- Web Services Coordination (WS-COOR) は、CoordinationContext および Registration サービスを指定して、参加プログラムである Web サービスが特定の調整タイプによって提供されるプロトコルに参加できるようにします。 仕様は次のとおりです。
- Web Services Coordination バージョン 1.0
- Web Services Coordination バージョン 1.1
- Web Services Coordination バージョン 1.2
WS-AT サポートは、トランザクションのサポートのための新規プログラミング・インターフェースを導入しないインターオペラビリティー・プロトコルのためのサポートです。グローバル・トランザクション区分は、Java™ Transaction API (JTA) UserTransaction インターフェースの標準エンタープライズ・アプリケーションの使用によって提供されます。グローバル・トランザクションで実行されているアプリケーション・コンポーネントが Web サービス要求を行うと、WS-AT CoordinationContext がターゲット Web サービスに暗黙的に伝搬されます。ただしこれは、適切なアプリケーション・デプロイメント記述子が、トランザクション・デプロイメント属性の構成に関するトピックの説明に従って設定されている場合に限ります。
アプリケーション・サーバーが、WS-AT CoordinationContext を含む Web サービス要求のためのターゲット・エンドポイントをホスティングするシステムの場合、アプリケーション・サーバーは、ターゲット Web サービス・アプリケーションを実行するトランザクション・コンテキストとなるターゲット・ランタイム環境で、自動的に従属 JTA トランザクションを確立します。
次の図は、WS-AT CoordinationContext を含む Web サービス要求のための 2 つのアプリケーション・サーバー間で共有されるトランザクション・コンテキストを示しています。

![[z/OS]](../images/ngzos.gif)
WS-AtomicTransaction プロトコルのポリシーを構成できます。WS-AT コンテキストを、クライアントが伝搬するかどうか、およびサーバーが受信するかどうかを構成できます。 アウトバウンド・サービス要求の作成時に、クライアントが常に WS-AtomicTransaction コンテキストを送信するようにするには、ポリシー・セットとクライアントを関連付ける必要があります。このポリシー・セットには WS-Transaction ポリシー・タイプが組み込まれている必要があり、このポリシー・タイプは WS-AtomicTransaction 設定「Mandatory」を保持していなければなりません。 WS-AtomicTransaction ATAssertion ポリシー・タイプ属性を含むリモート・エンドポイントをクライアントが常に呼び出すことが分かっている場合は、プロバイダーの WS-Policy 構成を適用するようにクライアントを構成して、クライアントがプロバイダーの必須ポリシーを自動的に選択するようにできます。
Web サービス・プロバイダーが受け取る要求に WS-AtomicTransaction コンテキストが確実に含まれるようにするには、プロバイダーにポリシー・セットを関連付ける必要があります。ポリシー・セットには WS-Transaction ポリシー・タイプが含まれている必要があり、このポリシー・タイプは WS-AtomicTransaction が「必須」に設定されている必要があります。
クライアントまたはプロバイダーが WS-AtomicTransaction コンテキストを使用しないようにするには、ポリシー・セットとクライアントまたはプロバイダーを関連付ける必要があります。このポリシー・セットには WS-Transaction ポリシー・タイプが組み込まれている必要があり、このポリシー・タイプは WS-AtomicTransaction 設定「Never」を保持していなければなりません。 この構成は、Web サービス要求でクライアントとプロバイダーの間に密結合が作成されないようにする環境の場合、例えばエンタープライズ間での要求が存在する場合などに使用できます。
クライアントまたはプロバイダーに関連付けられたポリシー・セットが存在しない場合、あるいは WS-Transaction ポリシー・タイプがポリシー・セットに含まれていない場合、デフォルトの WS-Transaction 動作が使用されます。
WS-AT サポートに関する制約事項
このバージョンのアプリケーション・サーバーでは、リカバリー不能なクライアント・プロセスから WS-AT コンテキストを開始することはできません。
サーバー・クラスターに送信される、
同じ WS-AT トランザクションの作業要求が、毎回同じクラスター・メンバーに割り当てられるとは限りません。その場合は、
トランザクションに対する作業は複数のクラスター・メンバーによって処理されます。
複数のクラスター・メンバーのトランザクション作業が同じトランザクション・リソースに集中すると、デッドロック状態が発生する場合があります。
アプリケーション設計
WS-AT は 2 フェーズ・コミット・トランザクション・プロトコルで、短期間トランザクションにのみ適しています。
アトミック・トランザクションは、リソース上でトランザクション・ロックを保持することで、 トランザクションの更新を分離するリソース・マネージャーを調整します。したがって、WS-AT トランザクションをエンタープライズ・ドメイン間に分散させることは、通常お勧めしません。 エンタープライズ間トランザクションで通常必要なセマンティックは、2 フェーズ・コミットの場合ほど厳密ではありません。そのようなシナリオでは、補正ビジネス・トランザクションを、例えば Business Process Execution Language (BPEL) プロセスの一部として使用したほうが適切な場合や、Web Services ビジネス・アクティビティー (WS-BA) を使用したほうが適切な場合があります。
WS-AT は単一エンタープライズ内にデプロイされた Web サービスにわたりトランザクション・コンテキストを配布するために最適です。トランザクションのオリジネーター (アプリケーションまたはコンテナー) は、トランザクションの完了を要求する前にそのトランザクションで実行されているすべてのビジネス・タスクが完了したことを確認する必要があるため、要求/応答メッセージ交換パターンのみがトランザクション・コンテキストを伝送します。片方向要求によって呼び出された Web サービスは、要求クライアントのトランザクションで実行されません。
WS-AT トランザクションでのサービス障害がもたらす影響は、EJB 仕様に記載されているように、トランザクションでの Enterprise JavaBeans (EJB) アプリケーション例外がもたらす影響に似ています。 要求側の WS-AT トランザクションで実行されているサービスが障害を戻した場合、アプリケーション・サーバーが、そのトランザクションにロールバック専用のマークを自動的に付けることはありません。 要求側の例外ハンドラーが、トランザクションを進行させるかどうかを選択し、そのトランザクションにロールバック専用のマークを付けるかどうかを選択します。要求元がアプリケーション・サーバーで実行されている場合は、JTA または EJB の標準 API を使用して、トランザクションにロールバック専用のマークを付けることができます。 障害を生成したサービス・コンポーネントが、障害を返す前に、自身でトランザクションにロールバック専用のマークを付ける場合もあります。 サービス・コンポーネントの実装でシステム例外が発生した場合、通常はそのコンテナーでの例外処理が許可されます。 サービス実装で生成されたシステム例外の処理時に、アプリケーション・サーバーのコンテナーは、受け取ったトランザクション・コンテキストすべてに、ロールバック専用のマークを自動的に付けます。
アプリケーション開発
WS-AT を活用するために Web サービス・アプリケーションに特別に必要な開発作業はありません。
JAX-RPC アプリケーションでは、トランザクション・デプロイメント属性の構成に関するトピックで説明されているように、適切に設定する必要があるアプリケーション・デプロイメント記述子がいくつかあります。 JAX-RPC ランタイムは WS-AT 1.0 をサポートします。
JAX-WS アプリケーションでは、ポリシー・セットの作成、ポリシー・セットへの WS-Transaction ポリシー・タイプの追加、ポリシー・タイプの構成 (オプション)、および WS-AT 通信に関係するアプリケーションまたはクライアントへのポリシー・セットの追加を行うことで、WS-AT サポートが可能になります。 JAX-WS ランタイムは、WS-AT 1.0、WS-AT 1.1、WS-AT 1.2、および WS-AT 用の 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-AT 1.0 が使用されます。両方の仕様レベルを適用可能な場合、または使用可能な WS-Transaction WS-Policy アサーションが存在しない場合、トランザクションのサービス設定で指定されているデフォルトの WS-Transaction 仕様レベルが使用されます。
- クライアントでプロバイダーのポリシーが考慮されない場合、クライアントは WS-AT または Web Services ビジネス・アクティビティー (WS-BA) コンテキストを送信しません。 この動作は、WS-Transaction ポリシー設定「Never」と同じです。
- クライアントでプロバイダーのポリシーが考慮される場合、プロバイダーのポリシーに WS-AT または WS-BA アサーションが含まれていれば、クライアントは WS-AT または WS-BA コンテキストを送信します。 この動作は、WS-Transaction ポリシー設定「Supports」と同じです。
- サーバーの場合、サーバーは WS-AT または WS-BA コンテキストを受信しません。 この動作は、WS-Transaction ポリシー構成設定「Never」と同じです。
アプリケーション開発者が明示的に WS-AT 参加者を登録する必要はありません。 アプリケーション・サーバー・ランタイムは、WS-AT トランザクションの統合先となる JTA トランザクションでの XAResources の登録と同じように、WS-AT 参加プログラムの登録を担当します。 トランザクション完了時に、すべての XAResources および WS-AT 参加プログラムは、アプリケーション・サーバー・トランザクション・サービスによってアトミックに調整されます。
JTA トランザクションがスレッドでアクティブな場合、Web サービス・アプリケーション要求が行われると、トランザクションは Web サービス要求を介して伝搬され、ターゲット環境で確立されます。このプロセスは、EJB 仕様に記載されているように、IIOP 経由のトランザクション・コンテキストの分散と類似しています。 ターゲット環境で実行されるトランザクション作業はすべて、同じグロー バル・トランザクションの一部となります。
WS-Transaction ポリシー・アサーション
プロバイダーの WS-Transaction プロトコル用のポリシーを構成すると、この構成は、ポリシー・タイプが関連付けられている Web サービス用に WSDL を生成された WSDL 内に含まれているアサーションに影響します。WS-AtomicTransaction を使用するクライアントまたはプロバイダーのトランザクション要件の記述に使用する WS-Policy アサーションは、ATAssertion です。 WS-Transaction ポリシー・タイプが WS-AtomicTransaction 設定「Mandatory」または「Supports」である場合、ポリシー・アサーションは WSDL に組み込まれます。
アプリケーション・サーバーは、解析対象の WSDL に含まれるこのようなアサーションを解析、解釈、および適用することもできます。
以下は、WSDL の例を示しています。この WSDL では、要求メッセージに含まれる WS-AT コンテキストを使用してエンドポイントを呼び出す必要があり、コンテキストには WS-Transaction 1.0 または 1.1 フォーマットを使用できることを WS-AtomicTransaction ATAssertion が示しています。 2 つの名前空間と 2 つのアサーションがあり (各 WS-Transaction 仕様レベルにつき 1 つずつ)、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/wsat/2006/06"
xmlns:wsat10="http://schemas.xmlsoap.org/ws/2004/10/wsat"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsp:Policy wsu:Id="ATPolicy">
<wsp:ExactlyOne>
<wsat11:ATAssertion />
<wsat10:ATAssertion />
<!-- omitted assertions -->
</wsp:ExactlyOne />
</wsp:Policy>
<!-- omitted elements -->
<wsdl:binding name="BankBinding" type="tns:BankPortType">
<!-- omitted elements -->
<wsdl:operation name="TransferFunds">
<wsp:PolicyReference URI="#ATPolicy" wsdl:required="true"/>
<!-- omitted elements -->
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>