OSGi 4.2有just been released,它使用一些新的RFC来更新4.1规范。那么,OSGi 4.2有什么特别新的东西,哪个框架支持4.2已经(或接近),为什么你要针对4.2框架而不是4.1来针对新开发?
答案 0 :(得分:12)
在大多数情况下,OSGi的点发布(例如4.1-> 4.2)并没有真正改变很多现有行为,因此可以肯定地说,如果你的应用程序依赖于4.1,它将运行在4.2上没有问题。新的是,一些项目已经标准化,这应该能够实现不同OSGi引擎之间更好的互操作性(如Equinox,Felix和Knopflerfish)。
事实上,尽管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服务将立即可以理解。
答案 1 :(得分:0)
This article详细介绍了感兴趣的RFC。引用,
首先必须注意到这一点 这不是一个小的版本 版本号可能会建议。发布 4.2实际上比去年的R4.1更重要。在 有些观点,我甚至会说 比R4发布更重要, 因为那个用法变成了 方式更容易,特别是对于没有 OSGi专家。
答案 2 :(得分:0)
早期的变化是highlighted here。
特别是,RFC 119 - 分布式OSGi功能很有意思:
此解决方案为分布式OSGi处理定义了最低级别的功能/功能,包括服务发现以及对外部环境的访问。
结合EventAdmin
(41中引入),将允许更轻松地实现基于OSGi的分布式服务(目前已实施with ECF)
答案 3 :(得分:0)
当引用绑定不可用时,声明性服务是否实际返回null?在Equinox上,即使我将模式设置为动态模式,如果无法“连线”,我的组件也不会实例化。如你所说,我宁愿把它设置为“null”,这样我就可以有可选的引用绑定并使用动态发现......
此外,我错过了在绑定服务时轻松找到组件属性的可能性(我必须转到Bundle上下文,获取服务引用,迭代和比较 - 不实用)。也许我错过了一些东西。