Hibernate+Spring多数据库解决方案.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Hibernate+Spring多数据库解决方案 我以前在项目中的探索和实践,写出来与大家分享。 大家有其他好的方式,也欢迎分享。 环境:JDK 1.4.x , Hibernate 3.1, Spring 2.0.6, JBOSS4.0, 开发模式: Service + DAO? ?? 我们项目中需要同时使用多个数据库. 但 Hibernate 不能直接支持,为此我们对比了网上网友的方案,自己做了一点探索。 1. Demo需求 ????? 我们的项目使用一个全省的公共库加十多个地市库的架构。 本文主要说明原理,将需求简化为两库模型。 ????? 主库:User管里,主要是系统管理,鉴权等数据; ????? 订单库:Order 管理,存放订单等业务性数据。 2. 原理: ????? 1) Hibernate 的每个配置文件对应一个数据库,因此多库需要做多个配置文件。本文以两个为例: ??????? 主库 hibernate_sys.cfg.xml, ??????? 订单库 hibernate_order.cfg.xml ??????? 每个库,Hibernate 对应一个 sessionFactory 实例,因此Hibernate下的多库处理,就是在多个 sessionFactory 之间做好路由。 ????? 2) sessionFactory 有个 sessionFactory.getClassMetadata(voClass) 方法,返回值不为空时,表示该 VO 类在该库中 ??????? (hbm.xml文件配置在了对应的hibernate.cfg.xml中), 该方法是数据路由的核心和关键所在。 ???????? 因此,? User.hbm.xml 配置在 hibernate_sys.cfg.xml , ???????? Order数据位于配置到 hibernate_order.cfg.xml ????? 3) 多库处理时,需要使用 XA 事务管理。本例中使用 Jboss4.0 来做JTA事务管理;用JOTM,其他应用服务器原理相同。 3.? 实现 ??? 1) 为做多 sessionFactory 实例的管理,设计 SessionFactoryManager 类,功能就是做数据路由, ????? 控制路由的核心是 sessionFactoryMap 属性,它按 dbFlag=sessionFactory 的方式存储了多个库的 引用。 ??????? 判断路由要使用的核心方法就是 ??????? public Session getSessionFactory(Class voClass) ,它根据传入的 voClass,返回对应sessionFactory 的 当前 session。 ??????? SessionFactoryManager? 类的详细实现原理以后为大家说明。 ??? 2) Hibernate配置 ??????? 主库 hibernate_sys.cfg.xml Xml代码 ?session-factory?? ?? ?!--?多数据源使使用,需要在J2EE服务器上配置XA数据源?--?? ?? ?property?name=connection.datasourceXAOracleDS_MAIN/property?? ?? ?property?name=hibernate.session_factory_namehibernate1/property?? ?? ?property?name=hibernate.transaction.factory_classorg.hibernate.transaction.JTATransactionFactory/property?? ?? ?property?name=transaction.manager_lookup_classorg.hibernate.transaction.JBossTransactionManagerLookup/property?? ?? ?property?name=jta.UserTransactionUserTransaction/property?? ?? ??? ?? ?property?name=dialectorg.hibernate.dialect.OracleDialect/property?? ?? property?name=jdbc.batch_size5/property?? ?? property?name=jdbc.fetch_size5/property?? ?? property?name=max_fetch_dep

文档评论(0)

ea238982 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档