2.2. TransactionManager

TransactionManager インターフェースにより、管理されているアプリケーションの代わりにアプリケーションサーバーがトランザクション境界を制御できるようになります。

注記

JNDI からTransactionManager を取得可能です。
	InitialContext ic = new InitialContext();
	TransactionManager utm = ic.lookup("java:/TransactionManager")
トランザクションマネージャは、内部のデータ構造の一部としてスレッドとトランザクションコンテキストの関連を保持します。スレッドのトランザクションコンテキストは、null あるいは特定のグローバルトランザクションを参照します。複数のスレッドが同じグローバルトランザクションと紐付けられている場合もあります。ネスト化されたトランザクションには対応していません。
各トランザクションコンテキストは、トランザクションオブジェクト内にカプセル化されていますが、このトランザクションオブジェクトを使い、呼出中のスレッドのトランザクションコンテキストに関係なく、対象のトランザクション固有の操作を実行することができます。
TransactionManagerbegin メソッドは、新しいトップレベルトランザクションを開始し、呼出中のスレッドとトランザクションコンテキストを関連づけます。呼出中のスレッドがすでにトランザクションと紐付いている場合、begin メソッドはNotSupportedExceptionをスローします。
getTransaction メソッドは、呼出中のスレッドと紐付けられているトランザクションコンテキストを示すトランザクションオブジェクトを返します。このオブジェクトを使い、対象のトランザクション上で様々な操作を実行可能です。これらの操作については別のセクションにて説明されています。
commit メソッドは、呼出中のスレッドと紐付いているトランザクションを完了させます。メソッドが返された後、呼出中のスレッドはどのトランザクションとも関連付けがなくなります。スレッドがトランザクションコンテキストと関連付けがないときにcommitが呼び出されると、例外がスローされます。実装によってはトランザクションの発信元のみがcommit操作を利用可能となっています。呼出中のスレッドにトランザクション実行の許可がされていない場合、例外がスローされます。また、JBossJTAはスレッドのトランザクション終了機能に制限を課しません。
rollbackメソッドを使い、現在のスレッドに紐付いているトランザクションをロールバックします。rollback メソッドの完了後は、このスレッドはトランザクションとの関連がなくなります。

注記

マルチスレッドの環境では、同一のトランザクション内で複数のスレッドが有効です。checked transaction semanticsが無効の場合、あるいはトランザクションがタイムアウトしている場合、トランザクションは作成者以外のスレッドがトランザクションを終了することができます。これが起こると、作成者に通知がいきます。JBoss Transaction Service はIllegalStateException 例外をスローすることで、コミットあるいはロールバック中にこの通知を実行します。