无法将.war应用程序部署到GlassFish 3.1.2
我有一个.war应用程序模块,可以成功部署,无需任何奇怪的更改和服务器调整。 但是,我无法将此应用程序部署到GF 3.1.2:服务器抛出以下exception:
java.lang.Exception:java.lang.IllegalStateException:ContainerBase.addChild:start: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 – 包含链接exception:[java.lang.NoSuchFieldError:theInstance]
– 链接exception:[javax.xml.bind.JAXBException – 带链接exception:[java.lang.NoSuchFieldError:theInstance]]
听起来像是类加载器问题。
您需要在GlassFish JAXB jar之前使用WEB-INF / lib JAXB jar。 或者更改您的应用程序以使用GlassFish 3.1.2捆绑的版本。
Servlet规范说Web应用程序在委托父代之前应该使用本地类加载器。 我认为GlassFish默认委托给Web应用程序的父类加载器。 在web.xml或glassfish-web.xml中使用
。
请注意,如果不起作用,可能还有其他方法可以修改GlassFish中的类加载器。
在部署到许多应用程序服务器期间,此类问题很常见。 我过去5年多来每天都使用GlassFish,并经常看到这一点。 最近在CloudBees上部署到JBoss时出现了类似的问题,并相应地修改了部署描述符。
谷歌搜索“glassfish更喜欢web-inf / libjar子”。
响应对于以下注释的注释, EJB接口必须驻留在Web模块和EJB模块共享的类路径层次结构中。 如果WEB-INF / lib中有EJB接口jar,EJB模块类路径上有EJB接口jar的另一个副本,则在Web应用程序中注入/定位EJB时会出现ClassCastException。 我认为WebServices有同样的问题。 但是,通过EAR共享EJB接口jar应该可以解决此问题。 请注意,我可能还有其他一些我不知道的问题
您不应该将JAXB jar与您的应用程序捆绑在一起 – Glassfish已经拥有它们,并且它似乎导致了冲突(顺便说一下,我最近一直在挖掘JAXB代码,并且theInstance
是MarshallerImpl
定义的静态类的一部分)
您应该将所有jar文件放入运行时服务器lib …
此指令适用于GlassFish 3.1.2问题是来自JAXB 2.2.5的运行时类不能向后编译JAXB 1代码。 这个问题已通过JAXB 2.2.6修复,但是,它不是最新的GlassFish版本。 因此,要么等到下一次GlassFish升级,要么手动执行。
我是这样做的,我从GlassFish模块中删除了2个捆绑文件
C:\glassfish3\glassfish\modules\jaxb-osgi.jar C:\glassfish3\glassfish\modules\endorsed\jaxb-api-osgi.jar
通过删除所有子文件夹来清除osgi-cache
C:\glassfish3\glassfish\domains\domain1\osgi-cache
从ORACLE JAXB下载JAXB 2.2.6
将zip文件解压缩到临时位置[C:\ Java \ jaxb-ri-2.2.6 \ jaxb-ri-2.2.6 \ osgi]
将C:\ Java \ jaxb-ri-2.2.6 \ jaxb-ri-2.2.6 \ osgi \ jaxb-osgi.jar复制到C:\ glassfish3 \ glassfish \ modules \
将C:\ Java \ jaxb-ri-2.2.6 \ jaxb-ri-2.2.6 \ osgi \ jaxb-api-osgi.jar复制到C:\ glassfish3 \ glassfish \ modules \ endorsed \
重启你的服务器…我希望这会有所帮助。 祝好运
- 如何检查字符串池内容?
- 无法执行maven-compiler-plugin:3.6.1:使用java 9时的testCompile
- Mac 10.8上的Eclipse – 安装了1.7.0 JRE / JDK,但Eclipse不会启动
- EJB – Home / Remote和LocalHome / Local接口
- 使用servlet 3.0添加动态servlet会引发exception
- URLClassLoader将Annotation加载为com.sun。$ Proxy $ 27
- Spring mvc @DateTimeFormat无法按预期工作
- ActiveMQ限制消费者
- Http客户端在java中发布xml文件