スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

グローバルトランザクション/分散トランザクションについて

「グローバルトランザクション」という言葉の意味について、昨日の飲み会で議論になったので、まとめ。

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

グローバルトランザクションは、分散トランザクションと同義です。グローバルトランザクションは複数のリソースマネージャを含むトランザクションを指します。一方、ローカルトランザクションは単一のリソースマネージャ(DB等)のみで構成されるトランザクションを指します。

http://download.oracle.com/docs/cd/B14117_01/java.101/b10979/xadistra.htm#i1066628

A distributed transaction, sometimes referred to as a global transaction, is a set of two or more related transactions that must be managed in a coordinated way.

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/c0004558.htm

グローバル・トランザクション
これらのトランザクションは、TM に対して定義されている RM が関係しているため、 TM の 2 フェーズ・コミットによって制御されます。グローバル・トランザクションとは、1 つまたは複数の RM が関係する作業単位のことです。

http://docs.sun.com/app/docs/doc/819-4629/6n6p3o6qu?l=ja&a=view#jesgl-aru

グローバルトランザクション (global transaction)
(n.) トランザクションマネージャーによって管理および調整され、1 つのデータベースおよびプロセスに制限されないトランザクショントランザクションマネージャーは通常、XA プロトコルを使ってデータベースのバックエンドと対話します。

http://docs.sun.com/app/docs/doc/819-4629/6n6p3o6rd?l=ja&a=view#jesgl-azb

ローカルトランザクション (local transaction)
(n.) 1 つのデータベースに固有で、1 つのプロセス内に制限されるトランザクションローカルトランザクションは、1 つのバックエンドに対してのみ動作します。ローカルトランザクションは通常、JDBCTM API を使用して区別されます。「グローバルトランザクション (global transaction)」も参照してください。

グローバルトランザクションと2相コミット

分散トランザクションを実装する一般的な方法として、2相コミット(2 phase commit)があります。
http://en.wikipedia.org/wiki/Distributed_transaction

A common algorithm for ensuring correct  completion of a distributed transaction is the two-phase commit (2PC). 

2相コミットの「2相」とは、複数のリソースマネージャに対して「prepare(commit-request)」フェーズと「commit」フェーズの2段階を経てグローバルトランザクション全体をコミットするプロセスを指します。「2」はリソースマネージャの数を指すものではありません。

http://en.wikipedia.org/wiki/Two-phase_commit

The two phases of the protocol are the commit-request phase, in which a coordinator process attempts to prepare all the transaction's participating processes (named participants, cohorts, or workers) to take the necessary steps for either committing or aborting the transaction, and the commit phase, in which, based on voting (either "Yes," commit, or "No," abort) of the cohorts, the coordinator decides whether to commit (only if all vote "Yes") or abort the transaction (otherwise), and notifies the result to the cohorts. 

DTPモデルについて

分散トランザクションデファクトスタンダードは、Open Groupが制定したDTPモデルです(CORBAおよびJava EEの分散トランザクションはすべてこれをベースにしています)。

Open Group, a vendor consortium, proposed the X/Open Distributed Transaction Processing (DTP) Model (X/Open XA), which became a de-facto standard for behavior of transaction model components.

DTPのXAインタフェースは、データベースやキューなどのトランザクショナルリソースを制御するソフトウェア(JDBCドライバ等)が実装するインターフェイスです。クライアント側で実装することはありません。

リソース・マネージャー (RM) は、データベースなどの共有リソースへのアクセスを提供するものです。 

http://ja.wikipedia.org/wiki/Java_Transaction_API

JTA アーキテクチャでは、各リソースマネージャ上に javax.transaction.xa.XAResource  インターフェイスを実装してTPモニターから制御できるようにする必要がある。前述したように各リソースマネージャには以下のような固有のAPIがある。
    * リレーショナルデータベース用: JDBC
    * メッセージングサービス用: JMS
    * 汎用EIS(企業情報システム)リソース用: Java EEコネクターAPI