arm-linux

http://armboard.taobao.com/

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

                                           开源项目SpringOSGINoDM

         —OSGI环境下使用Spring的唯一完美解决方案             

                      

                                          

 

 

 

 

2008811日北京奥运会期间,我创建了开源项目SpringOSGINoDM。地址是:

http://code.google.com/p/springosginodm/

例子的地址是:

http://code.google.com/p/springosginodmsample

 

本项目和Spring官方的Spring-OSGI项目(又名SpringDM:Spring Dynamic Modules for OSGi)不同。Spring-OSGI项目使用的动态为OSGI插件创建ApplicationContext的机制有着致命的缺点。

SpringOSGINoDM项目才是OSGI环境下使用Spring的唯一完美解决方案。

 

 

缘起

  

SpringOSGINoDM项目的起因是2008年的6月份,我要开发一个Eclipse下的GIS项目。因此大量使用了OSGI插件和Eclipse插件开发。

我的项目需要在OSGI插件中使用SpringHibernate和其他一些第三方类库。

我使用了大名鼎鼎的Spring官方的Spring-OSGI项目(又名SpringDM  Spring Dynamic Modules for OSGi   )。

 

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

 

于是我开始了反思,顶着Spring光环的Spring-OSGI是否真的那么先进、完美?!

200883日写了我的反思成果《OSGI+Spring+Hibernate+...完美解决方案[SpringDM]》一文(附在后面)。

 

然后又有了第二篇文章。

最后我决定创建一个开源项目来帮助大家理解和使用这项技术。

 

我的前两个开源项目(OXmlEdnet_sf_interfacecpp)都是发表在sourceforge上,这次这个项目却选择了发表在Google的开源平台上。

因为,sourceforge网站最近经常被长城防火墙封杀。因此才选择了Google平台。Google开源平台界面简洁、实用,虽然功能偏少,但我喜欢。

 

 

 

 

 

项目诞生之初的2Blog

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

 

OSGI+Spring+Hibernate+...完美解决方案[SpringDM]

 

 

 

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

 

 

 

 

例子

为了帮助你使用SpringOSGINoDM这个项目,我创建了一个例子,示范如何使用SpringOSGINoDM项目。

SpringOSGINoDM项目的例子的地址是

http://code.google.com/p/springosginodmsample

 

 

使用SpringOSGINoDM的例子

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

下载需要的项目文件

首先,请下载

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

 

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

 

   然后,解压。这是SpringOSGINoDMEclipse项目。

 

然后,请下载

 

Slf4JLog4JApacheCommonLog1.0.0.rar

 

这是一个OSGI插件,内部使用了log4jSlf4JApache Common LogJar包。只要引入这个插件,你就可以使用log4j编写日志。并且,可以使用Apache Common LogAPI来使用。

 

最后,你需要到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文件。

请确保你的EclipseRCP功能。

 

2,点击同步(Synchronize)。再点击Launch,即可运行。

会出现一个对话框,要求输入用户名和密码。

有效的用户名和密码是:

admin  空密码

shendl  shendl

sdl     sdl

 

 

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

 

 

程序说明

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

 

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

 

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

 

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

 

 

常见问题说明

 

1,类载入重复错误

我碰到过这样的错误

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载入一次即可。

 

 

 

官方资料

详尽资料尽在SpringOSGINoDM开发手册1.0.1[中文版]pdf文档中。http://code.google.com/p/springosginodm/downloads/list

 

 

 

 

                                                  

 

 

 

posted on 2008-08-19 23:18  arm-linux  阅读(1158)  评论(0编辑  收藏  举报