分享

用代码构筑一个世界...

 qzg589 2005-08-12

从一个错误中发现的weblogic类装载机制

这两天一直被一个问题所困扰,因为我修改了一个类的实现,但是发布服务器后,类的行为却没有改变。

为了找出原因,我进行了一些实验。首先将行为函数实现的类从发布的ear包中删除,发现服务依然可以运行,这说明肯定在服务器的某个地方存在这个类的拷贝。然后我有从包中删掉了该类的子类(就是服务提供类)服务就不能创建了。我能确定的就是服务类确实从发布的包中装载,但是该类的父类却是从另外某个地方装载了。

我检查了环境的classpath,发现果然存在一个路径定位到以前的一个jar,这个jar在新的系统中已经不再使用了,而且我从JBuilder种删除了这个jar的包容器,就是说这个jar不会被更新了。

错误的原因很明白了。就是服务器一直在使用一个老版的基类。造成这个错误的主观原因就是我一直认为我已经删除了对了这个jar文件的引用,并且删除了这个jar,但是事实我忘记了。客观原因是weblogic的类装载机制。在weblogic启动的时候,首先从classpath指定的环境中装载类。当受到请求的时候,从该类所在包装载,但是发现该类的超类已经被载入,就不会再从当前包载入,而是直接使用已经载入的类。这就造成了以上的错误。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多