[Seasar-user:17184] [SAStruts]インターセプター中での HOT deploy と COOL deploy の違い

Kageyu Hidemasa [E-MAIL ADDRESS DELETED]
2009年 4月 6日 (月) 12:50:15 JST


はじめまして、景由@イズと申します。

現在 Seasar2 入門 Java によるはじめてのWebアプリケーション開発 で
SAStruts の生産性の高さに驚きを感じて、開発のための調査をしている
ところです。

自分でインターセプタを開発した場合ですが、HOT Deploy と COOL deploy
(WARM Deploy も含む)の動作が違っていて困っています。
(今まで主に PHP を使っておりインターセプタを開発するのは今回が初
めてです。)
具体的にいいますと HOT deploy の場合は下記の様にExceptionが発生し
ているのですが、COOL deploy, WARM deploy の場合はすんなりと通って
います。

------------------------------------------------------------------------
メッセージ

説明 The server encountered an internal error () that prevented it from fulfilling this request.

例外

javax.servlet.ServletException: java.lang.ClassCastException: sabbs.form.MemberForm cannot be cast to sabbs.form.MemberForm
	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
	org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:125)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:75)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
	org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:90)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)

原因

java.lang.ClassCastException: sabbs.form.MemberForm cannot be cast to sabbs.form.MemberForm
	sabbs.interceptor.LoginConfirmInterceptor.isLoggedIn(LoginConfirmInterceptor.java:60)
	sabbs.interceptor.LoginConfirmInterceptor.invoke(LoginConfirmInterceptor.java:33)
	sabbs.action.GenreAction$$EnhancedByS2AOP$$24b64a$$MethodInvocation$$confirm4.proceed(MethodInvocationClassGenerator.java)
	sabbs.action.GenreAction$$EnhancedByS2AOP$$24b64a.confirm(GenreAction$$EnhancedByS2AOP$$24b64a.java)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:96)
	org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:136)
	org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:86)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:125)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:75)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
	org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:90)
	org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:63)
	org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)

------------------------------------------------------------------------

Exceptionが出ているソースの箇所は下記の通りとなっています。
LoginConfirmInterceptor.java
------------------------------------------------------------------------
56:        HttpSession session =
57:            (HttpSession) SingletonS2ContainerFactory
58:                .getContainer().getExternalContext().getSession();
59:        
60:        MemberForm form = (MemberForm)session.getAttribute("memberForm");
61:
62:        if (form != null && form.userId != null) {
63:        	return true;
64:        }
65:        else {
            :
            略
------------------------------------------------------------------------

環境は
Apache Tomcat/6.0.18
SAStruts 1.0.4 sp4
です。

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

-----
景由秀正@イズ株式会社
ソリューション部 開発グループ
PHONE:03-5771-5021  FAX:03-5771-5022
URL http://www.is-visionary.com/




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