[Seasar-user:4531] Re: インターセプターチェインの設定方法について
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2006年 9月 5日 (火) 16:11:14 JST
小林さん、ご指摘ありがとうございます。
> これらの instance 属性は prototype にしてください.
> request だと,コンテナの初期化時にインスタンスを生成できない
> 場合もあります.
確かにコンテナの初期化時点ではインスタンスを生成できずに
Exceptionが発生しています。
リクエストがあった段階でインスタンスが生成されれば良いと
考えて放置しておりました。
Exception が発生しているのは気持ちが悪いので、ご指摘の通り
prototype に変更します。
> なお,インターセプタチェインの instance 属性はデフォルト
> (singleton) のままで構いません.
先ほど、久保さんからの指摘でインターセプターチェインの
instance 属性を "request" に変更したら、何故か動作して
しまいました。
> 最後の【 2.の場合のdicon全体 】では,チェインの記述が
> その上の記述と異なり,Dao,Action,Service になっていますが,
> その場合はどのような結果になるのでしょうか?
> Dao にインターセプタが適用されなくなるのでしょうか?
> それとも,Dao のチェインに myDaoInsertInterceptor が適用されて
> いないので,Action にインターセプタが適用されなくなるのでしょうか?
記述の仕方が悪くて済みません。
A = Action
B = Service
C = Dao
なので、
myActionInterceptorChain --> Action --> Service --> myDaoInterceptorChain
--> Dao
または
Action --> myServiceInterceptorChain --> Service -->
myDaoInterceptorChain --> Dao
の様に動作します。
> 問題の切り分けをしたいので,お手数ですが lifecycleInterceptor を
> 適用しているインターセプタの定義を削除して,
> >
> > <!-- インターセプターチェインの設定 -->
> > <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>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>traceInterceptor</arg></initMethod>
> > </component>
> >
> という設定でどうなるか試して頂けますか?
問題なく動作しました。
( lifecycleInterceptor の属性は デフォルトに戻してあります)
また、各Interceptor内で使用している以下のコンポーネントの属性を
"singleton"にした場合も問題なく動作します。
<!-- 共通情報 -->
<component name="commonInfo" class="test.common.impl.CommonInfoImpl"
instance="session"/>
更に、上記コンポーネントの属性は "session" のままで、
各Interceptor 内の処理から上記コンポーネントを外した場合も
正常にインターセプターチェインは動作します。
(本来やりたい事からかけ離れていますが・・・)
ので、各インターセプターが instance属性が "session" の
コンポーネントを使用している場合に、インターセプターチェイン
を適用しようとすると上手く動作しない
と言うことになる気がします。
--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
川上 義夫 - Yoshio Kawakami
株式会社アイ・ティ・フロンティア
コンピテンスセンター 開発技術部
TEL: 03-6221-7087 FAX: 03-6221-7955
E-Mail: [E-MAIL ADDRESS DELETED]
--*--*--*--*--*--*--*--*--*--*--*--*--*--*--
Seasar-user メーリングリストの案内