有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java远程处理和OSGi

是否有一种优雅的方式跨或OSGi容器使用服务

有可能吗

例如,假设我在本地机器上有一个服务接口。我可以使用什么方法/技术通过远程OSGi容器的BundleContext访问该服务接口


共 (6) 个答案

  1. # 1 楼答案

    查看OSGi规范版本4.2中的“远程服务”一章。 它定义了在几个OSGi容器之间分发服务的标准方法

    OSGi规范的全新版本4.3对此提供了更详细的支持—请参阅第6章远程服务和112远程服务管理服务

  2. # 2 楼答案

    这是可能的,但是没有库(afaik)可以为您这样做。我已经为我目前的工作做好了准备。客户端和服务器上的OSGi运行时,RMI是传输。我不得不大量使用代理对象

    在服务器的OSGi运行时(Equinox)中注册服务。我有一个监听器,它监视所有服务,寻找一个属性/属性,该属性/属性指示该服务应该被导出(设为远程),类似于“remotable=true”。使用ServiceTracker很容易进行过滤。通过RMI,我指示客户端使用服务接口创建代理对象。对该代理对象的所有调用通常通过RMI(类似于execService serviceid、方法名、var args params的调用)发回,然后在实际服务上调用

    我遗漏了一些低级的细节,但你可能可以把它整理出来。如果您可以离开RMI,那么您可能想研究一下Riena(甚至可能有一种方法可以为Riena编写RMI传输,我只是懒得尝试)

  3. # 4 楼答案

    你想要达到什么目标还不是很清楚。您有一个服务,您可以使用RMI访问它,并且您需要作为OSGi服务提供吗

    我想你可以为你的本地机器服务写一个接口。然后,您可以编写一个连接到该服务的捆绑包,并在OSGi服务注册表中公开该接口。然后,您的主捆绑包可以使用接口名称或服务名称来定位该服务

    将RMI连接到您的本地服务应该不会有太多工作。可能需要一些配置选项来建立初始连接。在OSGi中发布服务之前,为其编写一个facade可能很重要,这样可以实现某种形式的解耦,也许还可以隐藏它是一个RMI服务的事实

    但也许我完全误解了你,这一切都是徒劳的

  4. # 5 楼答案

    有一个名为远程服务(以前是分布式OSGi)的RFC,它正是您想要实现的功能。RFC几乎完成了,ApacheCXF和EclipseCF分别提供了两个实现

    这两种实现都允许对OSGi服务进行透明的远程处理。您只需像往常一样定义OSGi服务,并添加一些配置参数使其成为远程服务

    检查:
    http://cxf.apache.org/distributed-osgi.html

  5. # 6 楼答案

    除了上面的CXF之外,还有EclipseECF,它是通信框架的集合,提供了OSGi4.2远程服务(也称为分布式OSGi)的早期实现。它通过在VM中注册客户端绑定到的本地服务来工作,然后在远程机器上创建代理,并使用您选择的技术(RMI、WebServices等)来远程调用

    显然,这使用了按值方法调用语法(您的服务需要了解该语法),但除此之外,任何comms错误都是RuntimeException