0

我有可嵌入的 Felix。我有一些 API 包和 Impl。API 导出接口C.Impl 导入该接口并在激活器中注册 impl。现在我想要 C impl otside OSGi

  FrameworkFactory ff = new FrameworkFactory();
  ...
  BundleContext bc = fwk.getBundleContext();
  ...
  final ServiceReference[] serviceReferences = bc.getServiceReferences(C.class.getName(), "(objectclass=" + C.class.getName() + ")");
  for(ServiceReference serviceReference : serviceReferences){
     final Object service = bc.getService(serviceReference);
     ...
  }

现在我想和它互动。我可以通过反思来做到这一点

     System.out.println(service.getClass().getMethod("some").invoke(service)); //using 

但我不能投

     System.out.println(service instanceof C); //prints false

我猜这来自不同的类加载器。但是我该如何解决呢?我们如何从外部与 OSGi 上下文交互?或者我们可以将其全部放入 OSGi 容器中?

4

1 回答 1

5

如果您正在嵌入 OSGi,则服务的 API(即接口“C”)必须对外部应用程序可见,并通过系统捆绑导出导出到 OSGi。外部应用程序无法从包含在 OSGi 框架内的包中导入包。

于 2013-03-07T11:44:16.010 回答