如果开发web项目,离不开ORM框架。我个人比较熟悉Hibernate。本来,可以使用IPOJO的扩展模式进行扩展点检测,但是IPOJO的资料很少,而且例子太不给力,所以,自己按照Eclipse的扩展点机制写了个简单的插件,host-Register,来提供扩展点的衔接。他的api包是host-Register-api,这是OSGI鼓励的服务发布方式:api和实现分开在两个bundle之中。
host-Register:Hibernate扩展注册插件的实现
host-Register-api:Hibernate扩展注册插件的api
host-Hiberbundle:Hibernate bundle,注册了一个扩展点,并且加入了Hibernate的核心jar
host-HiberExtension:Hibernate的扩展bundle,扩展了一个Bulletin实体,将其持久到Mysql数据库
host-HiberClient,:Hibernate扩展实现的测试例子,实验是否成功。
说明:这次属于试验性质的插件扩展,可能存在一些bug,以及调试过程中的print信息尚未去除。这次扩展使用,是根据《osgi进阶--模式与最佳实践.pdf》一本书中的一些例子写的,一些详细的调试方式请参照这本书。但是,本文会讲解两种调试方式:Equinox 和felix2.0.4。一些OSGI基础的知识,请参照《OSGI实战.pdf》
Source源码和编译后的bin包如下:
http://download.csdn.net/detail/icecream0/4318333
环境如下:
环境1:Eclipse的Equinox:
图1
这是Eclipse Equinox的启动配置,启动以后界面如下:
图2
可以将HibernateExtensionBin中的host-Hiberbundle 、host-HiberExtension、host-HiberClient 以此安装到OSGI环境之中。
安装命令
install file:/D:/plugin/hostHiberbundle_1.0.0.201205211454.jar /**file:/以后的路径,是本地环境中,您的host-Hiberbundle_*.jar存放的路径
以此安装完成以后,打开mysql的客户端程序:截图如下:
图3
看到如上图所示,表明Hibernate工作正确。
环境2:Felix2.0.1
下载felix2.0.1
将host-Register、host-Register-api放到 Felix_HOME/bundle/下
启动felix:
进入命令行,将命令锁定大felix_home
>java -jar bin/felix.jar
如下图:
图4
看到如图所示信息,说明Register插件已经正常工作,当中会打印出一些测试信息,不必在意。
安装剩余的host-Hiberbundle、host-HiberExtension、host-HiberClient方式和Equinox一样。也可以将这三个jar文件放到felix_home/bundle/下,直接启动felix,效果一样。
注意:在这里,Host-Hiberbundle 源文件中的:ehcache.xml 和com.bing.cacheProvider.*在Felix或者Equinox中是不必须的,这是为后来集成到Struts2、tomcat之中的时候所需要的,在《三》中,如果没有这两个,会报一个EhCacheProvider找不到ehcache-failsafe.xml错误,原因是OSGI中,资源的协议都是bundle,而现有的Hibernate框架无法解析bundle开头的路径协议。后边再讲。
安装完成以后,mysql出现了上面图3所示的效果,说明成功。
开发过程中注意:
在开发过程中,总是报一个错误:就是http://blog.csdn.net/icecream0/article/details/7568763
做法那篇博文中已经讲了。还有一个注意的,就是META-INF/MANIFEST.MF中,必须导入javax.xml,这个错误在Equinox中没有体现出来,但是在felix中出现了,原因就是需要导入javax.xml。
说明:这个扩展小例子只是为了探索Hibernate以及OSGI,并不完善。如果需要应用到实际项目中,最好使用Eclipse的扩展框架,或者IPOJO。