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