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