2009-09-01 82 views
2

我有一个第三方JAR,我已经转换为一个OSGI捆绑使用bnd。我需要调用从我自己的捆绑使用它的代码看起来是这样的:OSGI - 捆绑静态方法调用

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

什么似乎导致我的问题是第一线 - 静态方法调用。在OSGI容器之外,使用标准JAR,这可以正常工作。但是,在OSGI内部,我在第3行得到一个错误,说明没有设置注册密钥。

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

回答

2

你调试了代码吗?既然你不告诉我们你正在使用哪个第三方库,并且我们不知道你的整个环境,可能是setRegKey()callMethod()正在尝试做一些在OSGi内部不起作用的“智能”。

JDBC驱动程序管理器在您的软件包导入JDBC驱动程序类时出现此问题,但驱动程序管理器决定您的软件包中的调用线程不应“看见”JDBC驱动程序类,因此在OSGi内运行时会失败。

2

您可能需要导出/导入包含ThirdParty类的包。否则,它会在不同的类加载器中结束,因此它不会被共享。

真正的OSGi方式是通过一些服务来实现这一点。

+0

感谢您的澄清。在第三方捆绑包清单中,我有Export-Package:com.thirdparty.package,然后在我的捆绑软件清单中导入包:com.thirdparty.package。你是这个意思吗? – William 2009-09-01 08:43:14

+1

示例代码表明MANIFEST导入和导出是正确的,否则他将无法编译,并且所述问题是第三行上的运行时失败。 – SteveD 2009-09-02 08:48:49

+0

@威廉是的。但是,如果你的代码全部在一个包中,这不应该成为问题。 – starblue 2009-09-02 19:35:14