学习OSGi有一段时间了,对OSGi项目的开发流程与学习方法做个小总结,也算是自己的学习心得吧,供自己日后学习与参考。
OSGi项目开发流程
工程建立方式
基于eclipse plugin的maven工程
这种工程被eclipse原生支持,可以通过eclipse向导页创建插件工程,通过mvn命令也可以为工程加入插件的nature,但生成后的工 程有可能需要手动处理依赖关系。公司里有一个大项目就是以这种方式创建OSGi工程的,每次导入工程时,都要手动处理一下依赖关系,非常繁杂!
普通的maven project+清单文件方式
这种工程是我比较喜欢的一种,只需要创建一般的maven工程,通过mvn eclipse:eclipse生成的eclipse工程也只需要具体JavaNature即可。需要提供一个给osgi框架解析的清单文件,配置 maven-jar-plugin在打包时用给定的清单文件即可,通过手工控制bundle的依赖关系,久而久之,你会更加理解bundle的运行机制, 当然也存在一定的繁杂!
工程布局方式
最好做一下隔离,把服务接口bundle,服务实现bundle,服务消费者bundle分开,有时还需要一种bundle来承载整个系统对第三方库的依赖,暂且称为三方库依赖bundle,以下是各种bundle的解释
- 服务接口bundle 定义系统所需要所有的接口类,供其他各bundle依赖
- 服务实现bundle 对服务接口的实现,每种实现最好单独一个bundle,便于更新替换
- 服务消费者bundle 服务的消费者,只应依赖于服务接口bundle,而不应触碰具体的实现bundle
- 三方库依赖bundle 管理整个系统对第三方库的依赖,比如log4j等等,做到统一管理
部署方式
当构建好系统后,如何去部署运行呢,有以下几种方式
- 手动install 通过osgi提供的标准命令一个个install,一个个start,非常麻烦
- 使用auto config 通过equinox提供的bundle自动安装特定目录下的所有bundle,但仍然需要手动一个个start,也有些麻烦
- 使用EclipseStarter方式最好 可以自己编写一个启动器,借助EclipseStarter可以更方便的启动并运行你的系统
学习方法与资料
学习方法
- 自己实现小demo,多多看代码,多多写代码,是王道!
- 努力研究Equinox的执行流程,下载源代码,使用eclipse远程调试
查找资料
- 学会使用EclipseHelper功能,这个功能可以通过Help->Help Contents打开,当你不清楚一些osgi配置项,比如osgi.clean等等,你可以通过HelpContents找到答案,这些就相当于一个大的知识库,或者相当于msdn
- 多逛逛OSGi联盟或Equinox的网站,也可以订阅一些开发邮件组,比如osgi-dev之类的
需要看的文档
- OSGi规范 core,可以去OSGi联盟网站下载,介绍了OSGi规范的核心组成部分
- OSGi规范 cmpn,介绍了各种标准服务的规范,比如声明式服务规范等等