[Seasar-user:4522] インターセプターチェインの設定方法について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2006年 9月 5日 (火) 12:13:39 JST


川上と申します。

現在、S2StrutsとS2Daoを使用してプロトタイプを作成中なのですが、
以下の様に、インターセプターチェインを適用させたいのですが、

JSP -->   Action --> Service --> Dao 
     |            |           |
 Aインタセプタ     Bインタセプタ    Cインタセプタ
   チェイン         チェイン        チェイン

AとCしか適用されない場合と、BとCしか適用されない場合があります。


どうやら、dicon上のインターセプターチェインの記述順序(下記)で、
インターセプターが適用されたり、されなかったりするのですが、
その理由が分からなくて困っています。


一応、S2のドキュメントや過去のメーリングリストを調べてみたのですが、
原因が分かるような記述を見つけることが出来ませんでした。

ご存知の方がいらっしゃいましたら、以下の設定の何が間違えているか
また、インターセプターチェインの正しい設定方法をご教示下さい。
よろしくお願いします。

それぞれ以下のバージョンを使用しています。
S2コンテナ 2.3.10
S2Struts   1.2.9
S2Dao      1.0.34


【1.AとCしか動かない設定】
  <!-- インターセプターチェインの設定 -->
  <component name="myServiceInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
    <initMethod name="add"><arg>serviceInterceptor</arg></initMethod>
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
  </component>

  <component name="myActionInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>actionInterceptor</arg></initMethod>
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
  </component>

  <component name="daoInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
    <initMethod name="add"><arg>dao.daoInterceptor</arg></initMethod>
  </component>


【2.BとCしか動かない設定】
  <!-- インターセプターチェインの設定 -->
  <component name="myActionInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>actionInterceptor</arg></initMethod>
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
  </component>

  <component name="myServiceInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
    <initMethod name="add"><arg>serviceInterceptor</arg></initMethod>
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
  </component>

  <component name="daoInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
    <initMethod name="add"><arg>dao.daoInterceptor</arg></initMethod>
  </component>


【 2.の場合のdicon全体 】

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
        "http://www.seasar.org/dtd/components23.dtd">
<components  namespace="wmsfw">
  <include path="dao.dicon"/>

  <!-- インターセプターの設定 -->
  <component name="traceInterceptor" 
      class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>
  <component name="lifecycleInterceptor" 
 
class="org.seasar.framework.aop.interceptors.InterceptorLifecycleAdapter"/>

  <component name="myActionInterceptor" instance="request" 
             class="test.action.ActionInterceptor">
    <aspect pointcut="invoke">lifecycleInterceptor</aspect>
  </component>
  <component name="myServiceInterceptor" instance="request" 
             class="test.service.ServiceInterceptor">
    <aspect pointcut="invoke">lifecycleInterceptor</aspect>
  </component>
  <component name="myDaoInsertInterceptor" instance="request" 
             class="test.dao.DaoInsertInterceptor">
    <aspect pointcut="invoke">lifecycleInterceptor</aspect>
  </component>

  <!-- インターセプターチェインの設定 -->
  <component name="daoInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
    <initMethod name="add"><arg>dao.daoInterceptor</arg></initMethod>
  </component>

  <component name="myActionInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>actionInterceptor</arg></initMethod>
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
  </component>

  <component name="myServiceInterceptorChain"
      class="org.seasar.framework.aop.interceptors.InterceptorChain">
    <initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
    <initMethod name="add"><arg>serviceInterceptor</arg></initMethod>
    <initMethod name="add"><arg>traceInterceptor</arg></initMethod>
  </component>


  <!-- コンポーネントの登録 -->
  <!-- Actionの登録 -->
  <component name="hogeAction" instance="request"
             class="test.apl.action.impl.hogeActionImpl">
    <aspect>myActionInterceptorChain</aspect>
  </component>

  <!-- Serviceの登録 -->
  <component name="hogeService" instance="request"
             class="test.apl.service.impl.hogeServiceImpl">
    <aspect>myServiceInterceptorChain</aspect>
  </component>

  <!-- DAOの登録 -->
  <component name="hogeDao" instance="request" 
             class="test.apl.common.dao.hogeDao">
    <aspect pointcut="insert,update">myDaoInsertInterceptor</aspect>
    <aspect>daoInterceptorChain</aspect>
  </component>

  <!-- 共通情報 -->
  <component name="commonInfo" class="test.common.impl.CommonInfoImpl" 
instance="session"/>

</components>

--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
 川上 義夫  -  Yoshio Kawakami
 株式会社アイ・ティ・フロンティア 
  コンピテンスセンター 開発技術部
 TEL: 03-6221-7087 FAX: 03-6221-7955
 E-Mail: [E-MAIL ADDRESS DELETED]
--*--*--*--*--*--*--*--*--*--*--*--*--*--*--




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