快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
dResolutionStrategy

当通过键搜索一个对象时,Hibernate Shards 需要一种可以决定首个切分的方法。将需要使用 SharedResolutionStrategy 接口对其进行指引。

如我之前提到的那样,切分迫使您重视主键,因为您将需要亲自管理这些主键。幸运的是,Hibernate 在提供键或 UUID 生成方面表现良好。因此 Hibernate Shards 创造性地提供一个 ID 生成器,名为 ShardedUUIDGenerator,它可以灵活地将切分 ID 信息嵌入到 UUID 中。

如果您最后使用 ShardedUUIDGenerator 进行键生成(我在本文中也将采取这种方法),那么您也可以使用 Hibernate Shards 提供的创新 ShardResolutionStrategy 实现,名为 AllShardsShardResolutionStrategy,这可以决定依据一个特定对象的 ID 搜索什么切分。

配置好 Hibernate Shards 工作所需的三个接口后,我们就可以对切分示例应用程序的第二步进行实现了。现在应该启动 Hibernate 的 SessionFactory 了。

配置 Hibernate Shards

Hibernate 的其中一个核心接口对象是它的 SessionFactory。Hibernate 的所有神奇都是在其配置 Hibernate 应用程序过程中通过这个小对象实现的,例如,通过加载映射文件和配置。如果您使用了注释或 Hibernate 珍贵的 .hbm 文件,那么您还需要一个 SessionFactory 来让 Hibernate 知道哪些对象是可以持久化的,以及将它们持久化到 哪里。

因此,使用 Hibernate Shards 时,您必须使用一个增强的 SessionFactory 类型来配置多个数据库。它可以被命名为 ShardedSessionFactory,而且它当然是 SessionFactory 类型的。当创建一个 ShardedSessionFactory 时,您必须提供之前配置好的三个切分实现类型(ShardAccessStrategy、ShardSelectionStrategy 和 ShardResolutionStrategy)。您还需提供 POJO 所需的所有映射文件。(如果您使用一个基于备注的 Hibernate POJO 配置,情况可能会有所不同。)最后,一个 ShardedSessionFactory 示例需要每个切分都对应多个 Hibernate 配置文件。

创建一个 Hibernate 配置

我已经创建了一个 ShardedSessionFactoryBuilder 类型,它有一个主要方法 createSessionFactory,可以创建一个配置合理的 SessionFactory。之后,我将将所有的一切都与 Spring 连接在一起(现在谁不使用一个 IOC 容器?)。现在,清单 2 显示了 ShardedSessionFactoryBuilder 的主要作用:创建一个 Hibernate 配置:

清单 2. 创建一个 Hibernate 配置

private Configuration getPrototypeConfig(String hibernateFile, List<String>  resourceFiles) {  Configuration config = new Configuration().configure(hibernateFile);  for (String res : resourceFiles) {  configs.addResource(res);  }  return config; }

如您在 清单 2 中所看到的,可以从 Hibernate 配置文件中创建了一个简单的 Configuration。该文件包含如下信息,如使用的是什么类型的数据库、用户名和密码等,以及所有必须的资源文件,如 POJO 所用的 .hbm 文件。在进行切分的情况下,您通常需要使用多个数据库配置,但是 Hibernate Shards 支持您仅使用一个 hibernate.cfg.xml 文件,从而简化了整个过程(但是,如您在 清单 4 中所看到的,您将需要对使用的每一个切分准备一个 hibernate.cfg.xml 文件)。

下一步,在清单 3 中,我将所有的切分配置都收集到了一个 List 中:

清单 3. 切分配置列表

List<ShardConfiguration> shardConfigs = new ArrayList<ShardConfiguration>(); for (String hibconfig : this.hibernateConfigurations) {  shardConfigs.add(buildShardConfig(hibconfig)); }

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号