首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Hibernate实现分布式查询缓存?

如何使用Hibernate实现分布式查询缓存?
EN

Stack Overflow用户
提问于 2014-12-22 11:15:22
回答 2查看 1.1K关注 0票数 0

我正在成功地使用Hazelcast作为Hibernate的L2分布式缓存。看起来,查询缓存没有得到分发。“hibernate查询缓存”不可能使用分布式缓存吗?还是我缺少了确保“查询缓存”也被分发的配置?使用Hazelcast 3.2.6和Grails 2.2.3。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-21 18:00:43

“注意: QueryCache总是本地节点,从未在Hazelcast集群中分发”它来自hazelcast文档。如果您在hibernate上使用HazelcastLocalCacheRegionFactory,regionFactory配置会将数据存储在本地节点中,并在本地更新/删除条目时发送无效消息。

这是hazelcast文档http://docs.hazelcast.org/docs/3.4/manual/pdf/hazelcast-documentation-3.4.pdf页面177

票数 5
EN

Stack Overflow用户

发布于 2015-12-01 13:44:36

正如@Luís Otávio Braga所建议的,我实现了使用hazelcast分发hibernate查询缓存的解决方案。完成答案有几个不同之处和更多信息:

  1. 我将AbstractHazelcastCacheRegionFactory复制到自己的文件中,只更改了buildQueryResultsRegion()方法,而不是最终的。这使我能够(相对地)进行(相对)未来的简单升级,因为我知道唯一的改变是一个方法的一个修饰符。
  2. DistributedQueryCacheDataRegion实现QueryResultsRegion,但扩展了 AbstractGeneralRegion
  3. buildQueryResultsRegion()方法的实现是: @重写公共QueryResultsRegion buildQueryResultsRegion(String regionName,properties)抛出CacheException {返回新的DistributedQueryCacheDataRegion(实例、regionName、属性、新IMapRegionCache(regionName、实例、属性、null));}

所以完整的代码是:

AbstractHazelcastCacheRegionFactory和hibernate一样,只有none--最终的buildQueryResultsRegion()。

DistributeQueryCacheHazelcastFactory:

代码语言:javascript
运行
复制
/**
  * Similar to com.hazelcast.hibernate.HazelcastCacheRegionFactory, only differences:
  * 1. Extends our own implementation of AbstractHazelcastCacheRegionFactory.
  * 2. Override buildQueryResultsRegion() to return DistributedQueryCacheDataRegion (that's why we needed our own
  * implementation of AbstractHazelcastCacheRegionFactory to be able to override).
  *
  */
  public class DistributeQueryCacheHazelcastFactory extends AbstractHazelcastCacheRegionFactory {

  private static final long serialVersionUID = 1L;

  public DistributeQueryCacheHazelcastFactory() {
        super();
  }

  public DistributeQueryCacheHazelcastFactory(final HazelcastInstance instance) {
        super(instance);
  }

  public DistributeQueryCacheHazelcastFactory(final Properties properties) {
        super(properties);
  }

  @Override
  public QueryResultsRegion buildQueryResultsRegion(String regionName, Properties properties) throws CacheException {
        return new DistributedQueryCacheDataRegion(instance, regionName, properties, new IMapRegionCache(regionName,
            instance, properties, null));
  }

  @Override
  public CollectionRegion buildCollectionRegion(final String regionName, final Properties properties,
        final CacheDataDescription metadata) throws CacheException {
  return new HazelcastCollectionRegion<IMapRegionCache>(instance, regionName, properties, metadata,
            new IMapRegionCache(regionName, instance, properties, metadata));
  }

  @Override
  public EntityRegion buildEntityRegion(final String regionName, final Properties properties,
        final CacheDataDescription metadata) throws CacheException {
        return new HazelcastEntityRegion<IMapRegionCache>(instance, regionName, properties, metadata,
            new IMapRegionCache(regionName, instance, properties, metadata));
  }

  @Override
  public TimestampsRegion buildTimestampsRegion(final String regionName, final Properties properties)
        throws CacheException {
        return new HazelcastTimestampsRegion<IMapRegionCache>(instance, regionName, properties, new IMapRegionCache(
            regionName, instance, properties, null));
  }

}

DistributedQueryCacheDataRegion:

代码语言:javascript
运行
复制
  public class DistributedQueryCacheDataRegion extends AbstractGeneralRegion<IMapRegionCache> implements
    QueryResultsRegion {

  protected DistributedQueryCacheDataRegion(HazelcastInstance instance, String name, Properties props,
        IMapRegionCache cache) {
        super(instance, name, props, cache);
  }

  }

最后,需要将hibernate配置hibernate.cache.region.factory_class中的工厂更改为新的DistributeQueryCacheHazelcastFactory类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27601596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档