InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

OSGi 4.2发布了

作者 Alex Blewitt 译者 张龙 发布于 2009年10月2日

领域
架构 & 设计,
语言 & 开发
主题
Java
标签
OSGi ,
Eclipse

近日OSGi联盟发布了OSGi 4.2规范。虽然早期草案已经发布了,但此次则为最终版。

某些引擎如EquinoxFelix分别在其3.5版和2.0版的时候就已经开始兼容OSGi 4.2了。然而由于4.2版那时还没有发布,这些引擎就不能说兼容于OSGi 4.2。现在4.2版已经发布了,这些团队到底如何来满足规范的要求只是个时间问题了。

此次发布都包含哪些内容呢?InfoQ此前曾报道过关于草案的相关信息,但现在规范最终版已经发布了,下面就是新版的一些内容:

  • 框架加载(Framework Launching)。虽然我们可以从Java应用中运行嵌入式OSGi引擎(比如Equinox的Servlet桥),但这种方式却将应用与具体的引擎绑定在了一起。借助于包装器(比如Pax Runner)可以通过相对简单的方式将特定于引擎的内容编码到引擎中来启动。现在可以通过一种透明的机制进行加载了,这意味着可以加载一个OSGi运行时而无需担心是哪个运行时。这样我们就可以通过替换启动类路径上的JAR文件在Equinox及Felix下测试应用了。
  • 远程服务(Remote Service。过去叫做分布式OSGi及RFC 119,现在称作远程服务的技术是用于连接多个OSGi VM的。远程服务采用了服务的概念(这对于动态OSGi应用来说非常关键)并提供了一种机制以将服务公开给远程使用者(使其可以在本地使用远程服务)。并不像其他方式(比如RMI)那样,远程服务无需实现不同的接口或是抛出受检查的异常。同时它也不会假设万物都会正常工作,而是认为OSGi服务是动态的,无论如何服务都能够在OSGi环境下抛出并处理异常。
  • Blueprint服务(Blueprint Service)。对于熟悉Spring IoC与DI的开发者来说会发现Blueprint服务与其有异曲同工之妙。客户端可以根据外部的配置文件来决定连接到哪些服务上,同时还会动态连接这些服务。就像声明式服务那样,你可以约束所用的服务类型(比如强制与否等),但与声明式服务不同的是,在缺少服务的情况下Blueprint服务会提供一个相应的代理。在客户端代码与服务进行交互时,客户端会被阻塞住直到定位到服务之后。最后,凭借Blueprint服务之类的特性,我们可以避免应用中出现特定于容器的代码,这样无论系统运行在OSGi运行时内部还是外部都是大有裨益的。
  • Bundle跟踪器(Bundle Tracker)。OSGi早就有了一个服务跟踪器(Service Tracker)用于监控进出的服务,Bundle跟踪器是对服务器跟踪器概念的一个延伸,用于监控bundle的信息。此前服务可以通过BundleListener来动态查看进出的bundle,而BundleTracker也达到了同样的高度,就像ServiceTracker之于ServiceListener一样。我们可以通过这个特性执行动态注册之类的功能,就好象是Blueprint服务或声明式服务读取或处理元数据一样。比如说,Web引擎可能会通过HttpService自动扫描新安装的bundle和自动注册的Servlet。
  • 服务钩子(Service Hook)。除了判定当前的服务外,我们还可以拦截服务之间的事件并对其进行过滤。这可用来实现基于角色的许可模型或是根据产品的不同而开启不同的功能集。此外还可以通过拦截另一个bundle的事件而提供代理(或是负载平衡)同时又隐藏这些事件,然后用另一种机制进行代理(比如说分布式服务)。监听器钩子可以按需实现这些功能而无需提前注册。
  • 条件许可(Conditional Permission)。OSGi 4.2中许可的一大变化是增加了DENY访问及允许访问的能力。通过与证书签名的结合,这种方式可以显式指定某个bundle的子集上都允许哪些许可权限。这有助于创建安全的OSGi平台,可以阻止安装那些未授权的bundle。

新的规范还有很多其他变化,比如OSGi bundle具有了自己的MIME类型(application/vnd.osgi.bundle)、指定Bundle-Icon及Bundle-License的能力、声明式服务的变化以允许更少的许可集合(package访问能力而非protected)。DS schema还支持其他的XML元素,这有助于特定于服务的信息的传递。此外,由应用管理员所管理的应用现在可以在完成后获取其返回值了。

Equinox 3.5已经部分支持OSGi 4.2了,Apache Felix在上月初也已经通过了一个测试集(在4.2规范发布前)。我们相信本月底一切都会明朗起来,包括4.2规范的官方定论及测试工具集。

InfoQ就此次新版本的发布请Paremus的创建者与CEO、Paremus Service Fabric OSGi cloud的作者Richard Nicholson谈谈自己的看法:

“在过去几年中,我们一直从事着分布式OSGi系统的构建,非常高兴看到OSGi 4.2规范的发布,此次发布引入了标准的远程服务与Blueprint服务。”

你认为OSGi 4.2中哪些地方最值得关注呢?

查看英文原文:OSGi 4.2 released

译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。

深度内容

专访Jeffery Richter:Windows 8是微软的重中之重

Jeffery Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffery Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。

解析JDK 7的动态类型语言支持

随着JDK 7的发布,字节码指令集终于迎来了第一位新成员——invokedynamic指令。这条新增加的指令是JDK 7实现“动态类型语言(Dynamically Typed Language)”支持而进行的改进之一,也是为JDK 8可以顺利实现Lambda表达式做技术准备。在这篇文章中,我们将去了解JDK 7这项新特性的出现前因后果和它的意义。