[Seasar-user:7152] Re: [Seasar2] セッションに保存したクラスを取り出すとClassCastException発生

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 4月 9日 (月) 22:22:38 JST


小林 (koichik) です.

Date:    Mon, 09 Apr 2007 21:26:05 +0900
From:    原田 <[E-MAIL ADDRESS DELETED]>
To:       seasar-ML <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:7150] [Seasar2] セッションに保存したクラスを取り出すとClassCastException発生

> セッションにデータを保存して(正確にはセッションに保存したクラス内に保存して)、
> 別のリクエストで取り出して、保存したデータの型にCastすると、ClassCastExceptionが発生します。
> エラー発生後にtomcatを再起動すれば、なぜか2度と発生しなくなります。
> tomcatのwork以下を削除してtomcatを再起動すると、再発します。

HOT deploy では,HOT deploy 専用のクラスローダを
リクエストの度に作成しては破棄しています.
HOT deploy クラスローダにロードされるクラスは
convention.dicon で設定されたルートパッケージ以下に
属するクラスでかつ,本来のクラスローダ (HOT deploy 用
クラスローダの親) にロードされていないクラスです.

今回の現象から想像するに,work 以下を削除して再起動
した後の最初のリクエストでは,該当のクラスは HOT
deploy 用のクラスローダにロードされてしまうように
見えます.
それがセッションに格納された後,該当のクラスは
本来のクラスローダにロードされるのではないでしょうか.

エラー発生後に再起動すると,セッション情報を
復元するために該当のクラスが本来のクラスに
ロードされるため,最初のアクセスでも HOT deploy 用の
クラスローダにロードされることはなく,問題が起こらないと
思われます.

work を消して再起動すると最初のリクエストの時点では
該当のクラスが本来のクラスローダにロードされるきっかけが
なく,HOT deploy 用のクラスローダにロードされ以下同文.
と推測されます.

> 保存対象のクラスをHOT DEPLOY対象にしても、HOT DEPLOY非対象にしても同じです。
> 直接セッションに保存しているクラスはHOT DEPLOY非対象です。

保存対象のクラスを HOT deploy 対象にした場合は
上記の説明のようなことが発生していると思います.

HOT deploy 対象から外した場合でも同じというのが
ちょっと分かりません.
現象からは保存対象のクラスが HOT deploy 対象に
なってしまってるように見えます.
念のため,保存対象のクラスの FQN (不都合な
ところは xxx などに置換してください) と,
convention.dicon の設定 (同上) を教えてください.


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




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