java - 使用嵌入式 OSGi 框架的服务

标签 java osgi

我有可嵌入的 Felix。我有一些 API 包和 Impl。 API 导出接口(interface)C。Impl 导入该接口(interface)并在激活器中注册 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);
     ...
  }

现在我想与它互动。我可以通过反射(reflection)做到这一点

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

但我无法转换

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

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

最佳答案

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

关于java - 使用嵌入式 OSGi 框架的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15270044/

相关文章:

java - Spring AOP 事务管理和 Hibernate : undesired commits to database

osgi - 在 Equinox 中运行 Arquillian

java - Eclipse Virgo 和 Eclipse Gemini 之间有什么区别?

java - 将数据存储到对象数组元素中返回 NullPointerException

java - Java 中的观察者模式 - 观察者观察不同的、不相关的类型或类?

java - 将 JOptionPane 输入转换为整数

java - IText 7 - 如何通过 Rest Api 发送 PDF 而不存储文件?

java - Servlet 过滤器和 OSGi HttpService

osgi - 导出版本未指定版本时获取默认版本包

java - 当方法有参数时,OSGi @Activate 会中断。错误: activate method not found; Component will fail