浏览 2592 次
锁定老帖子 主题:jboss4.0.5 类装载器问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-18
server --default --lib 第三方工具包(包括jfreechart0.9.11.jar) --deploy --Stat.ear -- ejb.jar (需要引用第三方工具包) -- webStat.war (该war要引用lib里面的jfreechart0.9.11.jar) -- SIM.war (独立,不依赖于lib里面的包) 现在由于SIM.war开发过程中要采用jfreechart1.0.0.jar的新版本,我试了很多方法,都出现错误。 我的试验方法是: 通过设置deploy\jbossweb-tomcat55.sar\META-INF\jboss-service.xml 的下列行: <attribute name="Java2ClassLoadingCompliance">false</attribute> <attribute name="UseJBossWebLoader">false</attribute> 强制使用servlet容器自己的类装载器,并首先从其WEB-INF/lib下装载类。看了一下jboss的文档,做出这样的设置之后,不同的war包被隔离在不同的类装载器中,因此允许war包中各自使用版本不同的jar包。 由此想出 第一种部署方案: 把本来放在lib中的第三方工具包全部放到webStat.war包的lib中,但是问题是ejb.jar包也要引用他们,这种方案行不通。 第二种方案: 保留现状,将新的jfreechart1.0.0.jar直接放到SIM.war中。我个人理解的是当SIM.war里面要使用jfreechart中的一个类时首先在servlet自带的类装载器中找,而不会到装载 server/default/lib的UCL3中去找。 但是在使用过程中发现总是出现: java.lang.VerifyError: (class: org/jfree/chart/JFreeChartInfo, method: <init> signature: ()V) Incompatible argument to function org.jfree.chart.JFreeChart.<clinit>(JFreeChart.java:230) 第三种方案: 把Stat.ear中加入jboss-app.xml: <jboss-app> <loader-repository>some.dot.com:loader=Stat.ear</loader-repository> </jboss-app> 目的是把Stat.ear隔离在单独的 HeirarchicalLoaderRepository3当中 但是结果跟第二种一样,还是出现同样的java.lang.VerifyError异常。 综合一下,究竟怎样才能使SIM.war中使用高版本的jfreechart呢? 不同版本的jar包怎样才能在jboss当中共同使用?(jfreechart的两个版本之间不兼容,因此全部替换成高版本不在考虑范围之内) 搞了半天没明白,请教 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-18
我倒是知道在Websphere中可以设置ClassLoader的先后顺序。不过JBoss就不清楚了。JBoss的管理控制台我就没搞明白过。如果网络上搜不到的话,恐怕你得需要他们的技术支持了。
|
|
返回顶楼 | |