Lucyでトランザクション
Lucyでトランザクションをやろうとlucy-tx-interceptor-0.0.3-20081219.064325-1.jarをダウンロードしたのだがどう設定していいのか分からない・・・。
ソースを見る限りクラスかメソッドに対して@RequiredTxをつければいけるっぽいのだけど…。
[追記]
メソッドに対してではなくクラスに対してつけるそうです。
メソッドにつけると起動時にNullPointerExceptionが発生します。(2009/1/21時点)
ソースを見たところ動作としては以下のような感じだと思われる。
1.トランザクションをかけたいクラスかメソッドに対して@RequiredTxをつける
※@interface RequiredTxには以下のアノテーションがかかってる
@Target( { ElementType.TYPE, ElementType.METHOD })
→ターゲットはクラスかメソッド
@Aspect(interceptBy = RequiredInterceptor.class)
→InterceptorとしてRequiredInterceptorが呼ばれる
2.RequiredInterceptorが呼ばれてAbstractTxInterceptorのintercept()が実行される
3.RequiredInterceptorのprocess()が実行される
4.RequiredInterceptorでJTATransactionProcesserのrequired()が呼ばれる
5.JTATransactionProcesserの最初にbegin()が、最後にend()が呼ばれる
6.end()でuserTxのstatusをチェックしてstatusがACTIVEであればコミット、それ以外の場合はロールバック。
ここまで解析してテストケースを作ったのだが、どうも@RequiredTxでAOPがかかっていない様子。うーん、原因がわからない。
JTATransactionProcesserのuserTxとtxManagerをlucy-config.xmlで設定する必要があるっぽいのだが、それだけが原因ではなさそう。