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

デフォルトでは、WS-AT フィーチャーを有効にして Liberty のクライアント・サイドでトランザクションを開始した場合、 クライアント・トランザクションに含まれる Web サービス操作はすべて、グローバル・トランザクションに追加されます。 一方、現行グローバル・トランザクションの有効範囲外でコードを実行する場合であれば、 タイプ UOWSynchronizationRegistry.UOW_TYPE_LOCAL_TRANSACTION で UOWManager を使用します。 これは、そのコード・スニペットを含むグローバル・トランザクションの中断および再開に影響します。
WS-AT フィーチャーが有効か | トランザクションが存在するか | WSDL にポリシー・アサーションが存在するか | WS-AT グローバル・トランザクションが有効か |
---|---|---|---|
No | No | No | No |
No | No | はい | いいえ。Liberty が例外をスロー |
No | はい | No | No |
No | はい | はい | いいえ。Liberty が例外をスロー |
はい | No | No | No |
はい | No | はい (wsp: Optional="false") | いいえ。Liberty が例外をスロー |
はい (wsp: Optional="true") | No | ||
はい | はい | No | はい |
はい | はい | はい | はい |
WS-AT フィーチャーが有効か | SOAP ヘッダーに調整コンテキストが存在するか | WSDL にポリシー・アサーションが存在するか | WS-AT グローバル・トランザクションが有効か |
---|---|---|---|
No | No | No | No |
No | No | はい | No |
No | はい | No | いいえ。Liberty が例外をスロー |
No | はい | はい | いいえ。Liberty が例外をスロー |
はい | No | No | No |
はい | No | はい (wsp: Optional="false") | いいえ。Liberty が例外をスロー |
はい (wsp: Optional="true") | No | ||
はい | はい | No | はい |
はい | はい | はい | はい |
アプリケーション設計
WS-AT は 2 フェーズ・コミット・トランザクション・プロトコルで、短期間トランザクションにのみ適しています。
WS-AT は単一エンタープライズ内にデプロイされた Web サービスにわたりトランザクション・コンテキストを配布するために最適です。トランザクションのオリジネーター (アプリケーションまたはコンテナー) は、トランザクションの完了を要求する前にそのトランザクションで実行されているすべてのビジネス・タスクが完了したことを確認する必要があるため、要求/応答メッセージ交換パターンのみがトランザクション・コンテキストを伝送します。片方向要求によって呼び出された Web サービスは、要求クライアントのトランザクションで実行されません。
WS-AT トランザクションでのサービス障害がもたらす影響は、EJB 仕様に記載されているように、トランザクションでの Enterprise JavaBeans (EJB) アプリケーション例外がもたらす影響に似ています。 要求側の WS-AT トランザクションで実行されているサービスが障害を戻した場合、アプリケーション・サーバーが、そのトランザクションにロールバック専用のマークを自動的に付けることはありません。 要求側の例外ハンドラーが、トランザクションを進行させるかどうかを選択し、そのトランザクションにロールバック専用のマークを付けるかどうかを選択します。要求元がアプリケーション・サーバーで実行されている場合は、JTA または EJB の標準 API を使用して、トランザクションにロールバック専用のマークを付けることができます。 障害を生成したサービス・コンポーネントが、障害を返す前に、自身でトランザクションにロールバック専用のマークを付ける場合もあります。 サービス・コンポーネントの実装でシステム例外が発生した場合、通常はそのコンテナーでの例外処理が許可されます。 サービス実装で生成されたシステム例外の処理時に、アプリケーション・サーバーのコンテナーは、受け取ったトランザクション・コンテキストすべてに、ロールバック専用のマークを自動的に付けます。