TxAttributeCustomizerでの特定例外をコミット処理にする。

TxAttributeCustomizerを設定した場合、例外はずべてコミット処理されるみたいです。
j2ee.requiredTx等のコンポーネントを使って設定した場合はコミットする・しないを明示的に設定できたけど、どうもTxAttributeCustomizerにはaddCommitRule()やaddRollbackRule()メソッドがないのでそういった設定はできないみたい。
トランザクション制御を明示的にやりたい場合はUserTransactionを使えばできるんだけど、ある程度の一律に対処したい場合はどうしようかしら。

勘違いしてました。TxAttributeCustomizerはあくまで「EJB3 の @TransactionAttribute アノテーションを利用可能する。」だけでアノテーションがない場合はデフォルトでj2ee.requiredTxが適用されるということ。
ということは結局j2ee.requiredTxが適用されるのでこれまで通りdiconにコンポーネントをaddCommitRuleやaddRollbackRuleを設定して再定義すれば例外毎に処理を変更できます。
j2ee.diconをそのままコピーして任意の名前(app-j2ee.diconとか)にし、addCommitRuleやaddRollbackRuleを設定します。







@example.exception.HogeException@class


で、app.diconでincludeしているj2ee.diconを上で指定した名前のdiconに変更するとうまくいきます。
重要なのはnamespaceをj2eeで設定すること。TxAttributeCustomizerがここしかみてないので。


ちなみにUserTransactionを直接使うとアノテーションの設定を無視してトランザクション制御ができます。こんな事をやりたいかどうかは別ですが・・・


@TransactionAttribute(TransactionAttributeType.NEVER)
public String index() throws Exception {
userTransaction.begin();
userTransaction.commit();
return null;
}