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

日期: 2010-06-28 作者:tiger888 来源:TechTarget中国 英文

   这几天,项目组在部署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 (http://localhost:8080/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>     …  
   

    1. WEB-INF/lib (for WARs)

  2. server/default/lib下的jar包

  3. tomcat的jar包server/default/deploy/jbossweb-tomcatxxx.sar,与server/default/lib将混合在一起,不区别顺序。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

tiger888
tiger888

相关推荐

  • 为什么开源企业的开源大旗正在褪色

    最近这几年,开源一直是人们比较关注的话题,不过现在也该到冷静下来进行思考的时候了,真正的开源公司已经利用开源赚得盆满钵盈。

  • 优化Jboss EAP平台的12项最佳实践

    在过去几年里,NBC环球电影公司的Web架构团队牺牲了可观的时间和资源去改善其高度分布的企业架构。Richir Choudhry、Alpesh Vaghela……

  • 开源PaaS技术手册

    开源业界向来不太平,关于诸多技术的开源未来足以让很多粉丝兴奋躁动起来。商业软件开始揉进开源技术,开源技术也成为IT大佬们得基础架构,这一种趋势蔓延的缓慢有有力。在广告漫天飞得云计算中,开源的分量有多重?是否走向云端就意味着走向开源?开源的PaaS如何选择?如何为开源项目选择PaaS厂商?哪些服务平台值得我们关注,下面我们一一来揭晓。

  • 你的Java开发工具包有没有MVEL?

    MVEL最初是Mike Brock的Valhalla项目的表达计算器。Valhalla本身是一个早期的Seam,就像为自动化“out of the box”web应用而生的框架,虽然Valhalla现在是休眠状态……