18.2.2. WS-Transaction Architecture

WS-Transactionは、ビジネスロジックを実行する役割を果たすトランザクション対応のWeb サービスとトランザクションでパーティシパントとしての役割を果たすWebサービスを区別し、トランザクションコーディネータと通信しレスポンスを返します。図18.4「WS-Transaction グローバルビュー」にあるように、パーティシパントが基盤のWS-Transaction プロトコルに対応している間に、トランザクション対応のWeb サービスは、ビジネスレベルのプロトコルを使いアプリケーションクライアントを処理します。
WS-Transaction グローバルビュー

図18.4 WS-Transaction グローバルビュー

トランザクション対応のWeb サービスは、ビジネスロジックあるいはトランザクションの範囲内で実行する必要のある作業をカプセル化します。トランザクションもコミットしない限り、アプリケーションによりこの作業を確定することはできません。そのため、アプリケーションによる制御は最終的に削除され、トランザクションが制御するようになっています。
パーティシパントは、トランザクションコーディネータの指示のもと、トランザクション対応のWeb サービスが実行した作業結果を制御するエンティティです。図18.4「WS-Transaction グローバルビュー」では、Web サービスはそれぞれ関連するパーティシパント1つと併せて示されており、このパーティシパントはWeb サービスの代わりにトランザクションプロトコルのメッセージを管理します。しかし、図18.5「WS-Transaction Web Services およびパーティシパント」ではWeb サービス1つのクローズアップビュー、および関連づいたパーティシパントと併せてクライアントアプリケーションを表示します。
WS-Transaction Web Services およびパーティシパント

図18.5 WS-Transaction Web Services およびパーティシパント

トランザクション対応のWeb サービスはJDBCドライバ経由でアクセスされるバックエンドのデータベースを採用しており、処理を行うために、データベースにSQLステートメントを送信します。しかし、これらのステートメントは、Web サービスのトランザクションがコミットする場合にのみコミットすべきです。これを機能させるには、Webサービスはトランザクションのブリッジングを採用する必要があります。トランザクションブリッジングは、パーティシパントをこのWeb サービストランザクションのコーディネータに登録し、一致するXAトランザクションを作成し、このトランザクションにてドライバを呼出し一時的な変更をデータベースに加えることができます。Web サービスは、特定のWeb サービストランザクションに紐付いたサービスリクエストが該当するXAトランザクション内で実行されるようにし、特定のトランザクションに共通の変更を分類し、別のトランザクションに属する変更を切り離します。パーティシパントは、同じ操作を基盤のXAトランザクションコーディネータに転送することで、Web サービストランザクションコーディネータから関連づいたprepare、commit、rollbackリクエストに対応します。こうすることで、データベースにおけるローカルの結果がWeb サービストランザクション全体のグローバルな結果と一致するようにしています。
クライアントは比較的単純になっています。APIを使い、クライアントアプリケーションはパーティシパントをトランザクションに登録し、このパーティシパントを使いトランザクション終了の制御を行います。