10.5.2. JTA トランザクションのライフサイクル
リソースがトランザクションへの参加を要求すると、一連のイベントが開始されます。トランザクションマネージャーは、アプリケーションサーバー内のプロセスで、トランザクションを管理します。トランザクションの参加者は、トランザクションに参加するオブジェクトです。また、リソースとは、データソースや JMS 接続ファクトリ、その他の JCA 接続のことです。
アプリケーションが新しいトランザクションを開始する
トランザクションを開始するには、お使いのアプリケーションが JNDI から(または、EJB の場合はアノテーションから)UserTransaction
クラスのインスタンスを取得します。UserTransaction
インターフェースには、トップレベルのトランザクションを開始、コミット、ロールバックするメソッドが含まれています。新規作成されたトランザクションは、そのトランザクションを呼び出すスレッドと自動的に関連付けされます。ネストされたトランザクションは JTA ではサポートされないため、すべてのトランザクションがトップレベルのトランザクションとなります。UserTransaction
.begin()
を呼び出すと、新規トランザクションが開始されます。この時点移行に使ったリソースはすべて、このトランザクションと関連付けられます。1つ以上のリソースが登録された場合、このトランザクションは XA トランザクションになり、コミット時に 2 相コミットプロトコルに参加します。アプリケーションがステートを変更する
次に、トランザクションが作業を実行しステートを変更します。アプリケーションがコミットまたはロールバックを決定する
お使いのアプリケーションがステータスの変更を終了すると、コミットするか、ロールバックするか決定し、適切なメソッドを呼び出します。UserTransaction
.commit()
またはUserTransaction
.rollback()
を呼び出します。1 つ以上のリソースを登録している場合は、ここで 2 相コミットプロトコル (2PC) が起こります。「2 相コミットプロトコルについて」トランザクションマネージャーが記録からトランザクションを削除する
コミットあるいはロールバックが完了すると、トランザクションマネージャーは記録を消去し、トランザクションに関する情報を削除します。
障害回復
障害回復は自動的に行われます。リソース、トランザクションの参加者、アプリケーションサーバーが使用できなくなった場合、この問題が解決した時にトランザクションマネージャーがリカバリー処理を行います。