読者です 読者をやめる 読者になる 読者になる

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で設定する必要があるっぽいのだが、それだけが原因ではなさそう。