如何在单独的线程/类加载器中隔离java模块执行?

时间:2013-02-14 19:39:09

标签: java module isolation

在我的webservice应用程序中,我必须集成第三方模块来验证业务规则,这些模块附带了相当旧的库。

旧图书馆与我的新图书馆发生冲突。

有没有办法在正在运行的网络服务中的单独线程/类加载器中隔离第三方模块?

2 个答案:

答案 0 :(得分:1)

您要找的是OSGi

答案 1 :(得分:0)

当然,但你必须通过这样的反射来使用它:

ClassLoader classLoader = new URLClassLoader (
    new URL [] {/* Classpath or isolated module here */},
    ClassLoader.getSystemClassLoader ().getParent ());

Class <?> isolatedModuleClass = classLoader.loadClass (
    /* Full name of class from isolated module */);

Object isolatedObject = 
    isolatedModuleClass.
        getConstructor (/* Constructor argument types */).
            newInstance (/* Constructor arguments */);

Object result =
    isolatedModuleClass.
        getMethod (/* Method name */, /* Method parameter types */).
            invoke (isolatedObject, /* Method arguments */);