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

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 8月 2日 (木) 12:45:29 JST


小林 (koichik)様

お世話になっております。藤原です。
(おそらく)自己解決いたしました。

Doltngを最新にし、新規Churaプロジェクトを作成。
customizer.diconを見比べて、pageCustomizerに以下の記述がありましたので
requiredTxCustomizerの代わりに追加しました。

<initMethod name="addCustomizer">
  <arg>
    <component 
class="org.seasar.framework.container.customizer.AspectCustomizer">
      <initMethod name="addInterceptorName">
        <arg>"j2ee.requiredTx"</arg>
      </initMethod>
      <property name="pointcut">"do.*, initialize, prerender"</property>
    </component>
  </arg>
</initMethod>

interceptorCustomizerへの追加も無しにし確認したところ、ロールバックもされ
るよう
になりました。
ありがとうございました。

そこで疑問が、requiredTxCustomizerだとロールバックされないのは何故に?
pointcutの指定は無い程度で同じような設定だと思うのですが・・・・

よろしくお願いいたします。



[E-MAIL ADDRESS DELETED] wrote on 2007/08/02 10:07:16:

> 小林 (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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user




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