Tomcat - 拥有ParallelWebappClassLoader的多个实例来重新加载某些类

时间:2018-01-09 20:02:26

标签: java tomcat classloader

我正在尝试扩展ParallelWebappClassLoader,以便在特定触发器上我可以使用com.foo.my.ClazzName重新加载指定的类。我了解ParallelWebappClassLoader维护自己的缓存,并在findLoadedClass0()找到的情况下从其缓存中返回类。为了确保可以正确链接类,我想我需要使用扩展ParallelWebappClassLoader的新实例重新加载类。如下所示:

public Class<?> loadClassAgain(String name, boolean resolve) throws ClassNotFoundException {
    // lock method is internal which I have inherited.

    synchronized(getClassLoadingLock(name)) {
        String binaryPathName = convertNameToPath(name, true);
        this.resourceEntries.remove(binaryPathName);
        MyParallelClassLoader loader = new MyParallelClassLoader (this.getParent());
        loader.start(); // Starts resource context.

        // I have provided loadClass def such that it goes to super.loadClass()
        return loader.loadClass(name,true);
    }

这是正确的做法,以前有人试过吗?我试图避免tomcar上下文重新加载,即整个服务器重新启动。相反,我的目标是按给定的名称重新加载特定的类(或类)。

我不确定使用URLClassLoader是否是一种更好的方法,但我决定从tomcat开始自己来节省一些麻烦 - 可能这是错的!?

感谢任何帮助。

此致

0 个答案:

没有答案