我有可嵌入的 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/