`

JBoss类隔离

阅读更多

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

 

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

  • 部署包之间的隔离
  • 覆盖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>
     ...
    
     

 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
分享到:
评论

相关推荐

    jboss7.1 linux版本

    每个模块都有独立的类加载器,提高了应用的隔离性和安全性。 2. **内存启动**:与之前的版本相比,7.1.0.Final大大缩短了启动时间,这得益于其内存中的部署模型。应用直接部署到运行时的内存中,显著提升了启动和...

    jboss 5 原理 2 classloader

    例如,通过VFS,开发者可以方便地控制类库的加载路径,实现热部署,或者隔离不同应用程序的类空间,防止类版本冲突。 此外,Microcontainer的类加载层也支持OSGi的类加载概念,如束(Bundle)和上下文(Context),...

    Linux下安装jboss

    这不仅有助于增强系统的安全性,还能确保JBoss运行所需的资源被正确地隔离和管理。 通过执行`groupadd jbossdba`命令,我们首先创建了一个名为“jbossdba”的用户组,这是为了将与JBoss相关的所有用户归类到同一个...

    JBOSS开发人员指南

    理解ACID(原子性、一致性、隔离性和持久性)原则是开发分布式事务应用的基础。JBoss支持JTA(Java Transaction API)来管理和协调跨系统事务。 5.2 配置与使用 开发者需要了解如何在JBoss中配置事务管理器,并在...

    The JBoss 4 Application Server Guide

    - **类加载器架构**:讨论了 JBoss 中的类加载器是如何工作的,以及这种架构对于确保不同组件之间隔离的重要性。 - **安全管理**:介绍了如何安全地配置和使用 JMX 控制台。 - **热部署**:详细说明了如何在不重启...

    jboss jar包snowdrop-vfs.jar和jboss-logging.jar

    3. 如果遇到特定的类加载问题,可以尝试调整JBoss的类加载策略,例如设置类加载优先级或隔离模块。 4. 对于日志系统,可以配置jboss-logging.jar以满足项目需求,例如指定日志输出级别、文件位置等。 5. 使用合适的...

    Jboss5源代码-官方-第二部分

    JBoss5使用复杂的类加载机制,确保不同部署的应用之间的类隔离。源代码中可以看到类加载器的层次结构,以及如何根据部署配置动态加载类。 10. **配置管理** JBoss5允许通过XML或属性文件进行配置。源代码揭示了...

    JBOSS-7.0.2-Final包

    这一架构的核心是Class Loading机制的改进,它能够更好地隔离不同模块之间的依赖,减少类冲突的可能性。 描述中提到的"JBOSS7.2包"可能是指JBOSS AS 7.2(Application Server)的一个版本,不过实际提供的文件名为...

    jboss modules 1

    2. **模块加载**:JBoss Modules根据模块定义加载类和资源,确保每个模块有自己的类加载器,避免了传统Java类加载器可能导致的类冲突问题。 3. **依赖管理**:通过显式声明模块间的依赖关系,可以确保正确加载和解析...

    jboss7.0源码及依赖包

    1. **类加载器**:JBoss 7.0的类加载器架构是模块化的核心部分,它负责加载和隔离不同模块之间的类,确保了正确地处理依赖关系。 2. **部署结构**:JBoss 7.0支持多种部署方式,如WAR、EAR和JAR,以及目录结构部署。...

    jboss3 快速入门

    ### jBoss 3.0快速入门指南核心知识点详解 #### 一、引言 jBoss 3.0是一款开源的应用服务器,它支持Java EE规范,为开发者提供了强大的企业级应用开发平台。本指南旨在帮助初学者快速掌握jBoss 3.0的基础知识,并...

    JBoss 引用 module 说明

    模块化的好处在于它可以隔离命名空间,避免类冲突,同时通过声明依赖,确保正确加载所需类库,提高系统性能。JBoss的模块系统使用了严格控制的类加载器策略,确保模块之间的依赖关系得到正确处理。 在JBoss中引用...

    JBoss 3.0 Quick Start Guide

    ### JBoss 3.0 快速入门指南 #### 概述 《JBoss 3.0 快速入门指南》是一本专为希望快速掌握 JBoss 3.0 应用服务器安装、配置及基本使用的开发人员编写的实用手册。本书由 JBoss Group 的成员 Andreas Schaefer ...

    java.lang.NoClassDefFoundError: org/jboss/logging/

    5. **类加载器问题**:在EJB或服务器环境中,类加载器可能因容器的隔离机制而出现问题。确认类加载器的配置是否正确,特别是在多模块项目中。 6. **服务器配置**:如果是运行在JBoss、WildFly等应用服务器上,确保...

    jboss资料大全,内容丰富,搜之不易

    理解事务的ACID属性和事务隔离级别有助于设计健壮的应用。 7. **性能优化**:JBoss可以通过调整内存配置、线程池大小、缓存策略等参数来提高性能。监控工具如JConsole、VisualVM可以帮助分析和调优。 8. **故障...

    jboss原理-3(vfs).docx

    在类加载(Classloading)上下文中,VFS使得在不同模块和部署之间隔离类变得更加简单。类加载是Java应用程序中至关重要的部分,因为它决定了哪些类能被加载,以及如何加载。在JBoss中,每个部署都有自己的类加载器,...

    JBoss管理与开发

    在新架构中,每个部署单元都有自己的类装载器,这样可以确保部署单元之间的隔离性。同时,通过适当的配置,可以实现类的共享,从而提高了资源利用率。 #### 三、类装载与Java中的类型安全 在深入探讨类装载器架构...

    jboss服务器配置指南

    - JBoss模块系统:理解模块化概念,有助于管理和隔离应用依赖,提升部署效率。 10. **微服务与云原生** - 微服务架构:在JBoss上实现微服务,可以利用Spring Boot、WildFly Swarm等技术。 - Kubernetes集成:将...

    jboss7 + EJB3

    EJB3支持声明式事务管理,开发者可以通过`@TransactionAttribute`注解来指定事务的传播行为和隔离级别。 7. **安全性** JBOSS7集成了JAAS(Java Authentication and Authorization Service),允许开发者通过`@...

Global site tag (gtag.js) - Google Analytics