自定义ClassLoader在Tomcat中的有关问题

自定义ClassLoader在Tomcat中的问题
公司要求做加密,于是上网搜啊,都说加密重要的.class,自定义ClassLoader加载加密的class,其实我感觉也没有用,defineClass时还是要解密。但是其间遇到一个问题一直不知道什么原因:

Jdk1.6  Tomcat5.5
自定义的ClassLoader类:MyClassLoader
待解密的类:LicenseUtils
我用MyClassLoader加载LicenseUtils时的代码:

Class c = loadClass("xx.LicenseUtils"));
Method m = c.getDeclaredMethod("init", new Class[]{});
m.invoke(c.newInstance(), new Object[]{});

LicenseUtils类中init方法:

public void init() {
    System.out.println("init method");
}


这么写是没有问题的,但是如果我在init方法里面调用第三方类(不是系统的类),就会出现ClassNotFoundException,找了半天也不知道什么原因,而且仅仅是在Tomcat里面运行出错,在main方法里面做测试是木有问题的。

public void init() {
    //自定义的类 License
    com.test.encrypt.License lic = new com.test.encrypt.License();
    //如果是第三方的jar包也报错
    System.out.println("init method");
}



我思忖,Java Application 和 Web Application有什么区别呢?
Jdk有三个ClassLoader,利用委派方式加载类,Tomcat定制了自己一系列的ClassLoader来加载类,我自己写
的MyClassLoader继承自Jdk的ClassLoader,Tomcat的WebAppClassLoader继承自URLClassLoader,URLClassLoader又继承自ClassLoader。

查了Apache的Mailing Lists发现有人说Tomcat只能用继承自WebAppClassLoader的ClassLoader

有人遇到过吗?或者看出有什么问题的
1 楼 wupuyuan 2011-09-27  
没有尝试过自己的ClassLoad。不过我用过jks,如果不是要加密class,可以用它看看。