OSGi与Spring的整合
创始人
2024-03-30 03:11:25
0

OSGi的强大在于它的声明式服务(DS-DeclarativeServices),乍一看,和Spring的依赖注入(DI-DependencyInjection)很相像,于是不免会想到OSGi是否会对Spring产生巨大的冲击呢?其实这种担心完全没有必要,相反二者的结合反而会让OSGi如虎添翼,强者更强。

51CTO编辑推荐:OSGi入门与实践全攻略

Spring组织早在2006年已经开始了OSGi的整合工作,由于OSGi独特的类加载机制和一些其他的第三方类包不同,所以整合有一定难度进展比较缓慢。类加载问题也将是我们在使用OSGi开发时遇到的最多的问题。

第一步先搞定Spring的jar包。据说Spring2.1会支持OSGi,为省点力气我采用的是Spring2.1m3版,里面的jar包已经开始支持OSGi,但类库中没有加入OSGi的整合类库,比较郁闷。下载后的jar包需要修改一下里面的元数据文件MANIFEST.MF,找到Import-Package,将org.osgi.framework的版本修改为1.4.0,这个OSGi类库在Eclipse3.3版本中提供有。然后在文件末尾添加DynamicImport-Package:*,免得调试的时候总找不到类定义。

这里我提一个建议:用Eclipse创建一个插件工程,将Spring的类库导入,作为我们使用的Spring库,而不是从官方网站下载的。这样一者有助于我们理解OSGi的类加载机制,确定程序在运行时到底需要依赖那些类包,为什么依赖;二者有助于以后我们自己创建自己的插件。唯一的缺点就是需要不时的处理NoClassDefFoundError。

第二步搞定OSGi的整合类库,先到http://www.springframework.org/osgi下载最新的Spring-OSGi整合类库,最新的版本是1.0M2。一共3个jar包:core、extender、io,然后分别打开jar包,修改MANIFEST.MF文件。在文件中找到Import-Package,将引用的Spring版本修改为所使用的Spring版本,例如我使用的是2.1。

第三步设置Eclipse插件环境,这一步比较麻烦。

首先添加和设置jar包。将Spring-OSGi的3个jar包,放到Eclipse安装目录的plugins目录下,为更好的识别和修改,建议采用Eclipse插件的link机制,单独建一个目录来放我们的测试jar包。另外还需要支持Spring的jar包(下载Spring2.1时自带的),包括:asm,backport-util-concurrent,cglib-nodep,commons-attributes,commons-collections,aspectj,由于我在做OSGi、Spring和Hibernate的整合,所以有些是支持Hibernate的。好了现在该启动Eclipse,打开Windows->Preferences->Plug-inDevelopment->TargetPlatform,在右侧会看到Eclipse加载的所有插件包,选中我们需要的(除了上面提到的之外):org.eclipse.osgi,org.eclipse.osgi.util,org.eclipse.equinox.log(如果没有这个,需要到Eclipse官网下载Equinox的jar包)。

然后打开Run->OSGiFramework->Bundles,创建一个运行环境,把我们上一步添加的jar包选中,特别将spring-osgi-extender的插件的启动级别改为2。现在来运行一下,在Console窗口的命令提示符(osgi>)下,输入ss,就可以看到各个Bundle的状态;输入log可以看到启动的日志。随意输入其它非OSGi命令的字符都可以看到命令帮助文档,这点可以测试一下。

如果所有的Bundles都启动了,没有报错,那就表明我们的配置没有什么大的问题。但不代表一切正常,因为Bundle启动时不会对可选择的类库导入进行检查,虽然启动了但却不能用,而且没有任何重要信息提示,这是后来郁闷我很久的重要原因。这时我们就需要用到插件调试模式了(不是指Run-Debug的调试),打开Run->OSGiFramework->Arguments,在Programarguments窗口的参数最后面加上"-debug"就可以打开调试模式。先别高兴,这只是第一步。检查Eclipse目录下是否有一个“.options”文件,如果没有,就到plugins目录下找org.eclipse.osgi_$version.jar,将这个jar包中的“.options”文件copy一份放到Eclipse目录下。打开这个文件就可以看到好多跟debug相关的配置,把org.eclipse.osgi/debug的配置改成true,就可以了。如果想看更多的debug信息,可以自己决定修改其余的配置。

然后再来运行一下,Console居然出来了无数行的插件调试信息,有点头大,在参数中去掉“-debug”它们就销声匿迹了。

关于Eclipse的插件配置还有好多,只是由于手头缺少资料,也没有尝试。

您正在阅读:OSGi与Spring的整合

【编辑推荐】

  1. Spring Batch 2将支持工作划分和基于注解的配置
  2. 实例说明如何集成Spring和Struts
  3. 浅谈Struts+Hibernate+Spring的整合方法

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...