如何使用JPA 2级别缓存的另一个实现?

时间:2011-07-18 09:57:18

标签: java caching jpa jpa-2.0 eclipselink

我们想为我们的大型JPA应用程序使用另一个L2缓存。我们正在尝试在多个服务器之间实现共享缓存。

我们使用Eclipselink作为JPA实现,而一些遗留代码使用内部Eclipselink API,因此切换不是一种选择。

Coherence / Toplink Grid似乎太贵了(4000 $ / cpu?)。

有没有办法可以插入另一个缓存实现?是JPA 2中指定的东西(我在规格中找不到任何东西,但也许我只是误读了它)?专有(=特定于Eclipselink)的解决方案是可以的,只要它们有一定的记录或足够简单(我们不希望它破坏)。

3 个答案:

答案 0 :(得分:1)

  

我们有没有办法插入另一个缓存实现?

您是否研究过使用EclipseLink附带的EclipseLink shared object cache?根据描述,共享对象高速缓存不仅仅局限于单个EntityManager,并且可以在多个实体管理器的生命周期中使用,即跨多个事务。它当然受限于EntityManagerFactory的生命周期,只要应用程序在容器中运行,它就可以是活动的。

EclipseLink共享对象缓存与Oracle Coherence不同,我认为它没有单独许可和打包,因此可以在所有容器上使用。

答案 1 :(得分:1)

JPA未指定可插入缓存接口。我不知道它是否会如此,但如果确实如此,我的赌注是,直到复活的JSR-107完成为对象缓存定义标准API之后才会这样,JPA然后可以使用它。它可能还需要等待JSR 347,它正在定义另一个缓存接口,它与JCache的关系有些不清楚(组内和组内都存在开放的派系战争,107专家组的一些成员试图宣布347一个独立的共和国,并入侵墨西哥)。

因此,在此之前,您将受到提供商缓存界面的支配。我不是EclipseLink专家,但上次我看,我看不到可插拔的二级缓存接口。事实上,我认为只有Hibernate,当然还有DataNucleus,才有它们。

答案 2 :(得分:1)

大多数缓存实现不是分布式的(Coherence除外),只是本地的。 EclipseLink已经支持在集群中进行缓存的共享缓存和缓存协调。

您打算使用什么缓存,以及您打算从中获得什么好处?

EclipseLink支持与第三方缓存集成,此API是为Coherence集成创建的,尽管Coherence是目前唯一提供集成的缓存。