[Seasar-user:9630] Re: [teeda] トランザクションの指定について教えてください

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 8月 2日 (木) 10:07:16 JST


小林 (koichik)様

お世話になっております。藤原です。
ご回答ありがとうございます。

御指示して頂いたように修正しました。ログ出力時にコミットかかるようになり
意図する動きにはなったのですが・・・
今度はPageクラスでの例外発生時に「トランザクションをロールバックしました」
の出力がされなくなりました。
DBへも例外発生までの処理がコミットされています。

interceptorCustomizer に
    <initMethod name="addCustomizer">
      <arg>requiredTxCustomizer</arg>
    </initMethod>
を追加するとロールバックされるのですが、この記述追加は正しいでしょうか?

お忙しいところ申し訳ありませんが、よろしくお願いいたします。


[E-MAIL ADDRESS DELETED] wrote on 2007/08/01 18:00:47:

> 小林 (koichik) です.
> 
> Date:    Wed, 1 Aug 2007 10:45:12 +0900
> From:    [E-MAIL ADDRESS DELETED]
> To:       [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:9608] [teeda] トランザクションの指定について教えて
ください
> 
> > ログ出力のアスペクト処理内でコミットし、Pageクラスの各メソッドで例外が
発生
> > しても
> > ログ出力までRollbackされないようにするには、どの様なトランザクションの
指定
> > を
> > diconファイルに書けばよいのでしょうか?
> 
> 現在は pageCustomizer の設定で
> 
>     <initMethod name="addCustomizer">
>       <arg>requiredTxCustomizer</arg>
>     </initMethod>
>     <initMethod name="addCustomizer">
>       <arg>logCustomizer</arg>
>     </initMethod>
> 
> のような順になっていると思いますが,
> これを逆にして,ログを取得するインターセプタは
> Page に設定するトランザクションの外で動くように
> してください.
> 
> ログを出力するインターセプタは
> 
> public Object invoke(MethodInvocation invocation) throws Throwable {
>   logBefore();
>   try {
>     invocation.proceed();
>   } finally {
>     logAfter();
>   }
> }
> 
> のようにログ出力するメソッドを invoke() から
> 呼び出すようにしておきます.
> # logAfter() の呼び出しは try 〜 catch するのが無難.
> 
> そして customizer.dicon に interceptorCustomizer を
> 記述して,
> 
> <component name="interceptorCustomizer"
>     class="org.seasar.framework.container.customizer.CustomizerChain">
>   <initMethod name="addCustomizer">
>     <arg>
>       <component class="org.seasar.framework.container.customizer.
> AspectCustomizer">
>         <property name="interceptorName">"j2ee.requiredTx"</property>
>         <property name="pointcut">"log.*"</property>
>         <initMethod name="addClassPattern">
>           <arg>"root.interceptor"</arg>
>           <arg>"LogInterceptor"</arg>
>       </component>
>     </arg>
>   </initMethod>
> </component>
> 
> のようにすることで,log〜() メソッドに
> トランザクションが適用されます.
> このトランザクションは Page に設定される
> トランザクションの外なので独立した
> トランザクションになります.
> 
> 
> 
> --
> <signature>
>    <name>Koichi Kobayashi</name>
>    <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
> </signature>
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user




Seasar-user メーリングリストの案内