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

oxb*_*kes 13 osgi

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

看看菲利克斯的例子DictionaryService,我真的不明白发生了什么.OSGi是一个独特的JVM实例,您可以在其中加载捆绑包,然后可以找到彼此的捆绑包吗?

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

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

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

任何帮助非常感谢!

小智 6

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

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

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