编辑:我进行了更改,因为我认为我的问题可能缺少一些技术细节
该问题出现在 Struts 1.3.x 中,描述如下:
当修改与 Struts 相关的类(例如 ActionForm、Action 和/或我与它们一起使用的任何类)时,我会在测试我的修改时得到 ClassCastException(无需重新启动我的 webapp)。
如果我在进行相同的修改后重新启动我的 web 应用程序,那么没有例外,并且在测试时所做的更改是可见的。
由于以下原因,这种行为被认为是正常的:
如果进行了更改,我的 Web 容器 (weblogic) 配置为重新加载 servlet 和类
我假设对我的类进行修改时使用了不同的 ClassLoader。这可能会导致 ClassCastException。
因此,每次我想测试我的源代码修改时,我都必须重新启动 webapp...
我想知道的是我该怎么做(编程模式?最佳实践?)以避免这种 ClassCastException 或避免重新启动 webapp 以查看我的更改?
这是堆栈跟踪:
java.lang.ClassCastException: my.package.here.MyActionClassNameHere
at org.apache.struts.chain.commands.servlet.CreateAction.getAction(CreateAction.java:65)
at org.apache.struts.chain.commands.AbstractCreateAction.execute(AbstractCreateAction.java:91)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1914)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:463)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
我看过关于页面的JRebel 。这可能是一个解决方案,但我还没有准备好将它用于我的目的(这是使用 struts 1.3.x 进行的一些非常简单的测试)。
我将继续做一些并行测试,以更多地了解这个异常......