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

大屋茂士将 [E-MAIL ADDRESS DELETED]
2008年 11月 21日 (金) 16:35:30 JST


小林 (koichik) 様

お世話になっております。大屋です。
ご回答、有難うございます。

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

Serializableを実装しているか確認したところ、Formの親クラスにSerializableがありませんでした。
このため、親クラスで宣言していたフィールドがシリアライズ/デシリアライズ出来なかったようです。

親クラスにSerializableを実装したことで、HOT deploy時でもプロパティが消失しないことが確認できました。

ありがとうございました。


2008/11/20 20:00 Koichi Kobayashi <[E-MAIL ADDRESS DELETED]>:
> 小林 (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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>


-- 
大屋 茂士将


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