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() で指定された例外とマッチしない場合、
トランザクションはロールバックするようにマークされます。
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 |
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環境でトランザクションの自動制御を利用する場合の設定については、
「DI Container」-「トランザクション制御を設定する」を参照してください。
|