网上提供的关于在OSGi环境下的集成Spring、Hibernat的方案总是存在以下一种或多种问题: 1、不能提供多个SessionFactory的统一管理 2、不能提供实体类的动态注册 3、不方便测试 4、平台依赖度高 先看看我提供的解决方案中各Bundle之间的关系图: 从上图可看出,业务实体与业务逻辑Bundle是独立自然的,不需要象某些解决方案把实体类作为Hibernate的Fragment。实际上,本解决方案中完全可以不将实体类在META-INF.MF文件中Export. 解决思路: 1、org.span.orm中定义SessionFactoryService接口并提供其抽象实现,由org.span.orm.hibernate来实现这个接口。 2、在会话工厂服务定义Bundle中通过org.span.orm和org.span.hibernate提供的类,定义SessionFactoryService服务的配置,并注册为SessionFactoryService服务。 3、在业务实体与业务逻辑Bundle中,注册实体类时,首先从SessionFactoryService服务中得到相关SessionFactory的配置,通过此配置来构造一个包括了它注册的实体类的SessionFactory,再将其中的实体类关系合并到SessionFactoryService实现中的SessionFactory中。这其中因org.hibernate.impl.SessionFactoryImpl中所有的实体映射关系是保存到一些不可修改的final Map对象中,因此只能通过访问私有成员变量的方式去合并两个SessionFactoryImpl. 方案特性: 每个业务实体与业务逻辑Bundle是独立自然的 通过SessionFactoryService服务对所有会话工厂统一管理。 在SessionFactoryService服务中使用内置HSQLDB为每个SessionFactory(根据名称区别)提供默认的会话工厂(使用内存数据库或文件数据库),方便测试。 方案不依赖特定OSGi平台。
源代码、文档及Bundle下载:http://download.csdn.net/source/2406756 测试环境:equinox3.5.2。其它用到的Bundle包括hibernate、hibernate-annotation、hsqldb、spring、spring-osgi等。请到http://www./repository/下载。 注:使用前请在OSGi的启动目录下建立目录logs/jta目录。在spring dm2下使用,需要先修改config/com.springsource.kernel.userregion.properties文件,在packageImports=后加入javax.naming.*,还需要安装spring-osgi 2.0.0 M1相关Bundle.
|
|
来自: instl > 《Spring MVC》