[Seasar-user:19881] Re: [mobylet]SessionUtils から取り出した後ClassCastException

Shin Takeuchi [E-MAIL ADDRESS DELETED]
2010年 6月 21日 (月) 12:04:11 JST


井口さん

竹内(stakeuchi)です。
#出遅れまして申し訳ございません

現在mobyletセッションはHotDeployの対応が出来ていません。
ご迷惑をおかけしております。

mobyletのセッション機構はレプリケーション構成を前提としていますので
セッション情報のput/get時に(デフォルトで)自身のアプリへ
HTTP通信を行います。
この時通信元と通信先でHotDeployの時に
クラスローダにロードされたクラスが異なるため
ClassCastExceptionが発生してしまいます。
#CoolDeployの場合は問題無いです。

またひがさんがコメントして下さっているように
Seasar2も同じような問題を回避しているので
同じような機構をmobyletが持つことで回避することは出来るのですが
ここのエンハンスはもう少し先になってしまうと思います。


どうしてもHotDeploy下での開発がMUST要件であれば
セッションで管理するクラスはHotDeploy対象で無いクラスをご利用頂くことで
回避することは出来ると思います。


今後以下のISSUEで対応させて頂きます。
https://www.seasar.org/issues/browse/MOBYLET-111


よろしくお願い致します。


2010年6月21日10:16 Yasuo Higa <[E-MAIL ADDRESS DELETED]>:
> ひがです。
>
>> 井口です。
>>
>> > とりあえず,スタックトレースがあった方がいいのでは
>> > ないかと思います.
>> >
>> > また,HOT deploy でのみ発生するのか,それとも
>> > COOL でも発生するのかなどの情報もあった方がよいかと.
>>
>> 確認してみましたがCool deploy では例外発生せずにHOT deployの場合
>> 例外発生しました。
>> 以下、スタックトレースになります。
>> すみませんがアドバイス宜しくお願いいたします。
>>
> 最近のSeasar2の場合は、セッションから取り出してもClassCastExceptionは
> おきないはずなので、Seasar2のバージョンが古いか、SessionUtilsが
> 持っているセッションがSeasar2のセッションではないということだと思います。
>
>> 例外
>>
>> javax.servlet.ServletException: java.lang.ClassCastException: net.xxx.mobile.dto.TestBean cannot be cast to net.xxx.mobile.dto.TestBean
>>       org.mobylet.core.http.MobyletFilter.doFilter(MobyletFilter.java:76)
>>
>> 原因
>>
>> java.lang.ClassCastException: net.xxx.mobile.dto.TestBean cannot be cast to net.xxx.mobile.dto.TestBean
>>       net.xxx.mobile.web.reserve.CartPage._prerender(CartPage.java:37)
>>       sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>       sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>       sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>       java.lang.reflect.Method.invoke(Method.java:597)
>>       org.seasar.ymir.impl.MethodInvokerImpl.invoke(MethodInvokerImpl.java:55)
>>       org.seasar.ymir.impl.ActionImpl.invoke(ActionImpl.java:44)
>>       org.seasar.ymir.impl.ActionManagerImpl.invokeAction(ActionManagerImpl.java:77)
>>       org.seasar.ymir.impl.RequestProcessorImpl$VisitorForPrerendering.process(RequestProcessorImpl.java:469)
>>       org.seasar.ymir.PageComponentVisitor.visit(PageComponentVisitor.java:18)
>>       org.seasar.ymir.impl.PageComponentImpl.accept(PageComponentImpl.java:84)
>>       org.seasar.ymir.impl.PageComponentImpl.accept(PageComponentImpl.java:10)
>>       org.seasar.ymir.impl.RequestProcessorImpl.processRequestAndForward(RequestProcessorImpl.java:312)
>>       org.seasar.ymir.impl.RequestProcessorImpl.processRequest(RequestProcessorImpl.java:194)
>>       org.seasar.ymir.impl.RequestProcessorImpl.process(RequestProcessorImpl.java:163)
>>       org.seasar.ymir.impl.YmirImpl.processRequest(YmirImpl.java:443)
>>       org.seasar.ymir.impl.YmirImpl.process(YmirImpl.java:204)
>>       org.seasar.ymir.servlet.YmirFilter.doFilter(YmirFilter.java:90)
>>       org.seasar.cms.pluggable.servlet.PluggableFilter.doFilter(PluggableFilter.java:43)
>>       org.seasar.ymir.servlet.RequestLoggingFilter.doFilter(RequestLoggingFilter.java:96)
>>       org.seasar.ymir.servlet.MultipartRequestFilter.doFilter(MultipartRequestFilter.java:44)
>>       org.mobylet.core.http.MobyletFilter.processFilter(MobyletFilter.java:121)
>>       org.mobylet.core.http.MobyletFilter.doFilter(MobyletFilter.java:74)
>>
>>
>>
>> _______________________________________________
>> 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
>



-- 
―Lei Hau'oli Co.,Ltd.―――――――――――

 竹内 真(TAKEUCHI SHIN)
 Tel: 080-3300-9888
 Mail: [E-MAIL ADDRESS DELETED]

 ▼▼オフィス移転しました▼▼
 株式会社Lei Hau'oli
 〒135-0064 東京都江東区青海2丁目7-4 THE SOHO 934
 Tel: 03-6457-1041 Fax:03-6457-1042


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