[Seasar-user:21288] Re: [SAStruts]CoolDeploy時にSIllegalArgumentException発生
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2012年 3月 18日 (日) 02:30:00 JST
小林 (koichik) です.
遅レスですが...
添付のログは COOL deploy になってますが,HOT deploy を
使っていたときに保存された DTO が HTTP セッションに
残ってしまっているために DI できずにエラーとなっています.
Sysdeo Tomcat Plugin を使っている場合はプロジェクト直下の
work ディレクトリに〜.ser というファイルがあると思うので,
それを削除してみてください.
元々 HOT deploy を使っていた場合に起きていたという例外ですが,
もし HOT deploy に起因するのであれば,Filter や dicon に定義
された (HOT deploy 非対象の) クラスから,HOT deploy 対象の
DTO 等を使用しているというのが典型的なケースになります.
Filter や dicon に定義されたクラスで使用する DTO (ログイン情報を
保持する DTO が典型) は HOT 非対象となるようにパッケージを
分けるなどすると問題を回避できます.
On Mon, 12 Mar 2012 12:39:20 +0900, higayasuo <[E-MAIL ADDRESS DELETED]> wrote:
> ひがです。
>
> ログを見るかぎりCool DeployではなくHot Deployで動いているように見えますね。
>
> > はじめまして。arephと申します。
> >
> > 現在SAStrutsを利用して開発をしております。
> > 開発時はHotDeployで開発を行なっていたのですが、ある例外が発生し、調べているとでHotDeployが問題ではないかとの情報があったためにCoolDeployでアプリのデプロイを試みました。
> > するとHotDeploy時には発生しなかった例外が発生し、原因が掴めず調査が難航しております。
> >
> > 心当たりがありましたらアドバイスを頂けないでしょうか。
> > 以下にコンソールログを記述します。
> >
> > -------ここから-------
> >
> > org.apache.catalina.core.ApplicationDispatcher invoke
> > 致命的: サーブレット action のServlet.service()が例外を投げました
> > org.seasar.framework.exception.SIllegalArgumentException:
> > [ESSR0094]IllegalArgumentExceptionがクラス(XXX.action.MenuAction)[WebappClassLoader
> > context: /XXX
> > delegate: false
> > repositories:
> > /WEB-INF/classes/
> > ----------> Parent Classloader:
> > [E-MAIL ADDRESS DELETED]
> > ]の型(XXX.dto.UserDataDto)[WebappClassLoader
> > context: /XXX
> > delegate: false
> > repositories:
> > /WEB-INF/classes/
> > ----------> Parent Classloader:
> > [E-MAIL ADDRESS DELETED]
> > ]のフィールド(userDataDto)に型(org.seasar.framework.container.hotdeploy.HotdeployHttpSession$SerializedObjectHolder)[WebappClassLoader
> > context: /XXX
> > delegate: false
> > repositories:
> > /WEB-INF/classes/
> > ----------> Parent Classloader:
> > [E-MAIL ADDRESS DELETED]
> > ]の値(org.seasar.framework.container.hotdeploy.HotdeployHttpSession$[E-MAIL ADDRESS DELETED])を設定するときに発生しました。対象のクラスは(XXX.action.MenuAction$$EnhancedByS2AOP$$7fa3f6)[WebappClassLoader
> > context: /XXX
> > delegate: false
> > repositories:
> > /WEB-INF/classes/
> > ----------> Parent Classloader:
> > [E-MAIL ADDRESS DELETED]
> > ]です。
> > at org.seasar.framework.util.FieldUtil.set(FieldUtil.java:171)
> > at org.seasar.framework.container.assembler.AbstractBindingTypeDef.setValue(AbstractBindingTypeDef.java:346)
> > at org.seasar.framework.container.assembler.AbstractBindingTypeDef.bindAuto(AbstractBindingTypeDef.java:151)
> > at org.seasar.framework.container.assembler.BindingTypeMustDef.doBind(BindingTypeMustDef.java:45)
> > at org.seasar.framework.container.assembler.AbstractBindingTypeDef.bind(AbstractBindingTypeDef.java:91)
> > at org.seasar.framework.container.assembler.AccessTypeFieldDef.bind(AccessTypeFieldDef.java:50)
> > at org.seasar.framework.container.assembler.AccessTypeFieldDef.bind(AccessTypeFieldDef.java:42)
> > at org.seasar.framework.container.assembler.AutoPropertyAssembler.assemble(AutoPropertyAssembler.java:56)
> > at org.seasar.framework.container.deployer.RequestComponentDeployer.deploy(RequestComponentDeployer.java:67)
> > at org.seasar.framework.container.impl.ComponentDefImpl.getComponent(ComponentDefImpl.java:111)
> > at org.seasar.struts.config.S2ActionMapping.getActionForm(S2ActionMapping.java:329)
> > at org.seasar.struts.action.ActionFormWrapper.<init>(ActionFormWrapper.java:62)
> > at org.seasar.struts.action.ActionFormWrapperClass.newInstance(ActionFormWrapperClass.java:82)
> > at org.seasar.struts.config.S2FormBeanConfig.createActionForm(S2FormBeanConfig.java:44)
> > at org.seasar.struts.action.S2RequestProcessor.processActionForm(S2RequestProcessor.java:211)
> > at org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:103)
> > at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
> > at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
> > at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
> > at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> > at org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
> > at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> > at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
> > at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> > at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:71)
> > at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> > at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
> > at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
> > at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
> > at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
> > at org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
> > at org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:90)
> > at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> > at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
> > at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> > at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:71)
> > at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> > at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
> > at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> > at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> > at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
> > at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
> > at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
> > at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
> > at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> > at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
> > at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> > at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
> > at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:317)
> > at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:204)
> > at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:182)
> > at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> > at java.lang.Thread.run(Thread.java:662)
> > Caused by: java.lang.IllegalArgumentException: Can not set
> > XXX.dto.UserDataDto field XXX.action.MenuAction.userDataDto to
> > org.seasar.framework.container.hotdeploy.HotdeployHttpSession$SerializedObjectHolder
> > at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
> > at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
> > at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:63)
> > at java.lang.reflect.Field.set(Field.java:657)
> > at org.seasar.framework.util.FieldUtil.set(FieldUtil.java:162)
> > ... 62 more
> >
> > -------ここまで-------
> >
> >
> > なお、ログ中に出現するXXX.action.MenuActionの内容は以下です。
> >
> > -------ここから-------
> >
> > package XXX.action;
> >
> > import javax.annotation.Resource;
> >
> > import org.seasar.struts.annotation.Execute;
> >
> > import XXX.dto.UserDataDto;
> >
> > public class MenuAction {
> >
> > @Resource
> > protected UserDataDto userDataDto;
> >
> > @Execute(validator = false)
> > public String index() {
> > return "index.jsp";
> > }
> >
> > }
> >
> > -------ここまで-------
> >
> >
> > また、XXX.dto.UserDataDtoの内容は以下です。
> >
> >
> > -------ここから-------
> >
> > package XXX.dto;
> >
> > import java.io.Serializable;
> > import java.util.Map;
> >
> > import org.seasar.framework.container.annotation.tiger.Component;
> > import org.seasar.framework.container.annotation.tiger.InstanceType;
> > import org.seasar.struts.annotation.Required;
> >
> > @Component(instance = InstanceType.SESSION)
> > public class UserDataDto implements Serializable {
> >
> > private static final long serialVersionUID = -9187941560246753019L;
> >
> > @Required
> > public String userId;
> >
> > @Required
> > public Map<String, Object> userInfo;
> >
> >
> > }
> >
> > -------ここまで-------
> >
> >
> > そもそも最初に調査していた例外もSIllegalArgumentExceptionだったので何か関連があるかもしれません…。
> > _______________________________________________
> > 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
--
{
name: "Koichi Kobayashi",
mail: "[E-MAIL ADDRESS DELETED]",
blog: "http://d.hatena.ne.jp/koichik/",
twitter: "@koichik"
}
Seasar-user メーリングリストの案内