日期:2014-05-17  浏览次数:20766 次

jboss-eap-5.1下部署应用时Jar包冲突的解决方案
     最近负责了几个项目,应公司运维部的要求,需要把jboss4.0.5GA升级到jboss-eap-5.1,在升级过程中也出现了一些波折,主要问题就是Jar包冲突的问题,我们都知道jboss-eap-5.1以后的版本集成了很多开发的而且我们平时又需要用到的Jar包,在做项目时项目中已有了这些包,部署后应用就启不启来,报各种Jar包冲突错误, 解决这类错误的方法是改变jboss-eap-5.1的Jar包加载顺序,在加载应用时,先加载应用中lib下的Jar,解决方法是在WEB-INF目录下新建jboss-web.xml文件,文件内容如下:
   <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN"
     "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">
<jboss-web>     
<!-- For load class independently  用来配置JBoss的class loader,避免class加载冲突 -->
<class-loading java2ClassLoadingCompliance='true'>
<loader-repository>com.example:archive=test.war
<loader-repository-config>java2ParentDelegaton=true</loader-repository-config>
</loader-repository>
</class-loading>
</jboss-web>

     在项目中加入jboss-web.xml后可以解决99%的Jar冲突,但有一种例外,那就是项目中使用了CXF WebService,虽然在项目启动时不会报错,但在实际调用WebService时会报以下错误:
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: java.lang.RuntimeException: Cannot create a secure XMLInputFactory
     如果开发员对jboss-eap-5.1各种参数都很了解的话,解决起来也不是难事,不熟就有点麻烦,呵呵,我就是不熟的那种,花了两三天,找了各种资料最后在一位运维的同事帮助下才解决这个问题,其实也很简单,只要修改一下jboss的启动参数就可以了,方法如下:
打开%JBOSS_HOME%lib/run.conf文件,在JAVA_OPTS的值的参数后面追加上“ -Dorg.apache.cxf.stax.allowInsecureParser=true”便可解决这个问题。

这两个小方法可以帮助到其他同行。
------解决方案--------------------
 谢谢楼主总结分享