トランザクション管理機能は、Apcoordinatorがトランザクションの開始、コミット、ロールバックを制御する機能です。アプリケーションでトランザクションの開始、終了をプログラムする必要がなく、トランザクションの制御が容易になります。
トランザクション管理機能を使用すると、Apcoordinatorは次のようにトランザクションを制御します。
ビジネスクラスのメソッドのうちコマンドマップで指定されたもの(以降、ビジネスメソッドと呼びます)を呼び出す直前にトランザクションを開始します。
呼び出したビジネスメソッドが正常に終了した場合には、トランザクションをコミットします。
以下の場合にはトランザクションをロールバックします。
ビジネスメソッドがロールバック例外を発生した場合。デフォルトでは、以下がロールバック例外として使用されます。設定によりロールバック例外を追加することが可能です。
java.lang.RuntimeExceptionとそのサブクラス
java.lang.Errorとそのサブクラス
com.fujitsu.uji.DispatchContextクラスのsetRollbackOnlyメソッドが呼び出された場合。この場合、ビジネスメソッドがロールバック例外を発生しなくても、ビジネスメソッドの終了後にトランザクションをロールバックします。例外を発生させずにロールバックさせたい場合にこのsetRollbackOnlyを使用します。
ビジネスクラス再試行機能を使用しており、ビジネスクラスが再試行される場合。
Apcoordinatorで管理できるのは、以下のインターフェイスによって制御できるトランザクションです。
javax.transaction.UserTransactionインターフェイス
UserTransactionはトランザクション制御用のインターフェイスであり、JTA(Java Transaction API)仕様によって定義されています。 一般に、EJB, JMS, JDBCのトランザクションを制御する場合に使用します。
java.sql.Connectionインターフェイス
データベースとの接続を表すインターフェイスであり、JDBC仕様で定義されています。アプリケーションサーバーに依存せずに直接データベースにアクセスする場合に使用します。
上記以外のインターフェイスについては、アダプタを作成することによってApcoordinatorで管理できる場合があります。アダプタの作成方法は“4.7.4 JDBCのトランザクションの制御”で説明します。
デフォルトでは、UserTransactionインターフェイスによってトランザクションを制御します。java.sql.Connectionインターフェイスによる制御を利用する方法は“4.7.4 JDBCのトランザクションの制御”で説明します。
UserTransactionインターフェイスによるトランザクション制御を選択し、アプリケーションサーバーとしてInterstageを使用する場合、トランザクションを連携させることのできるアプリケーションの種別と、トランザクションで制御できるリソースは以下のようになります。
トランザクションを連携させることのできるアプリケーションの種別: 以下の組み合わせの場合は、呼び出し元が開始したトランザクション上で呼び出し先のアプリケーションを実行させることができます。
呼び出し元のアプリケーション | 呼び出し先のアプリケーション | |
---|---|---|
分散トランザクションを使用しない場合 | 分散トランザクションを使用する場合 | |
Webアプリケーション | 呼び出し元と同じGlassFish上のEJB (*1)(*2) | (分散トランザクションは使用できません) |
EJBセションBean | 呼び出し元と同じGlassFish上のEJB (*1) | 同一マシン内のGlassFish上で動作するEJB (*1)(*3) |
(*1) 呼び出されるEJBが、呼び出し元のトランザクション上で動作するように設定されている必要があります。そのため、呼び出されるEJBのトランザクション管理種別はContainerに設定し、トランザクション属性はMandatory, Required, Supportsのいずれかに設定します。
(*2) GlassFishのタイプとして「WebアプリケーションとEJBアプリケーションを同一JavaVMで運用」を使用します。
(*3) 呼び出し元と呼び出し先のGlassFishは以下のどちらかのタイプである必要があります。また、両方で分散トランザクションを使用するように設定が必要です。
EJBアプリケーションのみ運用
WebアプリケーションとEJBアプリケーションを別JavaVMで運用
トランザクションで制御できるリソース: トランザクションを開始してから終了するまでの間に使用できるリソースは以下のとおりです。使用したリソースは、トランザクションによる制御の対象となります。
分散トランザクションの使用有無 | トランザクションで制御できるリソース |
---|---|
使用しない |
|
使用する |
|
(*1)トランザクションを開始してから終了するまでの間に使用できるデータソースは1個のみです。また、そのデータソースを2回以上使用する場合は、同一のユーザーIDとパスワードを使用する必要があります。
(*2)InterstageにJDBCデータソースを登録する必要があります。
(*3)Interstageにリソースを登録する必要があります。また、そのリソースは分散トランザクション連携が可能である必要があります。
ポイント
トランザクションに参加できるリソースは、アプリケーションサーバーなどの実行環境に依存します。