websphere6.1中 
“D:\IBM\WebSphere\AppServer1\derby” 
已经存在10.1的derby.jar文件 但是在我们自己的app.war中,WEB-INFO下的bin目录中也有derby.jar 
而且是10.4的版本 现在运行中发现,websphere使用的包是IBM自己带的derby文件。 如何使websphere只加载我们自己的derby包? 谢谢

解决方案 »

  1.   

    我试了 但是还是不行
    websphere的类加载机制应该是不同的我们自己war包内的WEB-INF\lib下的jar会不会被加载?如果会,那么怎么让他最新加载,并首先被利用。
      

  2.   

    如果websphere目录下的你没用到你把他换掉就好了。
      

  3.   

    替换是一个办法,但是由于特殊原因
    比如,其中一个webap.war用了websphere自己的derby
    接着又加了一个xxx.war文件,xxx.war的web-info\lib下也有derby.jar文件,而且是不同版本的,这样就会出问题。就向1楼所说的,类加载首先使用webap应用中的类,有一点道理的,websphere的类加载机制中是可以做到的。但是我试了就是不行。看了下xxx.war的web-info\lib的derby.jar感觉没有被加载。
      

  4.   

    获取一个类加载的源路径可以这样写:
    String s = classname.replace('.','/')+".class";
    java.net.URL url = Class.forName(classname).getResource("/" + s);
    你可以找一个类去看看到底加载了哪个包
    并看看Class.forName(classname).getClassLoader()是否为null,
    如果为null则表示由bootstrap 加载(你可以大致认为就是通过set CLASSPATH或者java -cp 中指定)
      

  5.   

    我刚找的,这篇文章应该就是解决你的问题的方案了。
    http://www.ibm.com/developerworks/cn/websphere/library/techarticles/haoaili/0512/