论坛首页 Java企业应用论坛

jboss4.0.5 类装载器问题

浏览 2592 次
精华帖 (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的两个版本之间不兼容,因此全部替换成高版本不在考虑范围之内)

搞了半天没明白,请教
























         
   发表时间:2008-01-18  
我倒是知道在Websphere中可以设置ClassLoader的先后顺序。不过JBoss就不清楚了。JBoss的管理控制台我就没搞明白过。如果网络上搜不到的话,恐怕你得需要他们的技术支持了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics