[Seasar-user:16351] Re: sessionスコープのコンポーネント内に保存したデータ内容が一部消失することがある

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 11月 20日 (木) 20:00:05 JST


小林 (koichik) です.

Date:    Thu, 20 Nov 2008 18:37:18 +0900
From:    "大屋茂士将" <[E-MAIL ADDRESS DELETED]>
To:      [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:16348] sessionスコープのコンポーネント内に保存したデータ内容が一部消失することがある

> diconファイルでセッションスコープにコンポーネントを登録しており、
> Actionのフィールドに@Resourceを指定してインジェクションしています。
> インジェクションされるコンポーネントは内部的にMapを保持し、そのMapにArrayListとFormを保存しています。
> Form自体はrequestスコープですが、保管の際クローンを作成して保存しています。
> 
> このようなAction内で画面遷移を行うとインジェクションされているコンポーネントのインスタンスが入れ替わることがあります。

HOT deploy では,セッションからオブジェクトを
取り出す際に新しいクラスローダの元でロードされた
クラスのインスタンスとして再構築 (シリアライズ・
デシリアライズ) を行うためでしょう.
これは COOL deploy では行われません.

> ・HOT deploy時
>  消失するケースと、消失しないケースがあります。
>  ただし、同じコードであれば同じ結果になります。
> 
> 以上のように再現の条件が特定できず、原因がつかめておりません。何かしらヒントが欲しい状況です。

セッションに保持されるオブジェクトは Serializable で
なくてはなりません.
セッションスコープのコンポーネントやその Map に
追加される Form や ArrayList に追加されるオブジェクトが
全て Serializable を実装しているか確認してみては
いかがでしょうか.


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