【发布时间】:2010-11-24 11:55:09
【问题描述】:
我是使用 OSGI 编程的新手。谁能给我一个客户端/服务器 osgi 服务调用的工作示例。
在过去的两周里,我一直在努力实现这一目标,但没有任何成功。
我的服务被同一台机器上的 eclipse 实例发现并执行,但是当我在另一台机器上尝试同样的事情时它失败了。
我们将不胜感激。
谢谢。
【问题讨论】:
标签: osgi
我是使用 OSGI 编程的新手。谁能给我一个客户端/服务器 osgi 服务调用的工作示例。
在过去的两周里,我一直在努力实现这一目标,但没有任何成功。
我的服务被同一台机器上的 eclipse 实例发现并执行,但是当我在另一台机器上尝试同样的事情时它失败了。
我们将不胜感激。
谢谢。
【问题讨论】:
标签: osgi
在 OSGi 平台(版本 4 版本 4.1)中,通过 OSGi 服务注册表发现的服务是本地服务,仅在单个 OSGi 框架实例(即单个 JVM)内可用。您不能期望执行在不同机器上运行的 OSGi 服务。
如果您想跨多个框架实例(即多个 JVM/多台机器)调用 OSGi 服务,您应该查看将成为 upcoming OSGi specification(版本 4 版本 4.2)的一部分的分布式 OSGi 规范(RFC 119) CXF 为reference implementation。
更新:另一种调用远程 OSGi 服务的方法是使用R-OSGi。它是一个中间件,提供了一种几乎透明的方式来访问远程 OSGi 平台上的服务。
【讨论】:
OSGi 服务是虚拟机内的,而不是虚拟机间的,除非您在顶部添加分发。
您可能想查看Brian's tutorial,它很好地展示了如何导出 OSGi 服务并使用 ECF 执行远程分发。涉及的捆绑包相当多,但他在解释方面做得很好。
【讨论】:
除非您正在使用 CXF 或 Eclipse 的分布式 OSGi 实现,否则在 OSGi 中没有与远程处理相关的内容。您应该能够在 2 个基于 OSGi 的进程之间进行任何远程实现工作。
我要说的是,如果您尝试使用 RMI 或 Spring 远程处理中可用的任何 RPC 模式,您可能会遇到类加载器问题。这是可以解决的,但需要对 OSGi 和类加载器有很好的理解。
如果您在 OSGi 之外运行您的代码,它会工作吗?你在使用防火墙吗?您能否在您的 PC 上运行网络上其他 PC 可见的任何基于网络的服务?
如上所述,该问题看起来与网络相关,而不是与 OSGi 相关。
另外,您没有提到在不同 PC 上运行时会遇到什么故障。
【讨论】:
eclipse 基金会的 Riena 平台通过将服务发布为 Web 服务端点来提供 OSGi remote services。
【讨论】:
也许应该更新答案,因为它们不再有效。
现在有可用的 OSGi 远程服务您可以在 OSGi 企业规范第 100 章中了解它。有两个主要实现:Eclipse ECF 和 Apache CXF。 ECF有一个很好的例子here
【讨论】: