我们想为我们的大型JPA应用程序使用另一个L2缓存。我们正在尝试在多个服务器之间实现共享缓存。
我们使用Eclipselink作为JPA实现,而一些遗留代码使用内部Eclipselink API,因此切换不是一种选择。
Coherence / Toplink Grid似乎太贵了(4000 $ / cpu?)。
有没有办法可以插入另一个缓存实现?是JPA 2中指定的东西(我在规格中找不到任何东西,但也许我只是误读了它)?专有(=特定于Eclipselink)的解决方案是可以的,只要它们有一定的记录或足够简单(我们不希望它破坏)。
答案 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是目前唯一提供集成的缓存。