第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()
現在のトランザクションのタイムアウトを秒単位で指定してカスタマイズします。トランザクションが指定のタイムアウト内で解決されない場合、トランザクションマネージャーは自動的にこれをロールバックします。