Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA的写后缓存_Java_Hibernate_Jpa_Ehcache_Terracotta - Fatal编程技术网

Java JPA的写后缓存

Java JPA的写后缓存,java,hibernate,jpa,ehcache,terracotta,Java,Hibernate,Jpa,Ehcache,Terracotta,从这里和整个网络的搜索中可以看出,不可能将EHCache实现为Hibernate的写后缓存,因为这需要对Hibernate代码进行重大更改 JPA提供商是否有其他解决方案(最好是开源的)可以“透明地”挂接到写后缓存实现中,最好是可以用Terracotta之类的东西分发 我读过EclipseLink和Oracle Coherence可以实现这一点,但可悲的是,Coherence并不是一个便宜的解决方案 我们确实基于Hibernate编写了一个写在缓存后面的一致性处理程序 是什么阻止您使用任何JPA

从这里和整个网络的搜索中可以看出,不可能将EHCache实现为Hibernate的写后缓存,因为这需要对Hibernate代码进行重大更改

JPA提供商是否有其他解决方案(最好是开源的)可以“透明地”挂接到写后缓存实现中,最好是可以用Terracotta之类的东西分发


我读过EclipseLink和Oracle Coherence可以实现这一点,但可悲的是,Coherence并不是一个便宜的解决方案

我们确实基于Hibernate编写了一个写在缓存后面的一致性处理程序

是什么阻止您使用任何JPA实现编写EHCache CacheWriter,如中所述。您可以扩展AbstractCacheWriter,只需实现write(net.sf.ehcache.Element)、writeAll(java.util.Collection)、delete(net.sf.ehcache.CacheEntry)和deleteAll(java.util.Collection)

只需确保它完全独立于周围的事务。 然后,应用程序单独写入缓存,不再使用JPA


您遇到了哪些问题?

EHCache和Hibernate的问题可能是指从客户端代码中使用Hibernate,然后透明地首先将Hibernate传输到EHCache,并且实际的持久化以写后方式异步执行。我看不出客户端代码直接写入缓存和独立使用hibernate进行写后处理有任何问题。感谢分享您的经验,这听起来比我预期的要容易得多!我没有尝试过编写写后缓存,正如在我最初的问题中,我们正在寻找“透明”解决方案,这些解决方案需要最少的编码,但可以通过配置和使用库来实现。我做了一些非常类似的事情:应用程序的一部分使用EHCache,由JPA支持(在EJB3 SLSB后面)。非常简单,只要您对完全断开连接的对象图满意。@Joshuavis您需要在断开域对象和非规范化之间找到平衡。我在JAX London上看到了本·斯托福德(Ben Stopford)在苏格兰皇家银行做的一个有趣的介绍:@greyfairer True,在尝试将这种缓存与“典型”JPA用法混合使用时,你必须非常小心。