JPA的写后缓存

16

从这里和网络上的搜索结果来看,似乎不可能将EHCache作为Hibernate的写后缓存来实现,因为那需要对Hibernate代码进行大量更改。

是否有其他解决方案(最好是开源的),用于JPA提供程序可以“透明地”连接到写后缓存实现中,最好是可以与像Terracotta这样的东西一起分布式使用?

我已经阅读过EclipseLink和Oracle Coherence可以实现此功能,但Coherence并不便宜!


EHCache和Hibernate的问题可能是指从客户端代码中使用Hibernate,然后通过透明地将Hibernate转移到EHCache,首先异步执行实际的持久化作为写入后端。我认为客户端代码直接写入缓存并独立使用Hibernate进行写入后端没有任何问题。 - GeertPt
1个回答

5
我们为Coherence编写了一个基于Hibernate的写后缓存处理程序。
按照http://ehcache.org/documentation/apis/write-through-caching中描述的方式,您可以使用任何JPA实现编写EHCache CacheWriter。 您可以扩展AbstractCacheWriter,并且您需要实现的所有内容都是write(net.sf.ehcache.Element),writeAll(java.util.Collection),delete(net.sf.ehcache.CacheEntry)和deleteAll(java.util.Collection)。
只需确保它完全独立于周围的事务。 然后,您的应用程序仅写入缓存,不再使用JPA。
您遇到的问题是什么?

感谢分享您的经验,这听起来比我预期的要容易得多!我还没有尝试编写write-behind缓存,因为在我的原始问题中,我们正在寻找“透明”的解决方案-那些只需要最少的编码,但可以通过配置和使用库来实现。 - DeejUK
我做过非常类似的事情:应用程序的某些部分使用EHCache,由JPA支持(在EJB3 SLSB后面)。只要您可以接受完全断开连接的对象图,就非常简单。 - Joshua Davis
@JoshuaDavis 你需要在断开域对象和去规范化之间找到平衡点。我在JAX伦敦看到了Ben Stopford的一个有趣演示,他展示了Royal Bank of Scotland是如何实现这一点的:http://www.benstopford.com/2011/01/27/beyond-the-data-grid-building-a-normalised-data-store-using-coherence/ - GeertPt
@ greyfairer 是的,当您尝试将此类缓存与“典型”的JPA使用混合时,必须非常小心。 - Joshua Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接