[Seasar-user:17435] Re: [S2Container][SAStruts]セッション格納の値について

Hiroshi Yamamoto [E-MAIL ADDRESS DELETED]
2009年 5月 13日 (水) 18:56:34 JST


山元です。

小林 (koichik)さん対応ありがとうございます。

> HttpSessionAttributeListener を設定すれば,
> いつ誰がインスタンスを変更しているか分かるかも
> しれません.

なるほど、その手がありましたか。まったく気が付きませんでした。

ひとまず教えていただいたリスナーもやってみたところ、
Actionに適用している認証用のInterceptorの問題なことが分かりました。
(リスナーが決め手にはなりませんでしたが...)

public class AuthenticationInterceptor implements MethodInterceptor {
@Resource
protected UserContextDto userContextDto;

上記のInterceptorをログイン用のAction以外へ適用しています。
このInterceptorにDIされるDtoがActionのDtoとインスタンスが別なようです。

勝手な想像ですが、InterceptorのライフサイクルとDtoのライフサイクルの
違いによるものでしょうか?
Hotだと毎回再生成されるから適用出来たけどCoolではそうではないので
うまくいかないとか?

だとするとInterceptorではどのようにセッションを操作する
(それともInterceptorをrequestとかにする)のが適切なのでしょうか?

@Resource
protected Map<String, Object> sessionScope;

@Resource
protected HttpSession httpSession;

以上、よろしくお願いいたします。


2009/05/13 17:00 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (koichik) です.
>
> Date:    Tue, 12 May 2009 23:39:05 +0900
> From:    Hiroshi Yamamoto <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:17423] [S2Container][SAStruts]セッション格納の値について
>
>> Cool Deploy時にセッションに登録したDtoにActionで値を設定しても、
>> 次のリクエストには値が全て未設定になってしまうのですが、
>> 何か考えられることはないか教えていただけないでしょうか。
>> (Hot Deploy時は問題がありません)
>>
>> ログから一度目のリクエストと二度目のインスタンスが異なることが
>> 分かっています。
>
> HttpSessionAttributeListener を設定すれば,
> いつ誰がインスタンスを変更しているか分かるかも
> しれません.
>
> public class AttributeListenerImpl implements HttpSessionAttributeListener {
>  public void attributeAdded(HttpSessionBindingEvent event) {
>    if ("userContextDto".equals(event.getName())) {
>      System.out.println("userContextDto added : " + event.getValue());
>      Thread.dumpStack();
>    }
>  }
>  public void attributeReplaced(HttpSessionBindingEvent event) {
>    if ("userContextDto".equals(event.getName())) {
>      System.out.println("userContextDto replaced : " + event.getValue());
>      Thread.dumpStack();
>    }
>  }
>  public void attributeRemoved(HttpSessionBindingEvent event) {
>  }
> }
>
> これを web.xml に設定して確認してみてください.
>
>
> --
> <component name="koichik">
>    <property name="fullName">"Koichi Kobayashi"</property>
>    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内