Seasar DI Container with AOP

トランザクションの自動制御

S2Txの機能を使い、POJO(普通のJavaのクラス)に対して、 トランザクションの自動管理機能を組み込むことができます。

トランザクション属性

Seasar2が標準で用意しているj2ee.diconには、 トランザクション属性に対応したAdviceが定義されています。 j2ee.diconはs2-extension-x.x.x.jarに含まれているので、 開発者のほうで用意する必要はありません。

これらのAdviceは、aspectタグアスペクトの自動登録SMART deployによるトランザクション設定 を使ってコンポーネントに適用します。

属性 コンポーネント名 説明
Required j2ee.requiredTx トランザクションが開始されていなければ、自動的にトランザクションを開始します。
既にトランザクションが開始されていれば、そのトランザクションを引き継ぎます。
トランザクションを開始した場合でも引き継いだ場合でも、 このインターセプタが適用されたメソッドが例外をスローした場合は、 例外の種類に応じてトランザクションがロールバックされるようにマークします。
デフォルトでは、全ての例外に対してロールバックされるようにマークします。
トランザクションを開始した場合、 このインターセプタが適用されたメソッドが 終了 (正常終了した場合および例外をスローした場合の両方) すると、 開始したトランザクションを完了 (コミットまたはロールバック) します。
トランザクションがロールバックするようにマークされていれば、 トランザクションをロールバックします。 そうでなければ、トランザクションをコミットします。
RequiresNew j2ee.requiresNewTx 常に新しいトランザクションを開始させます。
既存のトランザクションが開始されているなら、既存のトランザクションを中断し、 自分自身のトランザクションの終了後、中断したトランザクションを復帰させます。
このインターセプタが適用されたメソッドが例外をスローした場合は、 例外の種類に応じてトランザクションがロールバックされるようにマークします。
デフォルトでは、全ての例外に対してロールバックされるようにマークします。
このインターセプタが適用されたメソッドが終了 (正常終了した場合および例外をスローした場合の両方) すると、 開始したトランザクションを完了 (コミットまたはロールバック) します。
トランザクションがロールバックするようにマークされていれば、トランザクションをロールバックします。 そうでなければ、トランザクションをコミットします。
Mandatory j2ee.mandatoryTx トランザクションが既に開始されてなければエラーにします。
このインターセプタが適用されたメソッドが例外をスローした場合は、 例外の種類に応じてトランザクションがロールバックされるようにマークします。
デフォルトでは、全ての例外に対してロールバックされるようにマークします。
NotSupported j2ee.notSupportedTx 既存のトランザクションが開始されているなら、既存のトランザクションを中断します。
コンポーネントのメソッドの終了後、中断したトランザクションを復帰させます。

例外発生時の動作

デフォルトでは、コンポーネントが例外をスローした場合はトランザクションをロールバックするようにマークされますが、 発生した例外に応じてトランザクションをロールバックするようにマークするかしないかを指定することもできます。

  • addCommitRule(Class)メソッドを使用すると、 トランザクションをロールバックするようにマークしない例外を指定することができます。
  • addRollbackRule(Class)メソッドを使用すると、 トランザクションをロールバックするようにマークする例外を指定することができます。

コンポーネントから例外がスローされると、 addCommitRule()/addRollbackRule()が設定された順番にマッチするかチェックされます。 スローされた例外がaddCommitRule()/addRollbackRule()で指定された例外またはその派生例外であれば、 その設定に従ってトランザクションをロールバックするようにマークします。 スローされた例外がaddCommitRule()/addRollbackRule()で指定された例外とマッチしない場合、 トランザクションはロールバックするようにマークされます。

EJB互換のAdvice

Seasar2が標準で用意しているejbtx.diconには、 EJBのコンテナ管理トランザクション (CMT) と同じように実行時例外 (java.lang.RuntimeException)、 リモート例外 (java.rmi.RemoteException) とその派生例外が発生した場合はロールバックし、 その他の例外 (java.lang.Exception) が発生した場合はコミットするAdviceが定義されています。 ejbtx.diconはs2-extension-x.x.x.jarに含まれているので、 開発者のほうで用意する必要はありません。

属性 コンポーネント名
Required ejbtx.requiredTx
RequiresNew ejbtx.requiresNewTx
Mandatory ejbtx.mandatoryTx
NotSupported ejbtx.notSupportedTx

EJB3互換のAdvice

Seasar2が標準で用意しているejb3tx.diconには、EJB3のコンテナ管理トランザクション (CMT) と同じように、 @javax.ejb.ApplicationException アノテーションの rollback 要素で true が指定されたアプリケーション例外 (java.lang.Exception) および、 実行時例外 (java.lang.RuntimeException)、 リモート例外 (java.rmi.RemoteException) とその派生例外が発生した場合はロールバックし、 その他の例外が発生した場合はコミットするAdviceが定義されています。 ejb3tx.diconはs2-tiger-x.x.x.jarに含まれているので、開発者のほうで用意する必要はありません。

属性 コンポーネント名
Required ejb3tx.requiredTx
RequiresNew ejb3tx.requiresNewTx
Mandatory ejb3tx.mandatoryTx
NotSupported ejb3tx.notSupportedTx

SMART deployでの利用

SMART deploy環境でトランザクションの自動制御を利用する場合の設定については、 「DI Container」-「トランザクション制御を設定する」を参照してください。