[Seasar-user:10616] Re: HOT deploy時だけNotSerializableExceptionが発生してしまう

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 9月 18日 (火) 20:00:08 JST


小林 (koichik) です.

Date:    Tue, 18 Sep 2007 19:10:54 +0900
From:    Junichi Kato <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:10615] HOT deploy時だけNotSerializableExceptionが発生してしまう

> 以下のようなセッションで管理するDTOを作っております
> このPaymentSessionDtoを使ってセッションに保存しようとしているのですが,以下のような例外がHOT deploy時のみ発生します.
> PaymentSessionDtoには,PaymentFutureのプロパティがあるのですが,Serializableを実装していませんが,それが原因だと思うのですが,
> なぜ,HOT deploy時だけ発生するのでしょうか?

HOT deploy の場合,リクエストの度にクラスが
変わる (ロードされる) ため,前のリクエストで
セッションに保存されているオブジェクト (前回の
クラスのインスタンス) をデシリアライズ&
シリアライズして,今回のクラスのインスタンスとして
作り替えています.
そのため,Serializable の問題がすぐに表面化します.

> このままで,COOL, WARM deploy時でも例外が発生しないのですが,問題ありますでしょうか?

Web コンテナがセッションに保持しているオブジェクトを
ファイルなどに外部化すると同じ例外になります.
Seasar2.4 の DbSession を使っている場合も同じです.

セッションに保持されるクラスは Serializable にするか,
Serializable でない型のフィールドに transient を
付けるかのどちらかにすべきです.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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