OSGI - 跨bundle的静态方法调用

时间:2009-09-01 08:24:26

标签: java static osgi

我有一个第三方JAR,我已经使用bnd转换为OSGI包。我需要调用以从我自己的bundle中使用它的代码看起来像这样:

ThirdParty.setRegKey(myRegKey);
ThirdParty thirdParty = new ThirdParty();
thirdParty.callMethod();

似乎导致我问题的是第一行 - 静态方法调用。在OSGI容器之外,使用标准JAR,这很好。但是,在OSGI内部,我在第3行收到错误,指出没有设置注册密钥。

这样的捆绑包中是否存在静态方法调用的问题?这几乎就好像静态上下文没有在包中共享。

2 个答案:

答案 0 :(得分:3)

你调试了代码吗?既然您没有告诉我们您使用的是哪个第三方库,并且我们不了解您的完整环境,那么可能setRegKey()callMethod()正在尝试做一些“聪明”的事情。在OSGi中不起作用。

JDBC驱动程序管理器存在此问题,其中bundle导入JDBC驱动程序类,但驱动程序管理器决定来自bundle的调用线程不应“看到”JDBC驱动程序类,因此在OSGi中运行时会失败。 / p>

答案 1 :(得分:2)

您可能需要导出/导入包含ThirdParty类的包。否则它会在不同的类加载器中出现不同的bundle,所以它确实没有共享。

真正的OSGi方式是通过某种服务来实现这一目标。