【问题标题】:how to use another implementation for JPA 2 level 2 cache?如何为 JPA 2 二级缓存使用另一种实现?
【发布时间】:2011-10-07 13:19:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java caching jpa jpa-2.0 eclipselink


    【解决方案1】:

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

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

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

    【讨论】:

    • 看起来 ehcache 是分布式的。我仍在尝试决定是应该使用类似的东西还是只使用 Eclipselink 缓存协调。
    • 我猜你说的是 CacheInterceptor Tom Ware 指的是 EL 邮件列表?
    • eclipselink能否跨weblogic集群做缓存协调?
    【解决方案2】:

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

    因此,在那之前,您将受制于提供商的缓存接口。我不是 EclipseLink 专家,但我上次查看时,我没有看到可插入的二级缓存接口。事实上,我认为只有 Hibernate,当然还有 DataNucleus,拥有它们。

    【讨论】:

    • 不过,我们无法更改为 Hibernate 或 DataNucleus。
    【解决方案3】:

    有没有办法可以插入另一个缓存实现?

    您是否调查过EclipseLink 附带的EclipseLink shared object cache 的使用情况?根据描述,共享对象缓存不仅限于单个 EntityManager,而且可以跨多个 Entity manager 的生命周期使用,即跨多个事务。当然,它受限于 EntityManagerFactory 的生命周期,只要应用程序在容器中运行,它就可能一直存在。

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

    【讨论】:

    • 这是默认的缓存实现。它不在服务器之间共享。我想插入另一个缓存实现,但目前找不到方法。
    • 嗯,它支持缓存协调,所以你可以协调服务器缓存。
    • Vineet,你知道我是否可以跨 weblogic 集群、多台服务器使用它吗?
    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 2012-01-03
    • 2015-11-19
    • 2014-06-21
    • 2012-03-21
    • 2019-08-24
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多