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