[Seasar-user:8124] Re: S2Container とTeedaのバージョンを変更するとInterceptorにDIされません
Yasuo Higa
[E-MAIL ADDRESS DELETED]
2007年 6月 6日 (水) 19:54:51 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的にもっとスマートな方法があれば自分も知りたい
> ところですのでご教授ください。
>
私は、Interceptorでセッションやリクエストスコープの
コンポーネントを取得したいときは、
SingletonS2ContainerFactory.getContainer().getComponent()
をつかっちゃえ派です。
--
Yasuo Higa
[E-MAIL ADDRESS DELETED]
Seasar-user メーリングリストの案内