分享

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

 instl 2014-08-28

  网上提供的关于在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.

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多