当前位置: 代码迷 >> Eclipse >> OSGI应用有关问题请问
  详细解决方案

OSGI应用有关问题请问

热度:24   发布时间:2016-04-23 18:39:58.0
OSGI应用问题请教
说实际例子吧。

现在有一个框架Bundle   A,一个业务的   Bundel   B。

Bundle   A中使用了一个第三发组件,我们假设有一个类为Manager。

Manager有一个接口注册函数。

Manager.registerFunction   (String   alias,   String   functionName);   //   functionName包含函数的完整路径   package.class.function

这个第三方组件自然是被Bundle   A的class   loader加载了。

现在Bundle   B   有一个方法要注册。假设为

class   Demo
{
public   static   function   ();
}

此时Bundle   B初始化时使用

Manager.instance.registerFunction   ( "function ",   "packageB.Demo.function ");注册函数。

但是由于Demo类是Bundle   B   的class   loader加载的。所以注册后在第三方软件使用倒function时去反射,就是找不到Demo这个类。

同时又不可能在框架的MAINFEST.MF文件中增加import   业务的Bundle。

------解决方案--------------------

第三方组件是否是bundle的形式,如果是bundle,就不是由Bundle A的class loader加载的。
如果是一个inside的jar,必须export才能被Bundle A之外的bundle使用。

可以将Manager发布为一个service,可以在Bundle B的上下文context中获得Manager,然后将业务类注入。