从OSGi容器外部查找OSGi服务

从OSGi容器外部查找OSGi服务,osgi,apache-karaf,Osgi,Apache Karaf,我在Karaf中部署了一组bundle,并公开了许多OSGi服务,我希望能够从运行在可能不同的机器和非OSGi容器中的应用程序中远程查找和调用这些服务。我最初的想法是使用JNDI查找来获得我想要的服务,但是我从中了解到这可能不受支持,我说可能,因为我无法找到任何关于Aries JNDI实现在过去一年中是否发生了任何变化的信息。在这种情况下,我想我的其他选择是使用CXF为我的服务公开JAX-WS或JAX-RSAPI 我对形势的理解正确吗?在我的例子中,JNDI查找真的不是一个选项吗?还有其他我没有

我在Karaf中部署了一组bundle,并公开了许多OSGi服务,我希望能够从运行在可能不同的机器和非OSGi容器中的应用程序中远程查找和调用这些服务。我最初的想法是使用JNDI查找来获得我想要的服务,但是我从中了解到这可能不受支持,我说可能,因为我无法找到任何关于Aries JNDI实现在过去一年中是否发生了任何变化的信息。在这种情况下,我想我的其他选择是使用CXF为我的服务公开JAX-WS或JAX-RSAPI


我对形势的理解正确吗?在我的例子中,JNDI查找真的不是一个选项吗?还有其他我没有想到的选择吗?

一个简单的jndi查找将不起作用。OSGi服务本身不适合远程处理。因此,即使可以以某种方式获得jndi对象,也不能调用它

可能的解决方案是手动cxf代理和端点,就像您已经找到的和分布式OSGi一样。请参阅cxfdosgi和eclipseecf。两者都可以提供从一个OSGi框架到另一个OSGi框架的跨父服务调用。如果在客户端也使用OSGi,DOSGi是理想的选择。 至少在CXF DOSGi的情况下,也可以在服务器端使用DOSGi,在客户端使用普通的CXF客户端。因此,您可以将服务器端的工作保持在最低限度


另请参见此

您需要远程服务实现。有关列表,请参阅。

谢谢你,克里斯蒂安。我不太清楚的是如何从非OSGi客户端连接到DOSGi。您是否有任何参考/示例可以帮助我实现这一点?只需以通常的DOSGi方式导出一个服务,然后检查上的cxfservlet。您应该可以在那里看到服务URI。正如您所建议的,我已经向DOSGi发布了一个示例服务,实际上,这似乎是一个不错的选择,但是到目前为止,我无法理解为什么我只能从部署端点的机器的localhost事件访问已发布的端点。我可以在http://:9090/hello?wsdl上访问它,但不能在http://:9090/hello?wsdl上访问它。是否缺少配置?您是如何指定导出的?如果将完整uri指定为,那么它实际上只在本地主机上工作。尝试使用/hello之类的路径,或在uri中指定主机名。我总是使用/hello变量,它使用OSGiHttpService,所以所有服务共享同一个servlet。这确实是问题所在。我试着使用just/hello,但是使用的是org.apache.cxf.ws.httpservice.context,而不是org.apache.cxf.ws.address。谢谢你的帮助。