OSGi与Spring的整合

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

创新互联建站基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器托管报价,主机托管价格性价比高,为金融证券行业四川电信机房托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。

编辑推荐: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的整合

本文标题:OSGi与Spring的整合
网站URL:http://www.gawzjz.com/qtweb/news0/176550.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联