这几天,项目组在部署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的类将按照以下顺序装载:
-
WEB-INF/lib (for WARs)
-
server/default/lib下的jar包
-
tomcat的jar包server/default/deploy/jbossweb-tomcatxxx.sar,与server/default/lib将混合在一起,不区别顺序。
分享到:
相关推荐
每个模块都有独立的类加载器,提高了应用的隔离性和安全性。 2. **内存启动**:与之前的版本相比,7.1.0.Final大大缩短了启动时间,这得益于其内存中的部署模型。应用直接部署到运行时的内存中,显著提升了启动和...
例如,通过VFS,开发者可以方便地控制类库的加载路径,实现热部署,或者隔离不同应用程序的类空间,防止类版本冲突。 此外,Microcontainer的类加载层也支持OSGi的类加载概念,如束(Bundle)和上下文(Context),...
这不仅有助于增强系统的安全性,还能确保JBoss运行所需的资源被正确地隔离和管理。 通过执行`groupadd jbossdba`命令,我们首先创建了一个名为“jbossdba”的用户组,这是为了将与JBoss相关的所有用户归类到同一个...
理解ACID(原子性、一致性、隔离性和持久性)原则是开发分布式事务应用的基础。JBoss支持JTA(Java Transaction API)来管理和协调跨系统事务。 5.2 配置与使用 开发者需要了解如何在JBoss中配置事务管理器,并在...
- **类加载器架构**:讨论了 JBoss 中的类加载器是如何工作的,以及这种架构对于确保不同组件之间隔离的重要性。 - **安全管理**:介绍了如何安全地配置和使用 JMX 控制台。 - **热部署**:详细说明了如何在不重启...
3. 如果遇到特定的类加载问题,可以尝试调整JBoss的类加载策略,例如设置类加载优先级或隔离模块。 4. 对于日志系统,可以配置jboss-logging.jar以满足项目需求,例如指定日志输出级别、文件位置等。 5. 使用合适的...
JBoss5使用复杂的类加载机制,确保不同部署的应用之间的类隔离。源代码中可以看到类加载器的层次结构,以及如何根据部署配置动态加载类。 10. **配置管理** JBoss5允许通过XML或属性文件进行配置。源代码揭示了...
这一架构的核心是Class Loading机制的改进,它能够更好地隔离不同模块之间的依赖,减少类冲突的可能性。 描述中提到的"JBOSS7.2包"可能是指JBOSS AS 7.2(Application Server)的一个版本,不过实际提供的文件名为...
2. **模块加载**:JBoss Modules根据模块定义加载类和资源,确保每个模块有自己的类加载器,避免了传统Java类加载器可能导致的类冲突问题。 3. **依赖管理**:通过显式声明模块间的依赖关系,可以确保正确加载和解析...
1. **类加载器**:JBoss 7.0的类加载器架构是模块化的核心部分,它负责加载和隔离不同模块之间的类,确保了正确地处理依赖关系。 2. **部署结构**:JBoss 7.0支持多种部署方式,如WAR、EAR和JAR,以及目录结构部署。...
### jBoss 3.0快速入门指南核心知识点详解 #### 一、引言 jBoss 3.0是一款开源的应用服务器,它支持Java EE规范,为开发者提供了强大的企业级应用开发平台。本指南旨在帮助初学者快速掌握jBoss 3.0的基础知识,并...
模块化的好处在于它可以隔离命名空间,避免类冲突,同时通过声明依赖,确保正确加载所需类库,提高系统性能。JBoss的模块系统使用了严格控制的类加载器策略,确保模块之间的依赖关系得到正确处理。 在JBoss中引用...
### JBoss 3.0 快速入门指南 #### 概述 《JBoss 3.0 快速入门指南》是一本专为希望快速掌握 JBoss 3.0 应用服务器安装、配置及基本使用的开发人员编写的实用手册。本书由 JBoss Group 的成员 Andreas Schaefer ...
5. **类加载器问题**:在EJB或服务器环境中,类加载器可能因容器的隔离机制而出现问题。确认类加载器的配置是否正确,特别是在多模块项目中。 6. **服务器配置**:如果是运行在JBoss、WildFly等应用服务器上,确保...
理解事务的ACID属性和事务隔离级别有助于设计健壮的应用。 7. **性能优化**:JBoss可以通过调整内存配置、线程池大小、缓存策略等参数来提高性能。监控工具如JConsole、VisualVM可以帮助分析和调优。 8. **故障...
在类加载(Classloading)上下文中,VFS使得在不同模块和部署之间隔离类变得更加简单。类加载是Java应用程序中至关重要的部分,因为它决定了哪些类能被加载,以及如何加载。在JBoss中,每个部署都有自己的类加载器,...
在新架构中,每个部署单元都有自己的类装载器,这样可以确保部署单元之间的隔离性。同时,通过适当的配置,可以实现类的共享,从而提高了资源利用率。 #### 三、类装载与Java中的类型安全 在深入探讨类装载器架构...
- JBoss模块系统:理解模块化概念,有助于管理和隔离应用依赖,提升部署效率。 10. **微服务与云原生** - 微服务架构:在JBoss上实现微服务,可以利用Spring Boot、WildFly Swarm等技术。 - Kubernetes集成:将...
- **EJB实体类**:虽然在示例中,实体EJB类(如CatalogBean.java)不需要修改,但在实际迁移过程中,可能需要根据WebLogic的规范调整EJB的行为,例如事务管理、异常处理等。 - **接口**:远程接口(如Catalog.java...