第5章 Narayana トランザクションマネージャーの使用
このセクションでは、javax.transaction.UserTransaction
インターフェイス、org.springframework.transaction.PlatformTransactionManager
インターフェイス、または javax.transaction.Transaction
インターフェイスを実装して、Narayana トランザクションマネージャーを使用する詳細を説明します。使用するインターフェイスは、アプリケーションの要件によって異なります。本章の最後に、XA リソースを登録する問題の解決について扱います。本書では、以下の内容を取り上げます。
Java トランザクション API の詳細は、Java Transaction API(JTA)1.2 仕様と Javadoc を参照してください。
5.1. UserTransaction オブジェクトの使用
トランザクションのマケーションの javax.transaction.UserTransaction
インターフェイスを実装します。トランザクションを開始、コミット、またはロールバックする場合です。これは、アプリケーションコードで直接使用する可能性のある JTA インターフェイスです。ただし、UserTransaction
インターフェイスはトランザクションを区切る方法の 1 つにすぎません。トランザクションの境界を定めるさまざまな方法の説明は、9章トランザクションを使用する Camel アプリケーションの作成 を参照してください。
5.1.1. UserTransaction インターフェイスの定義
JTA UserTransaction
インターフェイスは以下のように定義されます。
public interface javax.transaction.UserTransaction { public void begin(); public void commit(); public void rollback(); public void setRollbackOnly(); public int getStatus(); public void setTransactionTimeout(int seconds); }
5.1.2. UserTransaction メソッドの説明
UserTransaction
インターフェイスは以下のメソッドを定義します。
- begin()
- 新しいトランザクションを開始し、これを現在のスレッドに関連付けます。XA リソースがこのトランザクションに関連する場合、トランザクションは暗黙的に XA トランザクションになります。
- commit()
現在のトランザクションを正常に完了し、保留中のすべての変更が永続化されるようにします。コミット後、現在のスレッドに関連付けられているトランザクションはなくなります。
注記ただし、現在のトランザクションがロールバックのみとしてマークされている場合は、
commit()
が呼び出されるとトランザクションは実際にはロールバックされます。- rollback()
- トランザクションを直ちに中止し、保留中の変更を破棄します。ロールバック後、現在のスレッドに関連付けられているトランザクションはなくなります。
- setRollbackOnly()
- 現在のトランザクションの状態を変更し、ロールバック以外に選択できる結果をなくしますが、ロールバックは実行しません。
- getStatus()
現在のトランザクションのステータスを返します。これは、
javax.transaction.Status
インターフェイスで定義された以下の整数値のいずれかになります。-
STATUS_ACTIVE
-
STATUS_COMMITTED
-
STATUS_COMMITTING
-
STATUS_MARKED_ROLLBACK
-
STATUS_NO_TRANSACTION
-
STATUS_PREPARED
-
STATUS_PREPARING
-
STATUS_ROLLEDBACK
-
STATUS_ROLLING_BACK
-
STATUS_UNKNOWN
-
- setTransactionTimeout()
- 現在のトランザクションのタイムアウトを秒単位で指定してカスタマイズします。トランザクションが指定のタイムアウト内で解決されない場合、トランザクションマネージャーは自動的にこれをロールバックします。