在前两节中,分别做了felix Struts2集成和Hibernate在OSGi中的使用,这一节将这两个功能集成到一起。
1、将webapp加到Eclipse中:截图如下:
图1
2、将host-register、host-Register-api放到src/bundles/2/下,将host-Hiberbundle、host-HiberExtension放到src/bundles/3/下。这是因为在web开发中,2、3代表了启动的优先级。
3、然后启动tomcat,将webapp加入到tomcat运行中。
4、打开浏览器,输入: http://localhost:8080/webapp/osgi/admin/shell.action,出现shell界面,输入ps,得到如下:
图2
5、安装本节例子:
图3
使用File->export->Deployable plug-ins and fragments->选择输出地点
解压,找到com.example.login.web*.jar
在图2所示的命令行中输入:
install file:/你的com.example.login.web*.jar地址
install命令执行以后,会给该bundle分配一个bundleid,
start bundleid
结果如图:
图4
6、访问:http://localhost:8080/webapp/login/loginpageshow.action,输入bing,123
效果如下:
图5
点击submit,
出现结果:
图6
现在打开mysql客户端,可以看到<二>中的图2的效果,说明调用Hibernate成功。
说明:在本例中,功能中并没有和Hibernate结合很紧密,只是调用了Hibernate的service,主要是通过这个功能测试该集成框架在web中是否work well。调通了以后,可以根据自己喜好、需要,任意修改程序以及实现。
注意:在将Hibernate集成到web中,会出现Hibernate的EhCacheProvider无法找到ehcache-failsaft.xml文件,原因是该文件在lib/ehcache.jar的跟路径下,但是当ehcache作为host-Hiberbundle安装到web中以后,所有的资源属于该bundle,不存在jar的资源url,所以,原来的cacheProvider会出现无法找到ehcache-failsaft.xml的错误。经过查询资源以及Hibernate的ehcache使用方法,可以在Hibernate.cfg.xml中配置如下
<property name="hibernate.cache.provider_class">com.bing.cacheProvider.MyCacheProvider</property>
<property name="hibernate.cache.provider_configuration_file_resource_path">/ehchache.xml</property>
<property name="cache.use_query_cache">true</property>
第三条说明开启二级缓存。第一条制定自定义的CacheProvider,源码中的Provider类,仅仅是修改了寻找ehcache.xml文件的地址以及方法,其他并无大改。
第二条指定了配置文件的位置。
这些属性配置,以及cacheProvider类,可以根据自己需求任意修改,或者提供更好的方法解决上述exception。
源码地址: