トランザクションの自動制御
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」-「トランザクション制御を設定する」を参照してください。
댓글 없음:
댓글 쓰기