您的位置:首页 > 编程语言 > Java开发

开源项目SpringOSGINoDM—OSGI环境下使用Spring的唯一完美解决方案

2008-08-19 23:18 2096 查看
开源项目[/b]SpringOSGINoDM[/b]
—OSGI[/b]环境下使用[/b]Spring[/b]的唯一完美解决方案[/b] [/b]






2008年8月11日北京奥运会期间,我创建了开源项目SpringOSGINoDM[/b]。地址是:[/b]
http://code.google.com/p/springosginodm/[/b][/b]
例子的地址是:[/b][/b]
http://code.google.com/p/springosginodmsample[/b][/b]

本项目和Spring官方的Spring-OSGI项目(又名SpringDM:Spring Dynamic Modules for OSGi)不同。Spring-OSGI项目使用的动态为OSGI插件创建ApplicationContext的机制有着致命的缺点。
SpringOSGINoDM项目才是OSGI环境下使用Spring的唯一完美解决方案。


缘起

SpringOSGINoDM项目的起因是2008年的6月份,我要开发一个Eclipse下的GIS项目。因此大量使用了OSGI插件和Eclipse插件开发。
我的项目需要在OSGI插件中使用Spring,Hibernate和其他一些第三方类库。
我使用了大名鼎鼎的Spring官方的Spring-OSGI项目(又名SpringDM Spring Dynamic Modules for OSGi )。

但是,经过1个多月的苦心研究,创建了几十个Eclipse插件项目,始终不能解决问题。

于是我开始了反思,顶着Spring光环的Spring-OSGI是否真的那么先进、完美?!
在2008年8月3日写了我的反思成果《OSGI+Spring+Hibernate+...完美解决方案[非SpringDM]》一文(附在后面)。

然后又有了第二篇文章。
最后我决定创建一个开源项目来帮助大家理解和使用这项技术。

我的前两个开源项目(OXmlEdnet_sf_interfacecpp)都是发表在sourceforge上,这次这个项目却选择了发表在Google的开源平台上。
因为,sourceforge网站最近经常被长城防火墙封杀。因此才选择了Google平台。Google开源平台界面简洁、实用,虽然功能偏少,但我喜欢。





项目诞生之初的2篇Blog

项目诞生的2篇Blog,是整个项目的理论基础。

《[/b]OSGI+Spring+Hibernate+...[/b]完美解决方案[/b][[/b]非[/b]SpringDM][/b]》[/b][/b]



《[/b]OSGI[/b]服务发布和导入的自主实现[/b] [/b]—[/b]OSGI+Spring+Hibernate+...[/b]完美解决方案[/b][[/b]非[/b]SpringDM][/b]之二》[/b][/b]




例子

为了帮助你使用SpringOSGINoDM这个项目,我创建了一个例子,示范如何使用SpringOSGINoDM项目。
SpringOSGINoDM[/b]项目的例子的地址是[/b][/b]
http://code.google.com/p/springosginodmsample[/b][/b]


使用SpringOSGINoDM的例子

本项目的所有代码都是Eclipse的项目。目前(SpringOSGINoDM1.0.*版本)我使用的是Eclipse3.3版本。

下载需要的项目文件

首先,请下载
com.google.code.p.springosginodm-src-Plugin.part1.rar

com.google.code.p.springosginodm-src-Plugin.part2.rar

然后,解压。这是SpringOSGINoDM的Eclipse项目。

然后,请下载

Slf4JLog4JApacheCommonLog1.0.0.rar

这是一个OSGI插件,内部使用了log4j,Slf4J和Apache Common Log的Jar包。只要引入这个插件,你就可以使用log4j编写日志。并且,可以使用Apache Common Log的API来使用。

最后,你需要到http://code.google.com/p/springosginodmsample下载2个例子项目。

com.google.code.p.springosginodm.sample.client.service1.0.1.part1.rar

com.google.code.p.springosginodm.sample.client.service1.0.1.part2.rar

com.google.code.p.springosginodm.sample.client.RCPProduct1.0.1.part1.rar

com.google.code.p.springosginodm.sample.client.RCPProduct1.0.1.part2.rar

解压它们。然后导入Eclipse中。

确保这4个项目打开。

设置和运行

1,打开RCPProduct项目中的custom.product文件。
请确保你的Eclipse有RCP功能。

2,点击同步(Synchronize)。再点击Launch,即可运行。
会出现一个对话框,要求输入用户名和密码。
有效的用户名和密码是:
admin 空密码
shendl shendl
sdl sdl


输入正确的用户名和密码,就会进入Eclipse界面。


程序说明

例子是一个Eclipse的RCP程序的参考示例架构。

RCPProduct插件提供了Eclipse的RCP定制。它使用了SpringOSGINoDM。需要的服务则是通过调用Service项目中发布的OSGI Service来实现的。

Service插件是为RCPProduct插件服务的。提供底层的业务逻辑的实现。

整个例子虽然没有真正的业务代码,但已经展示了完整的程序的架构。请读者用心体会。


常见问题说明

1,类载入重复错误

我碰到过这样的错误[/b][/b]
loader constraint violation: loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) previously initiated loading for a different type with name "org/springframework/osgi/context/DelegatedExecutionOsgiBundleApplicationContext"

错误的原因是Eclipse的多个ClassLoader载入了重复的类。按照OSGI的规范说明,各个插件的ClassLoader应该是互相独立的。但是在Eclipse中却不是这样的。
如果你碰到这类问题。只需要把需要重复载入的类发布为OSGI的导出Package,只让一个ClassLoader载入一次即可。



官方资料

详尽资料尽在《[/b]SpringOSGINoDM[/b]开发手册[/b]1.0.1[[/b]中文版[/b]][/b]》[/b]pdf文档中。http://code.google.com/p/springosginodm/downloads/list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐