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