快速业务通道

Java开发2.0: 使用Hibernate Shards进行切分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
和切分 1 的配置几乎相同。)

现在我需要做的就是连接我的域对象,在本示例中,因为它们依赖于 Hibernate,需要一个 SessionFactory 类型进行工作。我将仅使用我的 ShardedSessionFactoryBuilder 提供一种 SessionFactory 类型,如清单 9 中所示:

清单 9. 在 Spring 中连接 POJO

<bean id="mySessionFactory"  factory-bean="shardedSessionFactoryBuilder"  factory-method="createSessionFactory"> </bean> <bean id="race_dao" class="org.disco.racer.domain.RaceDAOImpl">  <property name="sessionFactory">  <ref bean="mySessionFactory"/>  </property> </bean>

如您在 清单 9 中所看到的,我首先在 Spring 中创建了一个类似工厂的 bean;也就是说,我的 RaceDAOImpl 类型有一个名为 sessionFactory 的属性,是 SessionFactory 类型。之后,mySessionFactory 引用通过在 ShardedSessionFactoryBuilder 上调用 createSessionFactory 方法创建了一个 SessionFactory 示例,如 清单 4 中所示。

当我为我的 Race 对象示例使用 Spring(我主要将其作为一个巨型工厂使用,以返回预配置的对象)时,一切事情就都搞定了。虽然没有展示,RaceDAOImpl 类型是一个利用 Hibernate 模板进行数据存储和检索的对象。我的 Race 类型包含一个 RaceDAOImpl 示例,它将所有与数据商店相关的活动都推迟至此。很默契,不是吗?

请注意,我的 DAO 与 Hibernate Shards 在代码方面并没有绑定,而是通过配置进行了绑定。配置(如 清单 5 中的)将它们绑定在一个特定切分 UUID 生成方案中,也就是说了我可以在需要切分时从已有 Hibernate 实现中重新使用域对象。

Java开发2.0: 使用Hibernate Shards进行切分(6)

时间:2010-10-26 IBM Andrew Glover

切分:使用 easyb 的测试驱动

接下来,我需要验证我的切分实现可以工作。我有两个数据库并通过距离进行切分,所以当我创建一场马拉松时(10 英里以上的比赛),该 Race 示例应在切分 1 中找到。一个小型的比赛,如 5 公里的比赛(3.1 英里),将在切分 0 中找到。创建一场 Race 后,我可以检查单个数据库的记录。

在清单 10 中,我已经创建了一场马拉松,然后继续验证记录确实是在切分 1 中而非切分 0 中。使事情更加有趣(和简单)的是,我使用了 easyb,这是一个基于 Groovy 的行为驱动开发架构,利用自然语言验证。easyb 也可以轻松处理 Java 代码。即便不了解 Groovy 或 easyb,您也可以通过查看清单 10 中的代码,看到一切如期进行。(请注意,我帮助创建了 easyb,并且在 developerWorks 中对这个话题发表过文章。)

清单 10. 一个验证切分正确性的 easyb 故事中一段摘录

scenario "races greater than 10.0 miles should be in shard 1 or db02", {  given "a newly created race that is over 10.0 miles", {   new Race("Leesburg Marathon", new Date(), 26.2,       "Race the beautiful streets of Leesburg!").create()  }  then "everything should work fine w/respect to Hibernate", {   rce = Race.findByName("Leesburg Marathon")   rce.distance.shouldBe 26.2  }  and "the race should be stored in shard 1 or db02", {   sql = Sql.newInstance(db02url, name, psswrd, driver)   sql.eachRow("select race_id, distance, name from race where 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号