实验-jboss类加载

实验一:

      环境:jboss-4.2.3GA   jdk1.6

      应用结构: Jdom.ear

                          --library

                                --businessInterface.jar

                                --operationInterface.jar

                          --META-INF

                               --application.xml

                               --jboss-app.xml

                               --MANIFEST.MF

                          --Jdom.web.war

 

 包部署位置:

 

包名称部署位置
UserInterface.jar、Jdom.ejb.jar  JBOSS_HOME/server/default/lib
Jdom.earJBOSS_HOME/sever/default/deploy

 

 

说明:

        1、UserManagerMgr、TUser在UserInterface.jar包下。

        2、CmtCtrlMgr在library下的operationInterface.jar下。

        3、StaticClass在Jdom.ear下的Jdom.web.war包下。

 

运行过程:

        通过页面触发TestCastAction的valid方法,在这个方法里,会进行实例化UserManagerMgr、TUser、CmtCtrlMgr,同时将这几个类对应的加载类打印出来。

 

打印日志如下:

 

20:22:04,378 INFO  [STDOUT] managerMgr return cast::org.jboss.mx.loading.UnifiedClassLoader3@16f144c{ url=null ,addedOrder=2}
20:22:04,378 INFO  [STDOUT] action's TUser cast::org.jboss.mx.loading.UnifiedClassLoader3@16f144c{ url=null ,addedOrder=2}
20:22:04,378 INFO  [STDOUT] action's user cast::org.jboss.mx.loading.UnifiedClassLoader3@16f144c{ url=null ,addedOrder=2}
20:22:04,402 INFO  [STDOUT] action's cmtCtrlMgr cast::WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@1242445
20:22:04,402 INFO  [STDOUT] action's CmtCtrlMgr cast::org.jboss.mx.loading.UnifiedClassLoader3@bc917c{ url=file:/usr/jboss/jboss/server/default/tmp/deploy/tmp6204233924756827378Jdom.ear ,addedOrder=50}

 

14:44:25,943 INFO  [STDOUT] action.util.StaticClass cast::WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
java.net.FactoryURLClassLoader@1641c0

 

结论:

1、default/lib下的jar包与deploy下的jar包(包括ear里面的jar)都是由UnifiedClassLoader3加载,但是又不同的实例加载(根据日志,lib下的是UnifiedClassLoader3@16f144c,deploy下的是UnifiedClassLoader3@bc917c),这里可以解释之前的ClasscastException  A cannot cast to A的问题了,尽管路径、类的详细内容一致,但是由不同实例加载,这样肯定不能做转换的。

2、war包是由WebappClassLoader加载的,同时,war包能够访问到由UnifiedClassLoader3加载的类。

 

问题:

1、CmtCtrlMgr的引用cmtCtrlMgr为什么是由 UnifiedClassLoader3加载的呢?

2、

 

 

 

相关测试的结论:
1、同一个ear下的jar包都是用
UnifiedClassLoader3的同一个实例来加载的。

2、貌似普通的javabean不能同时存在于lib下和deploy下?如果同时存在,报错:java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/web/tomcat/service/WebAppClassLoader) previously initiated loading for a different type with name "a/c/Operate"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值