我有一个 .war 应用程序模块,无需任何异常更改和服务器调整即可成功部署。但是,我无法将此应用程序部署到 GF 3.1.2:服务器抛出以下异常:
java.lang.Exception:java.lang.IllegalStateException:ContainerBase.addChild:开始:org.apache.catalina.LifecycleException:org.apache.catalina.LifecycleException:java.lang.NoSuchFieldError:theInstance
我做错了什么?有人给我建议吗?我是否应该执行任何其他设置才能成功部署 .war 模块?
预先非常感谢。
UPD
更精确的日志条目:
javax.xml.bind.JAXBException:无法实例化提供程序 com.sun.xml.bind.ContextFactory_1_0_1:javax.xml.bind.JAXBException
- 带有链接异常:
[java.lang.NoSuchFieldError:theInstance]
- 带有链接异常:
[javax.xml.bind.JAXBException
- 带有链接异常:
[java.lang.NoSuchFieldError: theInstance]]
听起来像是类加载器问题。 http://docs.oracle.com/cd/E26576_01/doc.312/e24930/class-loaders.htm
您需要在 GlassFish JAXB jar 之前使用 WEB-INF/lib JAXB jar。
或者更改您的应用程序以使用 GlassFish 3.1.2 捆绑的版本。
Servlet 规范规定 Web 应用程序在委托给父级之前应使用本地类加载器。我认为 GlassFish 默认情况下委托给 Web 应用程序的父类加载器。使用<class-loader delegate="false"/>
在 web.xml 或 glassfish-web.xml 中。
请注意,如果这不起作用,可能还有其他方法可以修改 GlassFish 中的类加载器。
此类问题在部署到许多应用程序服务器期间很常见。
在过去 5 年多的时间里,我每天都使用 GlassFish,并且经常看到这种情况。
最近在CloudBees上部署到JBoss时遇到了类似的问题,并相应地修改了部署描述符。
谷歌搜索“glassfish 更喜欢 web-inf/lib jars”。 https://stackoverflow.com/questions/6759633/how-do-i-deal-with-glassfish-included-libs-crashing-with-application-supplied-li
回复下面的 psed 评论EJB 接口必须驻留在 Web 模块和 EJB 模块共享的类路径层次结构中。如果 WEB-INF/lib 中有一个 EJB 接口 jar,并且 EJB 模块类路径中有另一个 EJB 接口 jar 副本,则在 Web 应用程序中注入/定位 EJB 时,您将收到 ClassCastException。我认为 WebServices 也有同样的问题。不过,通过 EAR 共享 EJB 接口 jar 应该可以解决此问题。请注意,可能还有其他我不知道的问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)