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