集智平台jboss5部署中类隔离问题

在做V5项目部署JBOSS时遇到了不少问题,其中启动jboss5时出现了个这个错误:

ERROR [JBossContextConfig] XML error parsing: context.xml  

org.jboss.xb.binding.JBossXBRuntimeException: Failed to create a new  SAX parser  at org.jboss.xb.binding.UnmarshallerFactory$UnmarshallerFactoryImpl.newUnmarshaller(UnmarshallerFactory.java:100)  

在网上找了下错误,普遍说的是删除项目的lib文件夹下面的三个文件:xml-apis.jar、xerces-2.4.0.jar、xercesImpl.jar即可。

可是在V5中,如果删除了这些jar包,会导致读取v5核心配置文件时出错,导致整体不能使用,所以这种方法不可行。

最终发现是由于JBOSS的类装载问题引起,可采用JBOSS的类隔离机制。

在部署应用到JBoss服务器时,通常见到的问题就是应用所带的jar包与容器自己的jar包版本不同导致的冲突,以及应用间jar包导致的冲突,JBOSS提供两隔离机制:部署包之间的隔离、覆盖JBoss Server的类的隔离

对于这种隔离机制,通常是修改部署文件来进行(针对ear war sar三种方式有不同的配置,这里只针对war包),以下进行说明:

对于.war部署包,在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>

 <class-loading java2ClassLoadingCompliance=”false”>

       <loader-repository>

           com.runqian:archive=fastreport.war

           <loader-repository-config>

            java2ParentDelegaton=false

           </loader-repository-config>

       </loader-repository>

  </class-loading>

  <context-root>/fastreport</context-root>

</jboss-web> 

示例中,com.runqian:archive=fastreport.war代表jar仓库的对象名,其中,com.runqian可以随意取,fastreport.war就用部署包的名字即可,保证这一串唯一即可。

 

这样,不删除jar包得情况下,再次启动jboss5,则正常启动解决了该问题

本文标签: