[Seasar-user:17925] Re: TomcatセッションレプリケーションでDTOの値が取得できない

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2009年 7月 3日 (金) 19:00:41 JST


小林 (koichik) です.

Date:    Fri, 03 Jul 2009 16:54:10 +0900
From:    "s.o" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:17923] Re: TomcatセッションレプリケーションでDTOの値が取得できない

>  その結果をみると、tomcat-A(クライアントから操作)のログには
>  UserDto値がセットされているのに対し、tomcat-BのログにはUserDtoの
>  プロパティがNULLになります

Tomcat-A で UserDto が作成された時点 (プロパティが
null) でレプリケートされて,その後 Tomcat-B で
UserDto のプロパティを変更してもレプリケートは
されていませんね.

ログから必要な部分を抜粋して Tomca-A と Tomca-B を
時系列に並べるとこのようになります.
# インデントしているのが Tomcat-B

最初のリクエストで UserDto が作成され,
Tomcat-B にレプリケートされます.

DEBUG 2009-07-03 16:08:20,316 [TP-Processor3] 
** before *****************************************: /login.do

=====AvgHttpSessionAttbuteListner#attributeAdded Start =====
[session id]D12DCE70BF1D50D76E3B7B16AE4EF9FF.jvm1
追加属性名:userDto 追加した属性値[USER_ID]null[passWord]null[userName]nul
=====Session Elements Start =====
[Key]userDto[value][USER_ID]null[passWord]null[userName]null
[UserDto indfo]
[userId]null
[userName]null
[Key]org.apache.struts.action.LOCALE[value]ja
=====Session Elements end =====

        INFO  2009-07-03 16:08:12,268 =====AvgHttpSessionAttbuteListner#attributeAdded Start =====
        INFO  2009-07-03 16:08:12,268 [session id]D12DCE70BF1D50D76E3B7B16AE4EF9FF.jvm1
        INFO  2009-07-03 16:08:12,268 追加属性名:userDto 追加した属性値[USER_ID]null[passWord]null[userName]null
        INFO  2009-07-03 16:08:12,268 =====Session Elements Start =====
        INFO  2009-07-03 16:08:12,268 [Key]userDto[value][USER_ID]null[passWord]null[userName]null
        INFO  2009-07-03 16:08:12,268 [UserDto indfo]
        INFO  2009-07-03 16:08:12,268 [userId]null
        INFO  2009-07-03 16:08:12,268 [userName]null
        INFO  2009-07-03 16:08:12,268 [Key]org.apache.struts.action.LOCALE[value]ja
        INFO  2009-07-03 16:08:12,268 =====Session Elements end =====

DEBUG 2009-07-03 16:08:20,325 [TP-Processor3] 
** after *****************************************: /login.do
  [session]userDto=[USER_ID]null[passWord]null[userName]null

その後のリクエストでログインが行われて UserDto の
プロパティが変更されます.

DEBUG 2009-07-03 16:08:32,469 [TP-Processor3] 
** before *****************************************: /login.do
  [session]form.counter=7
  [session]userDto=[USER_ID]null[passWord]null[userName]null

DEBUG 2009-07-03 16:08:32,507 [TP-Processor3] 
** after *****************************************: /login.do
  [session]form.counter=7
  [session]userDto=[USER_ID]test      [passWord]test                [userName]テストユーザ

しかし,このタイミング (Tomca-B では 16:08:24) で
Tomca-B には UserDto の変更は伝わっていません.
# 属性名 javax.servlet.jsp.jstl.fmt.request.charset の
# 変更は伝わっている.
そのために Tomcat-B の UserDto のプロパティは
null のままとなっています.

おそらく [Seasar-user:17912] と同じ現象になって
いるのでしょう.

手っ取り早く回避するなら,UserDto のプロパティを
変更した際は HttpSession#setAttribute() を
呼び出すのが簡単です.

[Seasar-user:17902] の設定を使えば setAttribute()
しなくても回避できるのかもしれませんが,それに
ついては Tomcat の範疇なので自分から言えることは
何もありません.


それにしても,起動時からの関係ない操作を含んだ 
(2 つ合わせて) 2600 行を越えるログを丸ごと添付し,
どこを参照すればいいのかという情報も示さないのは
ひどいと思います.


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