疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

JBoss的两种类隔离机制配置说明


 

 这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔离机制。
   
    在部署应用到JBoss服务器时,通常见到的问题就是应用所带的jar包与容器自己的jar包版本不同导致的冲突,以及应用间jar包导致的冲突,JBOSS提供两种隔离机制:
   
    1. 部署包之间的隔离
   
    2. 覆盖JBoss Server的类的隔离
   
    对于这两种隔离,通常是修改部署文件来进行,以下进行说明:
   
    部署包之间的隔离机制
   
    对于。ear部署包,我们应该修改jboss-app.xml如下:
   
    <jboss-app>
   
    <loader-repository>
   
    com.example:archive=unique-archive-name
   
    </loader-repository>
   
    </jboss-app>
   
    对于。war部署包,在jboss-web.xml中定义如下:
   
    <jboss-web>
   
    <class-loading>
   
    <loader-repository>
   
    com.example:archive=unique-archive-name
   
    </loader-repository>
   
    </class-loading>
   
    </jboss-web>
   
    在JBoss 4.2.1中<class-loading>不再被支持,而4.0.5两种方式都支持,直接修改为:
   
    <jboss-web>
   
    <loader-repository>
   
    com.example:archive=unique-archive-name
   
    </loader-repository>
   
    </jboss-web>
   
    在。sar部署包中,在jboss-service.xml定义如下:
   
    <server>
   
    <loader-repository>
   
    com.example:archive=unique-archive-name
   
    </loader-repository>
   
    </server>
   
    示例中,com.example:archive=unique-archive-name代表jar仓库的对象名objectName ,其中,com.example可以随意取,unique-archive-name 就用部署包的名字即可,例如com.example:archive=helloworld.sar,保证这一串唯一即可。而com.example将出现在JMX-Console 列出的节点上(每个节点为一个LoaderRepository domain:jar参考的域概念,其实就是一个所有jar容器仓库的分组概念)
   
    对于部署包内内嵌了其他部署包,只有最上层的部署描述配置才起作用,例如:
   
    .ear中包含了。sar和。war,这只有。ear中的META-INF/jboss-app.xml 中定义的隔离范围才会起作用。
   
    .sar中包含了。war,则只有。sar META-INF/jboss-service.xml中定义的隔离范围才起作用
   
    覆盖JBoss Server的类的隔离
   
    对于jboss-app.xml:
   
    <jboss-app>
   
    <loader-repository>
   
    com.example:archive=unique-archive-name
   
    <loader-repository-config>
   
    java2ParentDelegation=false
   
    </loader-repository-config>
   
    </loader-repository>
   
    </jboss-app>
   
    对于jboss-web.xml:
   
    <jboss-web>
   
    <class-loading java2ClassLoadingCompliance="false">
   
    <loader-repository>
   
    com.example:archive=unique-archive-name
   
    <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
   
    </loader-repository>
   
    </class-loading>
   
    …
   
    jboss-service.xml:
   
    <server>
   
    <loader-repository>
   
    com.example:archive=unique-archive-name
   
    <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
   
    </loader-repository>
   
    …
   
    浅谈如何将EJB部署在Jboss下
   
    Apache HTTPServer与Tomcat/JBoss的配置
   
    红帽升级JBoss 意在Java中间件云平台
   
    运行多个JBoss在同一台机器的配置方法介
   
    Java平台的企业级Ruby解决方案:JBoss的T
   
    EAR or WAR的类将按照以下顺序装载:
   
    1. WEB-INF/lib (for WARs)
   
    2. server/default/lib下的jar包
   
    3. tomcat的jar包server/default/deploy/jbossweb-tomcatxxx.sar,与server/default/lib将混合在一起,不区别顺序。