第17章 トランザクションの概要

注記

本章ではトランザクショナル Web Services の理論について説明します。この原則をすでにお分かりの場合は、本章は参考程度とお考えください。
トランザクションは、分散システムのパーティ間でのやりとりをコーディネートする有力なパラダイムとして出現しました。特に、共有データへの同時アクセスが必要なアプリケーションを管理することが目的です。JBoss Transaction Service Web Service API の多くは、コンテンポラリトランザクション API をベースにしています。これを理解することで、開発者の生産性は向上し、短期間で習得できます。次項ではトランザクショナル Web Services を構築するにあたって XTS を使用し始める前に知っておくべき必要な情報を提供していますが、すべてのトランザクションの技術に最も信頼できる参照と考えるべきではありません。
典型的なトランザクションとは、完全に成功する作業単位か、部分的に完了した作業で失敗し元の状態に戻す作業単位です。トランザクションがコミットされると、関連付けられた要求によるすべての変更は、通常データーベースに作業結果をコミットすることで永続的になります。トランザクションが失敗しロールバックされると、関連付けられた作業によるすべての変更は元に戻ります。分散システムのトランザクションでは通常、トランザクションの一部であるすべてのパーティシパントをまとめる役割があるトランザクションマネージャを使用しなければなりません。
XTS を使用したトランザクショナルな Web Services の使用および定義に関わる主要コンポーネントについては 図17.1「XTS トランザクションに関わるコンポーネント」 で図解されています。
XTS トランザクションに関わるコンポーネント

図17.1 XTS トランザクションに関わるコンポーネント

17.1. コーディネータ

あらゆるトランザクションはコーディネータと関連付けられています。コーディネータはトランザクションの結果を管理します。クライアントは Web Service トランザクションを開始すると、create 要求をコーディネーションサービスにポストします。これによりコーディネータが作成され、クライアントにその詳細を返します。このサービスは独自のコンテナに配置されるか、アプリケーションクライアントあるいはトランザクショナルな Web Services のひとつと共に配置され、パフォーマンスを向上させます。コーディネーションサービスは通常多くのトランザクションを並行して管理する役割を果たすため、各コーディネータは一意のトランザクション識別子により特定されます。
コーディネータの役割は、クライアントにより呼び出された Web サービスが一貫性のある結果に必ず到達できるようにすることです。クライアントがコーディネータにトランザクションを完了するよう指示すると、コーディネータは各 Web サービスが確実にトランザクションのスコープ内で行ったすべての仮の変更を確認する準備ができているようにします。次にそれらの変更を永久的にするよう指示します。いずれかの Web サービスが確認段階で問題を指摘した場合は、コーディネータはすべての Web サービスが仮の変更を拒否するようにし、トランザクションが開始する前の状態に戻します。また、クライアントがトランザクションをキャンセルするよう指示するとコーディネータはすべての変更を取り消します。
コーディネータまたは Web サービスのひとつがトランザクション中にクラッシュする場合でも、コーディネータと Web サービス間の交渉はまとめられ、すべてのサービスが変更を永久的なものにするか、またはすべてが前の状態に戻るようにします。