BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Bundle.update:OSGi现状

| 作者 Alex Blewitt 关注 4 他的粉丝 ,译者 张龙 关注 12 他的粉丝 发布于 2009年10月23日. 估计阅读时间: 9 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

OSGi 4.2已经发布一月有余了(查看InfoQ的报道),在这一个月当中都发生了哪些事情呢?

今年初发布的Equinox 3.5实现了OSGi规范草案,而最近发布的Apache Felix 2.0也提供了对OSGi 4.2的支持。除此之外,前几天发布的Knopflerfish 3.0 beta除了框架加载器还在开发当中外已经实现了4.2核心。

两周前发布的Apache Karaf 1.0构建在核心框架之上,其目的在于形成一个独立于引擎的OSGi框架,同时带有几个事先打好包的bundle,比如Blueprint、provisioning、日志、远程访问(通过SSH)等。对于那些OSGi新手来说,这是一个很好的起步点,因为它把所有东西都已经打好包了,就像是构建在标准Linux内核之上的Linux分发一样,可以提供额外的特性和管理功能。

近日SpringSource(已经被VMware收购)发布了dm Server 2.0M5,该版本也为Blueprint服务提供了OSGi参考实现(查看InfoQ的报道)并使用了嵌套框架(nested framework)特性。该特性在OSGi 4.2意见征集时被提出来,但却被搁置到未来版本中,OSGi框架可以利用该特性为特定的应用创建内部框架(在dm Server术语中叫做region)。这样我们就可以在系统中安装多个应用并将这些应用与其他框架隔离开来。从中获得的经验一定会为下一版本的OSGi铺平道理.

近日Jetty 7.0发布了(查看InfoQ的报道),它既能作为独立的Java Web引擎,也可以嵌入到其他应用中(包括OSGi和传统的Java)。Oracle也宣布了WebLogic路线图,其中就包含了正在进行当中的基于OSGi的microService架构。最后,Sun开发的GlassFish服务器也发布了V3 Preview,该版本也基于OSGi,大家可以下载使用。

OSGi企业专家组正致力于定义一套OSGi服务(比如解析JNDI和Web Servlet),同时也已经定义好了OSGi远程服务,这部分内容已经成为4.2规范的组成部分了。专家组希望在明年初发布一个版本,但目前的情况是每个主流的应用服务器的运行时都基于OSGi。

OSGi系统的运行是件轻而易举的事情,但构建却不是那么回事了。虽然像Ant之类的工具可以处理平的类路径、公共包可视化之类的事情,但OSGi运行时提供了一个更加模块化的类路径(既包括运行时,也包括编译期)。现有的构建方案如Eclipse PDE对于特定的用例(如构建Eclipse插件)没什么问题,但却无法做到独立于IDE或是客户化的构建。目前其他的构建引擎(如基于Any/Ivy的Apache Sigil,其目标是不仅支持Eclipse,还要支持NetBeans下的OSGi开发)也取得了长足的进展。尽管还处在孵化期,但最近Apache Sigil已经可以实现自我构建,今年底就将发布版本了。

现在Pax Construct已经成为基于Maven构建的不可或缺的手段,它联合使用了bnd工具,而后者则被Felix maven bnd插件所用。甚至还有人想从Maven仓库中构建Eclipse,这样我们就可以创建基于Maven的OSGi bundle并使用基于Eclipse的bundle了。然而最初这只适合于一小撮项目,他们可以展示这类系统的好处和必要性。

与此同时,Eclipse正致力于与另一个项目进行协同构建,这次叫做B3。这么做并不会改变Eclipse项目的构建方式,相反,其目标在于将当前的PDE构建与其他构建/部署系统如Buckminster和基于Hudson的构建系统联合起来。

现在NetBeans仍然徘徊在OSGi之外,这是因为netisgo(为NetBeans提供了OSGi支持)仍处在开发当中。另一方面,IntelliJ 9.0预览版于近日发布了,社区版与旗舰版(在社区版的基础上提供了额外的插件)都提供了OSGi支持。

Eclipse 3.6M2已经发布几周了,它是Eclipse平台下一版本的里程碑版本。其Equinox支持包含了OSGi EventAdmin,这在目前正在开发当中的OSGi平台的异步支持中得到了广泛的应用(以前Equinox所提供的EventAdmin是个单独下载的bundle,这意味着没几个人会使用到它;由于合并到了RCP中,默认情况下就可以使用它了,因此其使用的范围也更加广泛了)。Equinox 3.6M2还为bundle提供了加载期编织的功能,这是通过在bundle加载期利用AspectJ注入代码实现的。除此之外,Equinox控制台也变成多会话的了,这样多个用户就可以同时连到远程实例上了。

最近在工具领域中Eclipse E4 1.0M1异军突起。Eclipse E4是Eclipse平台在JavaScript运行时(如Web浏览器)上的一个分支,其关注点在于异步。Eclipse 3.x中的很多行为都是同步的,这意味着用户的行为会阻塞界面的响应。为了支持远程客户端,Eclipse修改了行为以支持异步访问,其计划是在未来将这些内容融合进Eclipse 3.x当中。其所提供的一个特性就是在纯JavaScript中创建OSGi bundle,大家可以访问E4/JavaScript wiki来了解它是如何借助于JSFramework和JSConstants对象进行工作的。我们期待着E4 1.0M1的发布。

未来6个月要召开不少大会,OSGi无疑将成为一个明星。首先就是下周的SpringOne America,届时将公布Burton Group 2nd Annual OSGi的调查结果(请花点时间填一下调查吧)。接下来就是本月底的EclipseCon Summit Europe,然后就是下个月的QCon SF。明年1月份将召开OSGi DevCon London 2010,紧跟其后的是3月底的QCon London以及将于加利福尼亚举行的EclipseCon 2010

全球的OSGi用户群在蓬勃发展着,最近由Tara Simpson of Instil SoftwareParemus举办的OSGi in Anger 对电信系统中应用OSGi以确保远程管理并提供服务的经验进行了探讨。后续的讨论在酒吧进行(由Luminis赞助),收到了很好的效果。由SkillsMatter记录的演示资料与视频放在了会议主页上。很多项目从貌似的模块系统迁移到了OSGi上,这有助于发现遗漏的包;Jetty在迁移到Eclipse上也遇到了同样的问题。一旦这些系统迁移到OSGi上人们就会觉得如果没有OSGi的话,想要构建这些复杂系统将是一件多么难的事情啊。

简单模块系统怎么样了呢?它的目标是为OSGi和Jigsaw创建一个共同点。虽然一开始是很有前途的,但就运行时空间到底应该成为一个平的类路径(就像现在的Java)还是嵌套类路径(就像OSGi和编译路径),人们众说纷纭。未来的专家组也许可以解决这个问题,但现在似乎还遥遥无期。Neil Bartlett将在伦敦的大会上谈到这个问题

InfoQ上有个关于Java模块化的专题,专题的下一期将在下周发布。

查看英文原文:Bundle.update: the Current State of OSGi

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT