[Seasar-user:8119] Re: S2ContainerとTeedaのバージョンを変更するとInterceptorにDIされません
TAKEUCHI Hideyuki
[E-MAIL ADDRESS DELETED]
2007年 6月 6日 (水) 19:04:58 JST
竹内と申します。
最近同じようなところで躓いたので。
Seasar2は使い始めて間もないので見当違いのことを
書いているかもしれませんのでご容赦ください。
環境1で動いているというのが少し疑問なのですが、
InterceptorへのDIは、システムへのInterceptorの登録時に
行われ、HTTPリクエストの開始時にDIされるわけではないため
期待する動作はしないと思います。これはコンポーネントの
ライフサイクルに関する問題なので、インスタンス管理を
prototypeにしても解決はしないと思っています。
LoginInterceptor2.invoke()の開始時に
System.out.println(loginUserDto);
として、インスタンスのIDを表示してみると
たぶん別セッションからリクエストしても同じIDが
帰ってくるんじゃないかと思います(自分はそうでした)。
もし、nullが帰ってきているようならDIが失敗していると
思われるのでdiconを見直す必要があると思います。
自分は今のところ、以下のようにinvoke()の頭で毎回コンテナから
取得しするという形で対応しています。
LoginUserDto loginUserDto = (LoginUserDto) SingletonS2ContainerFactory
.getContainer().getComponent(LoginUserDto.class);
もし、Seasar的にもっとスマートな方法があれば自分も知りたい
ところですのでご教授ください。
--
TAKEUCHI Hideyuki <[E-MAIL ADDRESS DELETED]>
chi-me-ra
亀田一郎 さんは書きました:
> 07/06/06 に Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> さんは書きました:
>>
>> 小林 (koichik) です.
>>
>> Date: Wed, 6 Jun 2007 11:42:43 +0900
>> From: "亀田一郎" <[E-MAIL ADDRESS DELETED]>
>> To: [E-MAIL ADDRESS DELETED]
>> Subject: [Seasar-user:8099] Re:
>> S2ContainerとTeedaのバージョンを変更するとInterceptorにDIされません
>>
>> > > *** customizer.diconの内容は次の通りです。
>> 略
>> > <component name="loginInterceptor"
>> > class="test.interceptor.LoginInterceptor" />
>>
>> instance="prototype" を追加してください.
>>
>> > <component name="loginInterceptor2"
>> > class="test.interceptor.LoginInterceptor2" />
>>
>> こちらにも instance="prototype" を追加してください.
>> # Interceptor も SMART deploy で自動登録にした方が
>> # いいと思いますが.その場合はデフォルトで prototype です.
>>
>> > <component name="testCustomizer2"
>> > class="
>> > org.seasar.framework.container.customizer.AspectCustomizer">
>> > <initMethod name="addInterceptorName">
>> > <arg>"loginInterceptor2"</arg>
>> > </initMethod>
>> > <property name="pointcut">"doAuth"</property>
>> > </component>
>>
>> <property name="useLookupAdapter">true</property>
>> を追加してください.
>
> お手数をお掛けしております。
> ご指定の内容でcustomizer.diconを変更して、テストを行いました。
>
> 下記の通り、インターセプターはerror画面に遷移し、
> 正常に動作しておりません。
>
> DEBUG 2007-06-06 16:53:28,086 [http-8080-Processor25] クラス(
> test.web.logincheck
> 2.Logincheck2Page[logincheck2_logincheck2Page])のコンポーネント定義を登
> 録します
> DEBUG 2007-06-06 16:53:28,136 [http-8080-Processor25] BEGIN
> test.web.logincheck2
> .Logincheck2Page#doAuth()
> LoginInterceptor2...起動
> DEBUG 2007-06-06 16:53:28,136 [http-8080-Processor25] END
> test.web.logincheck2.L
> ogincheck2Page#doAuth() : error
>
>
> --
>> <signature>
>> <name>Koichi Kobayashi</name>
>> <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
>> </signature>
>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内