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

开发 后端
部署JBoss的常见问题之一就是其类装载问题。本文对JBoss的两种类隔离机制进行了详细的介绍,这两种隔离机制分别是部署包之间的隔离,以及覆盖JBoss Server的类隔离。

本文来自tiger888的博客,原文标题为《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>    
  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

对于.war部署包,在jboss-web.xml中定义如下:

<jboss-web>    
   <class-loading>     
      <loader-repository>     
      com.example:archive=unique-archive-name     
      </loader-repository>     
   </class-loading>    
</jboss-web>     
  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

在JBoss 4.2.1中<class-loading>不再被支持,而4.0.5两种方式都支持,直接修改为:

<jboss-web>    
   <loader-repository>     
      com.example:archive=unique-archive-name     
   </loader-repository>     
</jboss-web>     
  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

在.sar部署包中,在jboss-service.xml定义如下:

<server>    
     <loader-repository>    
          com.example:archive=unique-archive-name     
     </loader-repository>    
</server>    
  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

示例中,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>    
  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

对于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>    
...    
   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

jboss-service.xml:

<server>    
 <loader-repository>    
        com.example:archive=unique-archive-name    
        <loader-repository-config>java2ParentDelegation=false</loader-repository-config>    
 </loader-repository>    
 ...    
  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

#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将混合在一起,不区别顺序。

责任编辑:yangsai 来源: JavaEye博客
相关推荐

2010-09-29 09:59:22

J2ME配置

2010-07-13 15:39:23

SQL Server

2009-11-23 18:16:03

PHP时间

2010-04-29 13:12:18

Oracle合并函数

2009-06-18 15:15:35

JBoss的配置

2010-05-04 10:56:18

jboss负载均衡

2018-03-23 10:51:21

云测试云计算性能测试

2010-01-05 17:23:51

JSON建构

2009-06-15 12:59:09

JBoss配置

2010-03-18 14:02:37

Python空对象整理

2009-06-25 13:43:00

Buffalo AJA

2010-06-07 17:41:42

Sendmail 配置

2010-01-06 16:53:57

JS两种语法

2020-09-16 18:27:36

Linux方法IP地址

2014-01-07 14:29:14

HadoopYARN

2009-06-12 14:12:18

JBoss配置MyEclipse

2010-08-02 16:58:08

Flex配置文件

2009-06-02 14:12:26

Hibernate配置文件格式

2022-02-28 07:40:23

Nacos注册中心客户端

2020-01-06 14:54:31

RDBAOFRedis
点赞
收藏

51CTO技术栈公众号