【发布时间】:2014-11-10 08:22:42
【问题描述】:
我有包 A 和包 B。包 B 从包 A 导入包,包 B 将 Eclipse-RegisterBuddy 设置为包 A。包 A 加载由 B 通过 Java 反射 (Class.forName) 导出的类。重新部署bundle B时,bundle A仍然引用旧版本B的类加载器,因此Class.forName从B返回旧类版本。这导致当参数是在B中创建并传递的实例时,从A调用Class.isInstance返回false到 A 中的方法。 有什么方法可以刷新 A 中的类加载器以便能够从 B 返回新版本的类?可以从 Virgo 控制台调用 bundle refresh A 命令,这解决了这个问题,但是这个刷新会导致所有依赖的 bundle(B 和其他)都停止并重新启动。这不适合我们的应用程序,因为 bundle B 和其他从 A 导入包的包是长时间运行的批处理作业,无法停止。
【问题讨论】:
标签: eclipse osgi classloader eclipse-virgo