11.5. トランザクションライフサイクルの概要
11.5.1. トランザクションライフサイクル
Java Transaction API (JTA) の詳細は、「Java Transaction API (JTA)」を参照してください。
リソースがトランザクションへの参加を要求すると、一連のイベントが開始されます。トランザクションマネージャー (TM) は、アプリケーションサーバー内に存在するプロセスであり、トランザクションを管理します。トランザクションの参加者は、トランザクションに参加するオブジェクトです。リソースは、データソース、JMS 接続ファクトリー、または他の JCA 接続です。
アプリケーションは新しいトランザクションを開始します。
トランザクションを開始するために、アプリケーションは JNDI から (EJB の場合はアノテーションから)
UserTransaction
クラスのインスタンスを取得します。UserTransaction
インターフェースには、トップレベルのトランザクションを開始、コミット、およびロールバックするメソッドが含まれています。新規作成されたトランザクションは、そのトランザクションを呼び出すスレッドと自動的に関連付けされます。ネストされたトランザクションは JTA ではサポートされないため、すべてのトランザクションがトップレベルのトランザクションとなります。UserTransaction.begin()
メソッドが呼び出されると、EJB がトランザクションを開始します。このトランザクションのデフォルトの動作はTransactionAttribute
アノテーションまたはejb.xml
記述子の使用によって影響を受けることがあります。この時点以降に使用されたリソースは、このトランザクションと関連付けられます。2 つ以上のリソースが登録された場合、トランザクションは XA トランザクションになり、コミット時に 2 フェーズコミットプロトコルに参加します。注記デフォルトでは、トランザクションは EJB のアプリケーションコンテナーによって駆動されます。これは Container Managed Transaction (CMT) と呼ばれます。トランザクションをユーザー駆動にするには、
Transaction Management
を Bean Managed Transaction (BMT) に変更する必要があります。BMT では、UserTransaction
オブジェクトはユーザーがトランザクションを管理するために使用できます。アプリケーションが状態を変更します。
次の手順では、アプリケーションが作業を実行し、登録されたリソースに対してのみ状態を変更します。
アプリケーションはコミットまたはロールバックの実行を決定します。
アプリケーションの状態の変更が完了すると、アプリケーションはコミットするか、またはロールバックするかを決定します。これは、適切なメソッド (
UserTransaction.commit()
またはUserTransaction.rollback()
) を呼び出します。CMT の場合、このプロセスは自動的に駆動されますが、BMT の場合は、UserTransaction
のメソッドコミットまたはロールバックを明示的に呼び出す必要があります。TM がレコードからトランザクションを削除します。
コミットあるいはロールバックが完了すると、TM はレコードをクリーンアップし、トランザクションログからトランザクションに関する情報を削除します。
障害リカバリー
リソース、トランザクションの参加者、またはアプリケーションサーバーがクラッシュするか、使用できなくなった場合は、障害が解決され、リソースが再度使用できるようになったときに Transaction Manager
がリカバリーを実行します。このプロセスは自動的に実行されます。詳細は、「XA リカバリー」を参照してください。