具有大量实体的Ehcache / Hibernate和RMI复制

时间:2009-02-19 17:12:56

标签: java hibernate replication ehcache

我目前正在调查如何在ehcache中使用RMI分发选项。我已正确配置ehcache.xml,复制似乎工作正常。但是我有两个问题:

- >似乎ehcache / hibernate为每个实体创建了1个缓存。这很好,但是当复制到位时,它会创建1个线程/缓存进行复制。这是预期的行为吗?由于我们的域很大,它创建了大约300个线程,在我看来真的很大

- >另一个令人讨厌的后果是,心跳混乱似乎聚合了所有这些缓存名称。从我看到的消息应该适合1500字节,它没有,这导致我的日志中的此消息:Heartbeat不起作用。配置较少的缓存以进行复制。大小为1747但不应大于1500。关于如何改变它的任何想法?

非常感谢你的帮助

5 个答案:

答案 0 :(得分:3)

我们已经有了一个hack,我们有自己的hibernate EhCacheProvider自定义副本,它会覆盖buildCache()来创建我们自己的具有缩写名称的Cache对象(名称的哈希值)。这大约达到了1500的限制。我们使用反向查找的哈希名称保留原始名称的哈希映射。

我们前一段时间就这样做了,并且一直在生产中使用它。

我们还查看了您的另一个问题,即拥有一个复制器线程。首先,我们复制了RMICacheReplicatorFactory并更改了createCacheEventListener()以返回我们修改的RMIAsynchronousCacheReplicator副本,方法是将replicationThread字段设置为static,然后对其进行必要的修复。我们没有彻底测试它或将其投入生产,但是再次查看它是我发现这篇文章的方式:))

答案 1 :(得分:2)

您是否认为JBossCache是​​EHcache的替代品? JBossCache具有分布式事务,并且经过了高负载的良好测试。它具有较低级别的复制机制,可以允许您使用UDP或TCP多播/广播复制。

答案 2 :(得分:2)

你认为EHCache超过兵马俑吗?请查看Terracotta Hibernate Integration Terracotta EHCache Integration

重要的是,Terracotta分布式EHCache是​​连贯的 - 所有节点都具有相同的缓存视图。这对我使用的其中一个应用程序非常重要。

看一看。它对我们来说就像是一种魅力。

/ RS

答案 3 :(得分:0)

jms复制是一个选项吗?

(我一直在寻找使用它与异步行为,它工作得很好。文档是错误的所以我必须检查源代码,以查看正确配置它所需的实际属性。与jms的好处是,如果你设置基础设施后,您不必配置任何防火墙等等,以便让它通过。)

答案 4 :(得分:0)

顺便说一句,ehcache-core的Ehcache 1.7.1版本已经解决了1500字节的限制。请参阅EHC-424