[Seasar-user:9620] Re: [teeda] トランザクションの指定について教えてください
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 8月 1日 (水) 18:00:47 JST
小林 (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 メーリングリストの案内