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

OSGi、Spring、Hibernate集成:动态注册实体类

2010-05-29 15:16 369 查看
  网上提供的关于在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.springsource.com/repository/下载。

注:使用前请在OSGi的启动目录下建立目录logs/jta目录。在spring dm2下使用,需要先修改config/com.springsource.kernel.userregion.properties文件,在packageImports=后加入javax.naming.*,还需要安装spring-osgi 2.0.0 M1相关Bundle.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: