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