[Seasar-user:6562] Re: [Teeda]Sessionに値を保持する場合のutとctの違い
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 3月 8日 (木) 04:00:17 JST
小林 (koichik) です.
Date: Wed, 7 Mar 2007 18:32:12 +0900
From: "Kenji Yamaguchi" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:6557] [Teeda]Sessionに値を保持する場合のutとctの違い
> TeedaでSessionに情報を保持する方法ですが、
> Stringで保持するやり方だと問題なかったのですが、
> Usersinfo(マスタのEntity)のようなものを保持しようとする
> env.txtが ut だとエラーになってしまいます。
> ct にすると意図した通りに動いてくれます。
> 何が問題なのでしょうか?
おそらく,SMART deploy を使っていて,ut で HOT,
ct で COOL になっていますよね?
> view以下のフォルダ構成
> /login/login.html ← ここで保持
> /other/other.html ← ここで保持した内容を表示
HOT の場合,login.html を表示するときと other.html を
表示するときでは別のクラスローダが使われます.
そして,login.html を表示する際の Userinfo と,
other.html を表示する際の Userinfo が別のクラス
ローダにロードされたものだと,同じ Userinfo であっても
別のクラスとして扱われるため,
> org.seasar.framework.beans.IllegalPropertyRuntimeException: [ESSR0059]クラス(demo.dto.KeepDto)のプロパティ(loginUsersinfo)の設定に失
> 敗しました。理由はjava.lang.IllegalArgumentException: argument type mismatch
ということになってしまいます.
実際には,login.html を表示する際は HOT 用の
クラスローダに,other.html を表示する際は
Web コンテナのクラスローダにロードされていると
思われます.
対応策はいくつかあるのですが,無難なのは Userinfo の
パッケージを変更して,SMART deploy のルートパッケージ
以下から外すことです.
現在はおそらく,Userinfo はルートパッケージ以下に
いますよね? そのため,最初は HOT 用のクラスローダに
ロードされてしまっているのだと思われます.
Userinfo を SMART deploy のルートパッケージから
外せば HOT のクラスローダでロードされることは
なくなり,この問題は発生しなくなります.
もう一つは,Userinfo も session スコープの
コンポーネントして dicon に登録することです.
そうすると,クラスローダが変わっても S2 の方で
適切に対処するようになります.
--
<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 メーリングリストの案内