OSGi如何管理在单独的JVM中运行的组件的交互?

时间:2008-12-17 19:25:53

标签: osgi

我一直试图更多地了解OSGi的更广泛图景,而不是通过整个规范阅读。与许多事情一样,OSGi实际上的introduction可能是由那些已经工作了十年的人编写的,也许并不是最能让自己置身于一个对此一无所知的人心态的人。它: - )

看看Felix的例子DictionaryService,我真的不明白发生了什么。 OSGi是一个独特的JVM实例,您可以在其中加载捆绑包,然后可以相互找到它们吗?

显然 只是这是因为StackOverflow上的其他答案是明确的,OSGi可以解决包含部署在不同JVM中的模块的分布式系统的依赖性问题(加上FAQ一直在谈论网络)。

在后一种情况下,一个JVM中运行的组件如何与另一个JVM中的另一个组件交互?两个组件可以相互“使用”,就像它们在同一个JVM中运行一样(即通过本地方法调用),以及OSGi如何管理网络上的数据编组(您是否必须使用Serializable例)?

或者组件作者是否必须使用其他一些不同的机制(由OSGi提供或自己编写)来进行远程组件之间的通信?

非常感谢任何帮助!

9 个答案:

答案 0 :(得分:6)

是的,OSGi只处理在同一个VM上运行的捆绑包和服务。但是,应该注意到OSGi的一个显着特征是它有助于在同一个JVM上运行多个应用程序(以受控方式共享通用模块)。

在访问客户端JVM之外的服务时,目前还没有标准化的解决方案。 Paremus Infiniflow和派生的开源项目Newton使用SCA方法。即将发布的OSGi规范4.2版本将解决问题的一个方面,即如何使用通用分发软件,以便将远程服务引入客户端的JVM。

正如有人提到R-OSGi,这种方法还处理问题的另一方面,即如何管理分布式OSGi框架之间的依赖关系。由于R-OSGi不是通用的分发软件,而是明确处理OSGi包的生命周期问题和依赖管理。

答案 1 :(得分:4)

据我所知,OSGi没有开箱即用解决这个问题。有OSGi-bundle,例如Remote OSGi,它允许程序员通过网络分发服务。

答案 2 :(得分:3)

尚未,我认为它正在为下一个版本开展工作。

但是有些公司已经实施了分布式osgi。我知道的是Paremus的Infiniflow(http://www.paremus.com/products/products.html)。在linkedin,他们也正在努力。这里有更多信息:Building Linkedin next gen architecture with osgi和此处:Matt raible: building linkedin next gen architecture

以下是OSGI 4.2的变化摘要:Some thoughts on the OSGi R4.2 draft,RFC-119中有一节涉及分布式OSGi。

答案 3 :(得分:2)

AFAIK,bundle在同一个JVM中运行,但是没有使用相同的类加载器加载(这就是为什么你可以同时使用同一个bundle的两个不同版本)。

要与另一个JVM中的组件进行交互,您必须使用网络协议,例如rmi。

答案 4 :(得分:2)

OSGi联盟正在制定分布式OSGi的标准:

http://www.osgi.org/download/osgi-4.2-early-draft2.pdf


甚至有一个早期的Apache实现这个新标准:

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

答案 5 :(得分:1)

@ Patriarch24

this question的接受答案似乎表示不同(除非我误读了)。另外,取自FAQ:

  

OSGi服务平台提供在各种网络的设备上动态更改构图的功能,无需重启

(强调我自己)。虽然在同一个FAQ中它将OSGi描述为 in-VM

为什么我对此感到困惑?为什么这个关于十年前技术的基本问题不明确?

答案 6 :(得分:1)

OSGI的原始问题与代码的分发(然后是bundle的配置)相关,而不是与执行的分配有关。

关注分布式组件的人们正在寻求SCA

答案 7 :(得分:1)

“介绍”链接不是真正的介绍,它是一个FAQ条目。有关详细信息,请参阅http://www.osgi.org/About/WhatIsOSGi我认为不难发现。

无论如何,OSGi是一个虚拟机内部SOA。也就是说,OSGi框架是关于VM内部发生的事情,它提供了一个框架,用于在VM内部构建应用程序,因此您可以在很大程度上从组件构建它。所以核心没有什么与分发有关,它完全忽略了谁实现了服务,它只是提供了一种模块以松散耦合的方式相互认识的机制。

也就是说,μService模型对模块之间的关节进行了统一,结果表明,您可以在框架之上构建支持,从而为其他组件提供分发。在上一版本中,我们指定了一些机制,使其在核心中标准化,并提供可以管理分布式拓扑的特殊服务远程服务管理。

答案 8 :(得分:0)

如果您正在寻找分布式OSGi中心云运行时 - 那么Paremus Service Fabric(https://docs.paremus.com/display/SF16/Introduction)提供了这些功能。

可以在一组OSGi运行时框架(Knopflerfish,Felix或Equinox)中动态部署和维护一个或多个系统,每个系统包含许多OSGi程序集(蓝图或声明式服务)。

提供轻量级RSA远程框架,默认使用DDS(一种非常好的中间件消息传递技术)提供服务发现 - (可以使用ZooKeeper和其他方法)。目前支持的重新启动协议包括RMI和Avro。

此致

理查德