OSGi 4.2 中有哪些新增功能?

2022-09-04 21:16:41

OSGi 4.2刚刚发布,它通过一些新的RFC更新了4.1规范。那么,OSGi 4.2有什么特别的新内容,哪些框架已经(或接近)支持4.2,为什么你应该针对4.2框架而不是4.1来瞄准新的发展呢?


答案 1

在大多数情况下,OSGi的单点版本(例如4.1->4.2)并没有真正改变太多现有行为,因此可以肯定地说,如果你有一个依赖于4.1的应用程序,它将在4.2上运行而不会出现问题。新的是,一些项目已经标准化,这应该可以实现不同OSGi引擎(如EquinoxFelixKnopflerfish)之间更好的互操作性。

事实上,尽管OSGi 4.2仅在2009年9月16日正式发布,但早期的草案已经可供其他人参考,因此之前的产品版本(如Equinox 3.5,Felix 1.8)已经对该标准提供了合理的支持。与802.11n产品一样,它们符合早期的草案,但期望在不久的将来它们将被认证为完全符合4.2版本。

那么,4.2 中有哪些新功能呢?

  • 服务挂钩
  • 框架启动

而且,在简编中

  • 远程服务
  • 捆绑跟踪器
  • 蓝图服务

服务挂钩

服务挂钩 API 允许您选取在服务层发生的事件。例如,您可以挂接到何时请求服务、何时服务已传递事件等。您还可以导致事件无法传递(例如,隐藏您无权查看的事件),但无法更改任何事件(因为这会使传递的类复杂化)。服务挂钩是核心规范的一部分,因此所有OSGi版本都需要它才能兼容。

框架启动

尽管可以从现有的 Java 应用程序以编程方式启动 OSGi 实例,但执行此操作的方式取决于您使用的 OSGi 运行时。特别是,配置项目(例如存储瞬态数据的位置、捆绑包引导委派策略应该是什么等等)都是以特定于引擎的方式定义的。这将合并由任何启动实用程序在框架上设置的属性。

远程服务

远程服务 API 允许 OGSi 服务在 VM 之间进行通信(可能在不同的计算机上)。它们如何通信的确切机制(RMI,WebServices等)对提供者开放,因此它与其他分布式技术(如Corba)不同,后者专门规定了在线格式。显然,分布式服务与本地服务具有不同的语义(通信错误,序列化问题),并且如果需要,它留给各个服务进行可分发。

捆绑跟踪器

就像 4.1 中的 ServiceTracker 一样,BundleTracker 可用于监视系统中哪些捆绑包进出。动态 GUI 可以使用它来显示 OSGi 引擎的演变状态,而无需任何特定于平台的知识。

蓝图服务

蓝图服务与Spring类似,因为它提供了用于配置捆绑包的依赖关系注入机制。在某些方面,它类似于声明性服务;但是蓝图服务以不同的方式执行操作。此外,与声明性服务(只能处理存在的服务)不同,蓝图服务可以提前为稍后将上线的服务创建代理占位符。然后,对服务代理的调用将被阻止,直到可以填充服务(而不是像声明性服务那样返回“null”)。如果您熟悉或熟悉Spring IOC和类似的依赖注入,那么蓝图服务将立即可以理解。


答案 2

此处重点介绍了早期更改。

特别是,RFC 119 - 分布式OSGi功能很有趣:

此解决方案为分布式 OSGi 处理定义了最低级别的特性/功能,包括服务发现和对外部环境的访问。

EventAdmin(在41中引入)相结合,将允许更容易地实现基于OSGi的分布式服务(目前使用ECF实现)。)


推荐