代码之家  ›  专栏  ›  技术社区  ›  William

OSGi-跨包的静态方法调用

  •  2
  • William  · 技术社区  · 15 年前

    我有一个第三方jar,我已经用bnd转换成了osgi包。我需要从自己的包中调用以使用它的代码如下所示:

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

    引起我问题的似乎是第一行——静态方法调用。在OSGi容器外部,使用标准的JAR,这很好地工作。然而,在OSGi内部,我在第3行得到一个错误,指出没有设置注册密钥。

    像这样的包中的静态方法调用有什么问题吗?就好像静态上下文没有在包中共享一样。

    2 回复  |  直到 15 年前
        1
  •  2
  •   SteveD    15 年前

    你调试过代码吗?因为您没有告诉我们您正在使用哪个第三方库,我们也不知道您的完整环境,所以可能是 setRegKey() callMethod() 正在尝试做一些在OSGi内部不起作用的“聪明”的事情。

    JDBC驱动程序管理器存在这样一个问题,即包导入JDBC驱动程序类,但驱动程序管理器认为包中的调用线程不应该“看到”JDBC驱动程序类,因此在OSGi内部运行时,它会失败。

        2
  •  2
  •   starblue    15 年前

    您可能需要导出/导入包含第三方类的包。否则,对于不同的包,它最终会出现在不同的类加载器中,因此它确实是不共享的。

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