ページの先頭行へ戻る
Interstage Application Server Java EE運用ガイド(Java EE 6編)
Interstage

3.9.1 ローカルトランザクションとグローバルトランザクション

JTAトランザクションには、ローカルトランザクションとグローバルトランザクションが存在します。複数のリソースに対する処理の一貫性を保証するには、グローバルトランザクションを使用する必要があります。しかし、2フェーズコミットプロトコルによる性能オーバーヘッドがかかるため、できる限り単一のリソースだけを使用するように設計して、ローカルトランザクションを使用することをお勧めします。

ローカルトランザクション

ローカルトランザクションには、1つのリソースだけが含まれます。トランザクションの有効範囲は、リソース自体でローカルに管理されます。ローカルトランザクションでは、1フェーズコミットプロトコルが使用されます。また、ローカルトランザクションの場合、1つのプロセス内でトランザクション制御されることを必要とします。

グローバルトランザクション

グローバルトランザクションでは、トランザクション内に複数のリソースが登録できます。例えば、グローバルトランザクションは、2つのデータベースを作業範囲とする場合に使用します。また、グローバルトランザクションの場合、複数のプロセス間でトランザクション制御できます。
グローバルトランザクションでは、2フェーズコミットプロトコルが使用されます。

ローカルトランザクションで動作する条件

ローカルトランザクションは1つの非XAリソースだけを含んでおり、トランザクションに参加するJava EEコンポーネントがすべて1つのプロセス内で実行されることを必要とします。1トランザクション範囲内で複数の非XAリソースが使用された場合、トランザクションはエラーとなります。

JDBCリソースが非XAリソースとして扱われる条件は以下です。

グローバルトランザクションで動作する条件

複数のリソースを管理するトランザクションまたは複数のプロセス間でトランザクションを管理する場合は、グローバルトランザクションとなります。
トランザクション内で1つのXAリソースだけ使用した場合、リソース間の一貫性を保証する必要がないため1フェーズコミットプロトコルで処理されます。それ以外は、2フェーズコミットプロトコルで動作します。

グローバルトランザクションの制御が必要なケース

同一トランザクション範囲内で以下のようなリソースアクセスが発生した場合に、グローバルトランザクションでの制御が必要となります。

注意

  • トランザクション処理は非常に負荷のかかる制御が必要となるため、できる限りサーバ側でトランザクション処理するように設計してください。