[Seasar-user:7162] Re: [Seasar2] セッションに保存したクラスを取り出すとClassCastException発生
原田
[E-MAIL ADDRESS DELETED]
2007年 4月 10日 (火) 14:48:14 JST
原田です。
> 「HOT deploy 対象から外した」といったのは、上記の決められたパッケージ以外(ルートがaa.bb.ccとするとaa.bb.items)に
> 移動したということですが、クラスローダー的にはHOT DEPLOYで、機能的にはHOT DEPLOYじゃ無い状態という
ちょっと間違えました。
> (ルートがaa.bb.ccとするとaa.bb.items)に
↓
(ルートがaa.bb.ccとするとaa.bb.ccc.items)に
です。
以上よろしくお願いします。
原田 <[E-MAIL ADDRESS DELETED]> wrote:
> 原田です。
>
> おお、どんぴしゃです。
>
> パッケージをルートパッケージ以下以外に変更すると、直りました。
>
> > convention.dicon で設定されたルートパッケージ以下に
> > 属するクラスでかつ,本来のクラスローダ (HOT deploy 用
> > クラスローダの親) にロードされていないクラスです.
>
> いままでルートパッケージ以下で、決められたパッケージ(Dto,Action、Service,Logic等)のみが
> HOT deploy 専用のクラスローダにロードされていると思っていたのですが、
> 違ったということですね。
>
> > HOT deploy 対象から外した場合でも同じというのが
> > ちょっと分かりません.
>
> 「HOT deploy 対象から外した」といったのは、上記の決められたパッケージ以外(ルートがaa.bb.ccとするとaa.bb.items)に
> 移動したということですが、クラスローダー的にはHOT DEPLOYで、機能的にはHOT DEPLOYじゃ無い状態という
> ことですか?
>
> > 念のため,保存対象のクラスの FQN (不都合な
> > ところは xxx などに置換してください) と,
> > convention.dicon の設定 (同上) を教えてください.
>
> NGの場合はaa.bb.cc.dto以下やaa.bb.cc.items以下。
>
> <components>
> <component class="org.seasar.framework.convention.impl.NamingConventionImpl">
> <initMethod name="addRootPackageName">
> <arg>"aa.bb.cc"</arg>
> </initMethod>
> </component>
> </components>
>
>
> ところでHOT DEPLOY対象のままで、これに対応することってできないのですかね。
>
> 取りあえず、ありがとうございます。
>
>
> Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:
>
> > 小林 (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 mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
Seasar-user メーリングリストの案内