最近几天研究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
分享到:
相关推荐
NULL 博文链接:https://blueprint86.iteye.com/blog/998660
JBOSS常见错误处理的基本知识,日常问题的解决利器
换句话说,不是将所有的JAR都加载到平面类路径中的单个类加载器,而是每个库成为一个模块,该模块仅链接到其依赖的确切模块,仅此而已。 它实现了线程安全,快速和高度并发的委托类加载器模型,并与可扩展的模块...
JBoss Rules中,规则是如何被表示的Rules 一条规则是对商业知识的编码。... 什么是JBoss Rules? JBoss Rules的含义是什么? JBoss Rules 的前身是Codehaus的一个开源项目叫Drools。最近被纳入JBoss门下,更名为...
JBoss模块是Java模块化的( 非分级) 类加载和执行环境的独立实现。 也就是说,每个类库装入的不是一个单独的类路径,而是将每个库变成一个只依赖于它所依赖的确切模块的,并没有任何其他的类。 它实现了一个线程安
解决jboss中启动的优先级的问题,介绍了WEB和EJB之间的启动顺序。
lib 一些 JAR , JBoss 启动时加载,且被所有 JBoss 配置共享。(不要把你的库放在这里) server 各种 JBoss 配置。每个配置必须放在不同的子目录。子目录的名字表示配置的名字。 JBoss 包含 3 个默认的配置: ...
因为JBoss代码遵循LGPL许可,你可以在任何商业应 用中免费使用它,而不用支付费用。JBoss是纯Java的Web应用服务器,为了保证JBoss服务器的正常运行,在安装JBoss之前首先要确保系统 已经安装了JDK。可以从...
JBOSS,JBoss安装部署 JBOSS,JBoss安装部署
JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动JBoss启动 JBoss启动
换句话说,不同于Java传统的使用单个类加载器载入classpath中的所有JAR文件,每一个库(library,可以理解为完成某一个功能的一系列jar的组合)成为一个module,该module仅链接其依赖的其他module,而不再依赖其它任何...
Jboss get started
JavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-commonJavaEE源代码 jboss-...
eclipse3.6创建EJB+JPA+EAR(每个都是单独工程)完整介绍:自动创建表结构、数据源配置、jpa和ejb工程添加到ear包中。以及注入Emanager。 要这么高的分只是为了物有所值。
本书的目标就是,尽快使得用户能够将J2EE 1.4应用部署并运行在JBoss 4.0.x上。
jboss rules 中文用户指南,mht文件,共十章。
太闲,转成pdf方便大家学习。在这里谢谢 满红江20071230。
第一章:入门 第二章:JBOSS-快速上手 第三章:关于实例应用 第四章:duke银行应用 第五章:javaee之web服务
整理一下jboss drool5.1中文使用说明,doc格式