JBoss4.0类隔离

原文:http://tiger888.javaeye.com/blog/572875

 

这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔离机 制。

 

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

  • 部署包之间的隔离
  • 覆盖JBoss Server的类的隔离

对于这两种隔离,通常是修改部署文件来进行,以下进行说明:

 

 

部署包之间的隔离机制

  • 对于.ear部署包,我们应该修改jboss-app.xml如下:

    Xml代码
  • <jboss-app>
       <loader-repository>
       com.example:archive=unique-archive-name
       </loader-repository>
    </jboss-app>
     
  • 对于.war部署包,在jboss-web.xml中定义如下:
    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两种方式都支持,直接修改为:
    Xml代码
    <jboss-web>
       <loader-repository>
          com.example:archive=unique-archive-name
       </loader-repository>
    </jboss-web>  
  • 在.sar部署包中,在jboss-service.xml定义如下:
    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:
    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:
    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:
    Xml代码
    <server>
     <loader-repository>
            com.example:archive=unique-archive-name
            <loader-repository-config>java2ParentDelegation=false</loader-repository-config>
     </loader-repository>
     ...  

 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将混合在一起,不区别顺序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值