osgi正在成为一种趋势,越来越多的项目采用了osgi,越来越多的中间件都开始采取了osgi的标准。身为一名java开发人员,如果你还对osgi结构一无所知,那你真的有点out了。
什么是osgi
osgi的名称来源于其开源组织的名称open services gateway initiative,osgi是一个标准,它致力于提供给java项目一个模块化的底层环境,以及一系列通用的服务(service)。和普通的jvm程序相比,osgi的程序天生拥有动态模块的特点,不同的模块(osgi里称之为bundle)有着独立的生命周期,可以独立进行安装、启动、停止、卸载的操作,模块间的依赖性管理也由osgi提供。你可以看出,osgi非常适合需要进行plugin管理的项目,一个典型的成功案例就是eclipse和它众多的plugin。osgi标准还规范了一系列我们常间的操作,日志、配置文件、事件队列、web开发、jpa&jdbc等等,大部分部署osgi标准的框架都提供了这些服务,这样一方面规范了我们代码的结构,一方面节约了我们开发的时间。
目前基于osgi的框架大概有4个:knopflerfish, apache felix, equinox, spring dm。因为都是基于osgi标准的,他们的大致用法和核心功能是一致的。一般来说一个osgi的组件(bundle)可以轻易的从一个框架迁移到另一个框架。框架的不同主要是体现在他们本身的设计和额外的服务上。根据我的一些经验,对这4个框架进行了一下比较,希望对刚接触osgi或是由于如何选择osgi框架的人有所帮助。
apache felix 最全面的框架
apache felix是apache旗下的一个osgi框架,项目本身非常成熟,已经被用到了很多其他的项目中,例如apache servicemix。它本身提供的服务也是最全的,几乎涵盖了全部的osgi 4.2的标准。除此之外还提供了一些非标准的功能,例如ipojo。框架本身非常紧凑,你只需要3个包加一个shell就可以运行了,无论是开发还是debug都非常简便。除了felix,还有两个项目是和osgi相关的。一个是apache felix karaf,它本身是felix的一个子项目,但他其实是封装了felix提供更高一层的runtime,例如提供了jaas。另一个是apache aries,目前还处于起步阶段,它作为felix的补充,提供osgi企业级规范,包括jpa、jdbc、jta、jndi等等。
总的来说,apache felix是我个人推荐的最佳osgi框架,它简单的结构也更适合出学osgi的开发人员。
equinox 与eclipse完美结合
equinox是eclipse旗下的osgi框架,本身也被eclipse采用,是eclipse注明的pde开发环境的底层。equinox本身也是相当的全面的框架,提供的功能不比felix少多少。但是它功能的分类就稍显混乱,文档和sample也组织的不是很好。事实上相当equinox还是被当做开发eclipse plugin的应用较多,如果你要开发一个web程序,你就会感到它本身的功能和文档不够全面。equinox最大的优势在于它和eclipse结合紧密,只要你安装了pde,你就已经有了equinox,可以方便的在eclipse里设置你开发的bundle,启动、部署等操作也异常简单,而且有专门的debug界面,你还能要求什么呢?
如果你想基于eclipse开发,equinox无疑是好选择。但对于新手而言,有时候会搞混eclipse plugin与osgi的关系。
spring dm 畸形的需求产物
spring dm是spring旗下的osgi框架,spring我想大家都知道了,spring dm的最大特点就是结合了spring框架。我之所以说特点还不是优势,是因为我认为这个需求本身就是错误的。spring和核心就是一个ioc,当然后来它的外延扩大了,提供了越来越多乱七八糟的功能。osgi规范本身就制定了一系列ioc的功能标准,尤其是其中的blueprint其实相当多的借鉴了spring,因此完全没有必要再引入spring充当新的ioc了。spring本身无论是classloader还是配置文件上都与osgi格格不入,之所以有这种需求是因为现在有大量基于spring的项目想要过渡到osgi上。spring还发布了一个app server叫spring dm server,是一个基于spring dm的app server,你会发现你需要加载80+的包来完成一个hello world操作,这种恐怖的依赖性正是spring所带来的。
意识到这个问题的显然不只是我一个人,传闻spring dm和spring dm server都将会移交给eclipse。就目前来说除非你有基于spring项目的移植需求,我不推荐其他任何情况下使用spring dm。
knopflerfish 孤独孤傲
knopflerfish其实是osgi的先行者,但是由于没有强力的靠山,再后来的竞争中显然不如前三者有人气。它本身是一个相当标准osgi框架,提供了绝大多数标准功能,但是无论在人气上,开发进度上,文档完善上都不如其他的三者。
既生瑜,何生亮阿~
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/