OSGi 4.2有什么新功能?

AlB*_*lue 11 java osgi

OSGi 4.2 刚刚发布,它通过一些新的RFC来更新4.1规范.那么,OSGi 4.2有哪些特别新的东西,哪些框架支持4.2已经(或接近),为什么你要针对4.2框架而不是4.1来针对新开发?

AlB*_*lue 12

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

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

那么,4.2中有什么新东西?

  • 服务挂钩
  • 框架启动

并且,在纲要中

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

服务挂钩

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

框架启动

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

远程服务

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

捆绑追踪器

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

蓝图服务

蓝图服务类似于Spring,因为它提供了用于配置bundle的依赖注入机制.在某些方面,它类似于声明性服务; 但是蓝图服务以不同的方式做事.此外,与声明性服务(只能处理存在的服务)不同,蓝图服务可以提前为服务创建代理占位符,该服务将在稍后上线.然后,对服务代理的调用将被阻塞,直到可以填充服务(而不是像声明性服务那样返回'null').如果您对Spring IOC和类似的依赖注入感到满意或熟悉,那么Blueprint服务将立即可以理解.