`
talentkep
  • 浏览: 100465 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

jboss classloader机制以及scope配置

    博客分类:
阅读更多

1.  概念介绍

UCL : org.jboss.mx.loading.UnifiedClassLoader3 ,它继承标准的java.net.URLClassLoader,覆盖了标准parent delegation模型以使用共享class和资源仓库

 

仓库(responsitory): org.jboss.mx.loading.UnifiedLoaderRepository3。

 

平面模型 :为了热deploy模块的需要,JBoss实现了自己的类装载器UnifiedClassLoader3,一般来说,一个顶层的deployment就有一个UnifiedClassLoader3实例为之工作。一个deployment所装载的类,其他 deployment是可见的。全局唯一的UnifiedLoaderRepository3实例用于管理这 些类,以及装载它们的UnifiedClassLoader3。UnifiedLoaderRepository3 实例和UnifiedClassLoader3实例是一对多的关系。

2. jboss classloader机制
   

< mbean  code ="org.jboss.management.j2ee.LocalJBossServerDomain"
      name
="jboss.management.local:j2eeType=J2EEDomain,name=Manager" >
      
< attribute  name ="MainDeployer" > jboss.system:service=MainDeployer </ attribute >
      
< attribute  name ="SARDeployer" > jboss.system:service=ServiceDeployer </ attribute >
      
< attribute  name ="EARDeployer" > jboss.j2ee:service=EARDeployer </ attribute >
      
< attribute  name ="EJBDeployer" > jboss.ejb:service=EJBDeployer </ attribute >
      
< attribute  name ="RARDeployer" > jboss.jca:service=RARDeployer </ attribute >
      
< attribute  name ="CMDeployer" > jboss.jca:service=ConnectionFactoryDeployer </ attribute >
      
< attribute  name ="WARDeployer" > jboss.web:service=WebServer </ attribute >
      
< attribute  name ="CARDeployer" > jboss.j2ee:service=ClientDeployer </ attribute >
      
< attribute  name ="MailService" > jboss:service=Mail </ attribute >
      
< attribute  name ="JMSService" > jboss.mq:service=DestinationManager </ attribute >
      
< attribute  name ="JNDIService" > jboss:service=Naming </ attribute >
      
< attribute  name ="JTAService" > jboss:service=TransactionManager </ attribute >
      
< attribute  name ="UserTransactionService" > jboss:service=ClientUserTransaction </ attribute >
      
< attribute  name ="RMI_IIOPService" > jboss:service=CorbaORB </ attribute >
   
</ mbean >


   首先看一下各种类型的deployer。不同的deployer是根据文件的后缀进行区分。MainDeployer起到一个controller的作用,根据不用的后缀分发到不同的deployer进行处理。如果是*.ear,则会由EARDeployer进行载入。
应用的加载时一个 Top Level Deployer + Top Level Ucl。 举个例子,比如发布一个a.ear应用,ear应用中会包含一个*.war。这时候就会涉及deployer选择问题。jboss采取的原则就是按Top Level,根据最顶层的应用选择deployer,继而也有了top level ucl的概念。由顶级的ucl来加载整个应用。这里需要注意的是war的部署有点特别。它只是将自身添加到ucl的classpath域中,而war下的WEB-INF/lib/*.jar,则是由WebAppClassloader来加载。可调整ear下的 META-INF/jboss-service.xml中的UseJbossWebLoader属性。如果设置为true,故名思义就是用ucl来加载war下的jar包。否则就是采用独立的classloader加载。
   再看一下ucl的加载过程,首先会调用仓库去loadclass,仓库在查找无果的情况下会回调各自的UCL去加载本地库。


3. jboss scope配置

ClassLoadingConfiguration 一书中描述:

There are two levels of scoping, isolation from other deployments, and isolation that overrides the loading of JBoss server classes. With nested modules, only the top level file may specify class loader scoping. If you have a .ear file containing other modules, only scoping specified in the .ear 's META-INF/jboss-app.xml is used. This also applies for any other deployment which contains sub-deployments. For example, if a .sar contains a .war deployment, only the .sar META-INF/jboss-service.xml scoping has effect.

 

   意思是说,scope配置只能是顶级下的配置,比如一个.sar中包含.war都配置了scope,只有.sar下的 META-INF/jboos-service.xml才有效。这也与前面 TOP level UCL + TOP Devloper相对应。
    

    针对.sar,你可以在jboss-service.xml中,添加如下配置:

< server >   
    
< loader-repository >  com.example:loader=unique-archive-name  </ loader-repository >   
</ server >


        
    针对.ear ,你可以在jboss-app.xml添加如下配置:

    
< jboss-app >   
  
< loader-repository > com.example:loader=unique-archive-name </ loader-repository >   
</ jboss-app >

    
    针对 .war,你可以在jboss-web.xml添加如下配置:

    
< jboss-web >
< class-loading  java2ClassLoadingCompliance ='true'>  
       
<loader-repository >     
             com.example:loader=unique-archive-name  
             
< loader-repository-config >   
                 java2ParentDelegaton=true  
             
</ loader-repository-config >   
      
</ loader-repository >     
 
</ class-loading >
</ jboss-web >

   
   注意,在最新的4.2.1版本中,<class-loading>标签已经不再使用,你可以直接配置:

< jboss-web >     
    
< loader-repository >  com.example:loader=unique-archive-name  </ loader-repository >     
</ jboss-web >


    针对这两种方式的配置,4.0.5版本都支持。  
      
    针对典型的ear+war应用,*.ear/META-INF/jboos-service.xml,用于调整war的加载方式。

 
<!--  Get the flag indicating if the normal Java2 parent first class   
           loading model should be used over the servlet 2.3 web container first   
           model.   
      
-->   
      
< attribute  name ="Java2ClassLoadingCompliance" > false </ attribute >   
      
<!--  A flag indicating if the JBoss Loader should be used. This loader   
           uses a unified class loader as the class loader rather than the tomcat   
           specific class loader.   
           The default is false to ensure that wars have isolated class loading   
           for duplicate jars and jsp files.   
      
-->   
      
< attribute  name ="UseJBossWebLoader" > false </ attribute >   

    配置java2ClassLoadingCompliance为true,则表明是选择parent first。典型的classloader的双亲委托模型,否则是采用child first,先从自身加载,找不到再相父类请求。
    配置UseJBossWebLoader为false,则webapp的加载通过独立于jboss的classloader进行加载。

分享到:
评论

相关推荐

    jboss 5 原理 2 classloader

    随着OSGi(Open Services Gateway Initiative)风格的类加载机制逐渐流行,以及新的Java模块和类加载规范的出现,JBoss对自身的类加载层进行了重构,以适应这些新的需求。在JBoss Microcontainer中,类加载层扮演着...

    jboss配置入门,jboss的初级配置

    jboss配置入门 jboss系统是一种基于Java的应用服务器,具有高性能、可扩展、安全性强等特点。在本文中,我们将对jboss的基本配置进行介绍,包括其文件夹结构、配置文件、负载均衡配置等。 jboss文件夹结构 jboss的...

    MyEclipse中配置JBoss

    【标题】:“MyEclipse中配置JBoss” 在IT行业中,MyEclipse是一款深受开发者喜爱的集成开发环境(IDE),尤其对于Java EE项目开发来说,它提供了强大的支持。而JBoss则是一个开源的应用服务器,广泛用于部署和管理...

    jboss热部署配置

    JBoss是一款著名的开源Java应用...总之,JBoss的热部署配置涉及修改配置文件、选择合适的部署目录和类加载器策略,以及可能使用辅助工具。正确配置后,开发者可以高效地测试和调试应用程序,而不必频繁地重启服务器。

    JBoss篇:安装与配置

    JBoss篇:安装与配置 一、安装与配置 在本文中,我们将下载和安装 JBoss 4.2.1.GA 版本。下载地址为 http://sourceforge.net/project/showfiles.php?group_id=22866&package_id=16942&release_id=523619。下载完成...

    jboss服务器的详细配置

    JBoss 服务器是一款...以上就是关于JBoss服务器配置的详细说明,包括设置JMX控制台的身份验证、启动和关闭服务器的步骤,以及如何更改数据库连接和端口设置。理解并掌握这些配置对于管理和维护JBoss服务器至关重要。

    JBoss在MyEclipse中的配置及说明

    本文将深入探讨如何在MyEclipse中配置JBoss服务器,以及相关参数的含义。 首先,配置JBoss服务器在MyEclipse中的步骤如下: 1. **安装JBoss**:确保已下载并安装了JBoss服务器。将其解压到合适的目录,例如`C:\...

    [JBoss] JBoss AS 7 配置部署管理教程 (英文版)

    [Packt Publishing] JBoss AS 7 配置部署管理教程 (英文版) [Packt Publishing] JBoss AS 7 Configuration, Deployment and Administration (E-Book) ☆ 出版信息:☆ [作者信息] Francesco Marchioni [出版机构...

    Jboss安装配置手册

    Jboss 安装配置指南 本指南旨在指导用户安装和配置 Jboss 中间件,包括数据库产品的安装、初始化数据库、Jboss 中间件的安装和配置服务。以下是详细的安装和配置步骤: 一、数据库产品的安装 在安装 Jboss 之前,...

    Apache+Jboss(Tomcat)集群配置

    Apache+Jboss(Tomcat)集群配置是一种常见的高可用性和负载均衡解决方案,它通过在前端部署Apache服务器,中间层配置多个Jboss或Tomcat应用服务器,后端连接统一的数据库来实现系统的扩展性和稳定性。以下是配置这个...

    Jboss配置虚拟路径

    ### JBoss配置虚拟路径详解 在企业级应用服务器领域,JBoss AS(Application Server)作为一款开源的Java应用服务器,提供了强大的平台支持多种Java EE应用的部署与运行。虚拟路径的配置是JBoss中一项非常实用的...

    jboss7ejb配置文件

    在JBoss 7及以上版本中,对EJB的配置过程相较于之前的版本有所变化,主要涉及到两个关键的配置文件:`jboss-ejb3.xml`和`ejb-jar.xml`。 `ejb-jar.xml`文件是EJB模块的标准配置文件,遵循Java EE规范。在这个文件中...

    jboss快速配置,简单配置使用

    本文将详细介绍如何进行JBoss的基本配置,包括控制台登录窗口的设置、连接数据库以及端口的调整等内容。 #### 一、控制台登录窗口设置 在JBoss中,默认提供了一个管理控制台——`jmx-console`,用于远程管理和监控...

    JBOSS log4j 配置

    JBOSS log4j 配置 Log4j 是一个功能强大且灵活的日志记录工具,广泛应用于 Java 项目中。然而,在 JBOSS 服务器中使用 Log4j 时,可能会遇到一些冲突和配置问题。本文将详细介绍如何解决 JBOSS 和 Log4j 的冲突,...

    Jboss eap 6.1.0 应用平台配置管理文档

    该文档还会详细说明如何通过调整JBoss EAP 6.1的配置来提升应用性能,包括但不限于JVM参数设置、数据库连接池优化、以及服务器级别的性能调优。 ### 知识点七:故障排除 在企业应用运行过程中,故障排除是不可避免...

    jboss配置MySql的JNDI

    在IT领域,特别是Java应用服务器环境下,JBoss与MySQL数据库的集成是常见需求之一,而JNDI(Java Naming and ...这一过程不仅加深了对JBoss配置机制的理解,也为构建高可用、高性能的企业级应用奠定了坚实的基础。

    Jboss c3p0数据库配置加密jar包

    jboss下c3p0数据库配置加密,解密,只需引入jar包即可实现配置文件的加密解密。web程序lib目录和jboss下lib目录都要引入封装的jar包,将旧的jar包替换

Global site tag (gtag.js) - Google Analytics