OSGi的强大还在于它的声明式服务(DS - Declarative Services),乍一看,和Spring的依赖注入(DI - Dependency Injection)很相像,于是不免会想到OSGi是否会对Spring产生巨大的冲击呢?其实这种担心完全没有必要,相反二者的结合反而会让OSGi如虎添翼,强者更强。
Spring组织早在2006年已经开始了OSGi的整合工作,由于OSGi独特的类加载机制和一些其他的第三方类包不同,所以整合有一定难度进展比较缓慢。类加载问题也将是我们在使用OSGi开发时遇到的最多的问题。
第一步先搞定Spring的jar包。据说Spring2.1会支持OSGi,为省点力气我采用的是Spring2.1 m3版,里面的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.0 M2。一共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-in Development->Target Platform,在右侧会看到Eclipse加载的所有插件包,选中我们需要的(除了上面提到的之外):org.eclipse.osgi, org.eclipse.osgi.util,org.eclipse.equinox.log(如果没有这个,需要到Eclipse官网下载 Equinox的jar包)。
然后打开Run->OSGi Framework->Bundles,创建一个运行环境,把我们上一步添加的jar包选中,特别将spring-osgi-extender的插 件的启动级别改为2。现在来运行一下,在Console窗口的命令提示符(osgi>)下,输入ss,就可以看到各个Bundle的状态;输入 log可以看到启动的日志。随意输入其它非OSGi命令的字符都可以看到命令帮助文档,这点可以测试一下。
如果所有的Bundles都启动了,没有报错,那就表明我们的配置没有什么大的问题。但不代表一切正常,因为Bundle启动时不会对可选择的类库导入进 行检查,虽然启动了但却不能用,而且没有任何重要信息提示,这是后来郁闷我很久的重要原因。这时我们就需要用到插件调试模式了(不是指Run-Debug 的调试),打开Run->OSGi Framework->Arguments,在Program arguments窗口的参数最后面加上"-debug"就可以打开调试模式。先别高兴,这只是第一步。检查Eclipse目录下是否有一个 “.options”文件,如果没有,就到plugins目录下找org.eclipse.osgi_$version.jar,将这个jar包中的 “.options”文件copy一份放到Eclipse目录下。打开这个文件就可以看到好多跟debug相关的配置,把 org.eclipse.osgi/debug的配置改成true,就可以了。如果想看更多的debug信息,可以自己决定修改其余的配置。
然后再来运行一下,Console居然出来了无数行的插件调试信息,有点头大,在参数中去掉“-debug”它们就销声匿迹了。
关于Eclipse的插件配置还有好多,只是由于手头缺少资料,也没有尝试。
分享到:
相关推荐
spring-osgi-1.2.1-with-dependencies.zip spring-osgi-1.2.1-with-dependencies.zip spring-osgi-1.2.1-with-dependencies.zip
- **Spring Bundle Context**:它是Spring与OSGi之间的桥梁,允许Spring应用访问OSGi服务并参与OSGi事件处理。 5. **使用场景** Spring OSGi适用于大型企业级应用,尤其是那些需要高可扩展性和动态部署能力的系统...
总结来说,“spring-osgi-1.2.1-with-dependencies”是一个集成了Spring与OSGi的完整包,它提供了在OSGi环境中运行Spring应用所需的所有组件和服务。通过理解和掌握这个包,开发者可以更好地利用OSGi的模块化优势,...
spring-osgi-1.2.0-with-dependencies.zip spring-osgi-1.2.0-with-dependencies.zip spring-osgi-1.2.0-with-dependencies.zip
赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...
2. Spring DM库:如`spring-osgi-core`, `spring-osgi-io`, `spring-osgi-extender`等,提供了与OSGi环境交互的接口和工具。 3. OSGi框架库:如`org.eclipse.osgi`,这是实现OSGi规范的实现,例如Equinox或Felix。 4...
spring-osgi-core-1.2.1.jar spring-osgi-core-1.2.1-sources.jar spring-osgi-extender-1.2.1.jar spring-osgi-extender-1.2.1-sources.jar spring-osgi-io-1.2.1.jar spring-osgi-io-1.2.1-sources.jar spring-...
建议下载包含所有依赖项的压缩包,例如`spring-osgi-1.0.2-with-dependencies.zip`或最新版本的zip文件。 **2. 解压缩文件** 将下载的压缩包解压缩到一个方便访问的位置,例如`C:\software`目录下。 **3. 启动...
Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的产物,它允许在OSGi容器中使用和管理Spring应用。OSGi是一种Java模块化系统,它提供了动态部署、版本控制和依赖管理等功能,极大地...
Spring-DM指的是 Spring ...Spring-DM 的主要目的是能够方便地将 Spring 框架和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用OSGi框架提供的服务,将应用变得 更加模块化。
赠送jar包:osgi-resource-locator-1.0.1.jar; 赠送原API文档:osgi-resource-locator-1.0.1-javadoc.jar; 赠送源代码:osgi-resource-locator-1.0.1-sources.jar; 赠送Maven依赖信息文件:osgi-resource-locator...
标题"spring-osgi-1.2.0.zip"表明这是一个包含Spring OSGi 1.2.0版本的压缩包。这个版本可能包含了Spring框架与OSGi集成的相关库、文档、示例代码等资源,便于开发者在OSGi环境中使用Spring。 描述中提到"spring1.2...
Spring与Mybatis的整合可以让我们方便地进行数据库操作,并通过Spring的事务管理确保数据一致性。 Spring MVC是Spring框架的一部分,用于构建Web应用程序。它处理HTTP请求,将请求映射到控制器,然后通过模型和视图...
"基于OSGi和Spring开发Web应用" OSGi(Open Service Gateway Initiative)是一种面向服务的框架,能够提供动态模块部署和管理的能力。Spring 是一个轻量级的J2EE开发框架,特点是面向接口编程和非侵入式的依赖注入...
标题中的“Spring与OSGI整合 计算器例子(转) +附整合代码和spring-osgi核心jar”表明我们将探讨如何将Spring框架与OSGi(Open Services Gateway Initiative)模块化系统进行集成,并通过一个计算器的例子来说明这个...
自制CHM版的API文档,带索引。 注:如果各位下载后打开或无法显示页面,请在CHM文件右键—属性—解除锁定即可。
标题 "RAP 整合 Spring(基于 Spring-osgi)" 暗示了本文将探讨如何在 RAP(Remote Application Platform)框架中集成 Spring 框架,并利用 Spring-osgi 进行服务管理和依赖注入。RAP 是一个用于构建富客户端应用...
实测可用
实测可用
实测可用