3.2. ローカル、グローバル、および分散トランザクションマネージャー
トランザクションマネージャーは、ローカル、グローバル、または分散できます。
3.2.1. ローカルトランザクションマネージャー
ローカルトランザクションマネージャー は、1 つのリソースに対してのみトランザクションを調整できるトランザクションマネージャーです。ローカルトランザクションマネージャーの実装は通常、リソース自体に組み込まれ、アプリケーションが使用するトランザクションマネージャーは、この組み込みトランザクションマネージャーに関連するシンラッパーです。
たとえば、Oracle データベースには、デマケーション操作をサポートする組み込みトランザクションマネージャーがあり (SQL BEGIN
、COMMIT
、または ROLLBACK
ステートメントを使用するか、ネイティブ Oracle API を使用)、さまざまなレベルのトランザクション分離があります。Oracle トランザクションマネージャーの制御は JDBC を介してエクスポートでき、この JDBC API は、アプリケーションがトランザクションの境界を定めるために使用します。
このコンテキストでは、リソース設定要素を理解することが重要です。たとえば、JMS 製品を使用している場合、JMS リソースは個別のキューやトピックではなく、JMS 製品の単一で実行中のインスタンスになります。さらに、同じ基になるリソースに異なる方法でアクセスする場合、複数のリソースのように見えるものが実際には単一のリソースである場合があります。たとえば、アプリケーションは、(JDBC を介して) 直接 (JDBC を介して) および間接的 (Hibernate などのオブジェクト関係マッピングツールを介して) リレーショナルデータベースにアクセスする可能性があります。この場合、基礎となるトランザクションマネージャーは同じため、これらのコードフラグメントの両方を同じトランザクションに登録できるはずです。
すべてのケースで機能する保証はありません。原則では可能ですが、Spring Framework や他のラッパーレイヤーの設計の詳細により、実際には機能しなくなる可能性があります。
アプリケーションでは、多くの異なるローカルトランザクションマネージャーが互いに独立して動作させることができます。たとえば、JMS キューとトピックを操作する 1 つの Camel ルートがあり、JMS エンドポイントが JMS トランザクションマネージャーを参照しているとします。もう 1 つのルートは JDBC 経由でリレーショナルデータベースにアクセスできます。しかし、JDBC と JMS アクセスを同じルートで組み合わせて、両方を同じトランザクションに参加させることはできません。
3.2.2. グローバルトランザクションマネージャー
グローバルトランザクションマネージャーは、複数のリソースでトランザクションを調整できるトランザクションマネージャーです。これは、リソース自体に構築されたトランザクションマネージャーに依存できない場合に必要です。トランザクション処理モニター (TP モニター) と呼ばれる外部システムは、異なるリソース間のトランザクションを調整できます。
以下は、複数のリソースで動作するトランザクションの前提条件です。
- グローバルトランザクションマネージャーまたは TP モニター: 複数の XA リソースを調整するために 2 相コミットプロトコルを実装する外部トランザクションシステム。
- XA 標準 をサポートするリソース: 2 相コミットに参加するには、リソースが XA 標準をサポートする必要があります。「XA 標準のサポート」を参照してください。実際には、これは、リソースが XA スイッチ オブジェクトをエクスポートできることを意味します。これにより、外部 TP モニターへのトランザクションを完全に制御できます。
Spring Framework 自体は、グローバルトランザクションを管理する TP モニターを提供しているわけではありません。ただし、OSGi が提供する TP モニター、または (統合が JtaTransactionManager クラスによって実装される場所) との統合をサポートします。したがって、完全なトランザクションサポートを備えた OSGi コンテナーにアプリケーションをデプロイする場合、Spring で複数のトランザクションリソースを使用できます。
3.2.3. 分散トランザクションマネージャー
通常、サーバーはトランザクションに関連するリソースに直接接続します。ただし、分散システムでは、Web サービスを介して間接的にのみ公開されるリソースに接続する必要がある場合があります。この場合、分散トランザクションをサポートすることができる TP モニターが必要です。Web サービスの WS-AtomicTransactions 仕様など、さまざまな分散プロトコルのトランザクションをサポートする方法を記述するいくつかの標準が利用できます。