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