`
一江春水邀明月
  • 浏览: 79031 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JBoss 中的ear 包中类加载顺序控制

 
阅读更多

 

最近几天研究Dozer的性能,需要改写Dozer 中的几个类但是又不打算重新编译Dozer的jar 包了, 所以偷懒在genidc-biz-service 工程的src 目录下创建在dozer jar 中相同名称的类包, 图中的"org.dozer", "org.dozer.cache", "org.dozer.converters", 拷贝dozer 源代码中的相关类过来, 然后在这里动手改。

 

 

 

发布的时候, 发现奇怪了, 程序还是在跑Dozer jar 包中的老代码, 我所新添加的代码都没跑到。 以前玩Tomcat的时候, 开源Jar 包下的类就这么干的, 工作好好的。 tomcat  的类文件优先加载级别是

 

 

Therefore, from the perspective of a web application, class or resource loading looks in the following repositories, in this order:

    Bootstrap classes of your JVM
    System class loader classes (described above)
    /WEB-INF/classes of your web application
    /WEB-INF/lib/*.jar of your web application
    Common class loader classes (described above)
 

所以web 工程编译出来的class 文件是比lib 包下的jar 文件中的class 文件优先加载的。  

恩,看来Jboss 下的类文件加载不是这么玩的。 咨询谷歌大神, 他告诉我需要以下步骤

1. 修改ear 下的jboss-application.xml, 做如下设置, 它的作用是告诉类加载器强制按照ear 包下的application.xml 中指定的jar 包顺序做加载。

<jboss-app>
  <module-order>strict</module-order>
</jboss-app> 
 

查看了我们的genidc-ear 工程, target 打出来的jboss-application.xml 已经是这样了,

2. 然后在application.xml 中设置加载顺序

<application xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" version="1.4">
  <display-name>genidc-ear</display-name>
  <module>
    <java>lib/genidc-common-service-3.1.jar</java>
  </module>
  <module>
    <java>lib/genidc-common-presentation-3.1.jar</java>
  </module>
  <module>
    <java>lib/genidc-biz-manager-3.1.jar</java>
  </module>
  <module>
    <java>lib/genidc-biz-model-3.1.jar</java>
  </module>
  <module>
    <java>lib/genidc-biz-service-3.1.jar</java>
  </module>
  <module>
    <java>lib/dozer-5.2.0.jar</java>
  </module>
  <module>
    <ejb>genidc-ejb3-3.1.jar</ejb>
  </module>
</application> 

 

 

这里,没有在这里指定的ear 中的其他jar 包, 默认的加载顺序是和这里的jar 包一起按照字母顺序加载, 如果不特别指定dozer加载顺序, 那么因为dozer jar 比genidc-biz-service-3.1.jar 字母序靠前, 所以dozer 中的MappingProcessor.class会先加载, 然后等到加载genidc-biz-service-3.1.jar 中的MappingProcessor.class, 类装载器认为已经加载过, 就跳过了加载。  所以这里只要强行指定这个dozer-5.2.0.jar  比genidc-biz-service-3.1.jar后加载就OK了。   把这个修改了的ear 包放Jboss里,跑起来对了。

3. 且慢, 光这样改还不行, 重新run 下maven, application.xml 又变回去了, 那么这些配置文件的生成肯定和Maven的脚本有关。查看genidc-ear 工程下的pom 有个maven-ear plugin 的配置, 原来, application.xml 中的jar 以及顺序都是它指定, 还有jboss-application.xml 中的module-order 也是这里指定的。 在这里加上dozer 的配置, OK, maven build 出来的application.xml 就是我们想要的了。

 

 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <displayName></displayName>
                    <description></description>
                    <version>1.4</version>
                    <defaultLibBundleDir>lib</defaultLibBundleDir>
                    <modules>
                        <jarModule>
                            <groupId>oasis.genidc</groupId>
                            <artifactId>genidc-utility</artifactId>
                            <includeInApplicationXml>false</includeInApplicationXml>
                        </jarModule>
                        <jarModule>
                            <groupId>oasis.genidc</groupId>
                            <artifactId>genidc-common-service</artifactId>
                            <includeInApplicationXml>true</includeInApplicationXml>
                        </jarModule>
                        <jarModule>
                            <groupId>oasis.genidc</groupId>
                            <artifactId>genidc-common-presentation</artifactId>
                            <includeInApplicationXml>true</includeInApplicationXml>
                        </jarModule>
                        <jarModule>
                            <groupId>oasis.genidc</groupId>
                            <artifactId>genidc-biz-manager</artifactId>
                            <includeInApplicationXml>true</includeInApplicationXml>
                        </jarModule>
                        <jarModule>
                            <groupId>oasis.genidc</groupId>
                            <artifactId>genidc-biz-model</artifactId>
                            <includeInApplicationXml>true</includeInApplicationXml>
                        </jarModule>
                        <jarModule>
                            <groupId>oasis.genidc</groupId>
                            <artifactId>genidc-biz-service</artifactId>
                            <includeInApplicationXml>true</includeInApplicationXml>
                        </jarModule>                  
                        <jarModule>
                            <groupId>net.sf.dozer</groupId>
                            <artifactId>dozer</artifactId>
                            <includeInApplicationXml>true</includeInApplicationXml>
                        </jarModule>
                        <ejbModule>
                            <groupId>oasis.genidc</groupId>
                            <artifactId>genidc-ejb3</artifactId>
                        </ejbModule>
                    </modules>
                        <jboss>
                            <version>4.2</version>
                            <module-order>strict</module-order>                       
                        </jboss>
                </configuration>
            </plugin> 
  • 大小: 50.7 KB
分享到:
评论

相关推荐

    MyEclipse中配置JBoss

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

    jboss 5 原理 2 classloader

    在JBoss Microcontainer中,类加载层扮演着至关重要的角色,它允许开发者更加灵活地管理和控制类的加载行为。 首先,让我们深入了解一下JBoss Microcontainer的类加载层。这个层的设计目的是提供一个可扩展且灵活的...

    JBOSS启动顺序、JBOSS占用的端口

    在运维过程中,了解JBoss的启动顺序以及其占用的端口对于调试、监控和优化系统性能至关重要。 **JBoss启动顺序** JBoss的启动过程大致分为以下几个阶段: 1. **环境准备**:首先,JBoss会检查运行环境,包括Java...

    解决jboss中启动的优先级的问题

    在JBoss应用服务器中,管理和控制应用的启动顺序是一个关键任务,特别是在大型的企业级系统中,各个组件和服务的启动优先级直接影响到整个系统的稳定性和功能完整性。标题提及的"解决jboss中启动的优先级的问题"是...

    JBoss JMX实现架构

    在动态环境中,如JBoss应用服务器,类加载器的行为更加复杂,可能会引发ClassCastException、LinkageError和IllegalAccessError等异常。 - ClassCastException:当尝试将一个对象强制转换为与其实际类型不兼容的...

    jboss 中文开发文档

    - **集成 EAR**:介绍了如何将所有组件整合到一个 EAR 文件中。 - **数据库**:提供了数据库配置的具体步骤。 - **启用 HSQL MBean 和 TCP/IP 连接**:解释了如何配置数据库以支持远程访问。 - **创建数据库模式...

    jboss热部署配置

    在JBoss中,这主要通过监视特定目录的变化来实现,当检测到新的或更新的类文件时,服务器会自动重新加载它们。 在JBoss中进行热部署,通常需要以下几个步骤: 1. **修改JBOSS_HOME/server/default/deploy/jboss-...

    jboss7.1 linux版本

    1. **模块化**:JBoss AS 7.1采用了全新的模块化设计,允许更精细的类加载控制,减少了类冲突,并优化了资源加载效率。每个模块都有独立的类加载器,提高了应用的隔离性和安全性。 2. **内存启动**:与之前的版本...

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

    每个模块都有自己的类加载器,这在`jboss.module`包中体现。理解模块化设计对于定制和优化JBoss服务器非常重要。 3. **EJB容器**:JBoss作为Java EE的一部分,提供了EJB(Enterprise JavaBeans)容器,负责管理和...

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

    在实际应用中,通常需要将这些jar包添加到项目的类路径中,或者在JBoss的lib目录下,以确保它们在应用启动时被正确加载。 在开发过程中,为了确保最佳的兼容性和性能,开发者还应该注意以下几点: 1. 确保使用的...

    JBOSS中文文档 CSDN资源下载

    4. **JNDI查找**:JNDI(Java Naming and Directory Interface)在JBoss中用于查找和绑定资源。学习如何通过JNDI查找数据库连接池、邮件会话等服务是必要的。 5. **安全管理**:JBoss的安全特性包括用户角色、认证...

    jboss 下载(httpwww.jboss.org)

    此外,还需要设置启动参数,如 JAXP(Java API for XML Processing),并根据配置文件 `JBoss.properties` 进行系统属性设置,创建 MBeanServer 实例,以及加载补丁文件和远程类加载器。 JBoss 的工作原理涉及多个...

    jboss7ejb配置文件

    在这个文件中,你可以定义EJB组件的基本元数据,如bean的类型(例如,Stateless Session Bean、Stateful Session Bean、Message Driven Bean)、接口、实现类、部署名称以及安全角色等。例如,你可以声明一个无状态...

    jbossAS7开发指南

    3. **类加载优先级**: JBoss AS7 中定义了一套清晰的类加载规则,确保不同级别的类加载器能够按照正确的顺序加载类。 4. **WAR 文件类加载**: 当部署 WAR 文件时,JBoss AS7 会为每个 WAR 文件创建一个模块,并根据...

    Jboss上部署EJB方法

    ejb-jar.xml和jboss.xml一起使用,可以精确控制EJB在JBoss中的行为。 6. 结论 JBoss为EJB开发者提供了强大的支持,虽然最初的配置和部署可能需要一些技巧,但理解ejb-jar.xml、web.xml、jboss.xml等配置文件的用途...

    jboss seam 中文文档

    ### JBoss Seam 中文文档知识点概述 #### 一、JBoss Seam 简介 JBoss Seam 是一款基于 Java EE 的应用开发框架,它通过提供一套丰富的组件模型和灵活的应用结构,极大地简化了企业级应用的开发过程。Seam 结合了 ...

    在IntelliJ idea8中部署Jboss服务器图解

    "在IntelliJ IDEA 8中部署Jboss服务器图解" IntelliJ IDEA 8是 JetBrains 公司开发的一款功能强大且灵活的集成开发环境(IDE),它支持多种programming语言,包括Java、Python、Ruby、PHP等。Jboss则是一款流行的...

    关于JBoss5加载项目的完整过程以及相关错误解决

    【JBoss5加载项目完整过程】 JBoss5.1.0.GA是一个成熟的Java应用服务器,用于部署和管理Web应用程序。在这个过程中,最常见的部署格式是WAR(Web Application Archive),它是一个包含所有必要资源和配置的压缩文件...

    jboss相关Jar包

    比如,它可能包括了与I/O、日志、线程池等基础功能相关的类,这些类在不同的JBoss组件中被广泛使用。由于这些类是通用的,所以单独打包为一个jar,避免了代码重复,也方便升级和维护。 4. **jboss-system.jar**: ...

Global site tag (gtag.js) - Google Analytics