[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 メーリングリストの案内