代码之家  ›  专栏  ›  技术社区  ›  RMorrisey

为什么不推荐使用EhCacheProvider?

  •  19
  • RMorrisey  · 技术社区  · 14 年前

    我将hibernate项目配置为使用二级缓存提供程序,以便利用查询缓存。

    我向ehcache添加了一个依赖项:

       <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache-core</artifactId>
        <version>2.2.0</version>
       </dependency>
    

    我想我要使用的提供者类是:

    net.sf.ehcache.hibernateEhCacheProvider
    

    @Deprecated 上的批注 EhCacheProvider SingletonEhCacheProvider . 有什么好处?是否有最新的替代供应商,我可以使用?

    我使用的是hibernate版本3.4.0.GA,以防万一。

    4 回复  |  直到 14 年前
        1
  •  47
  •   Pascal Thivent    14 年前

    有什么好处?是否有最新的替代供应商,我可以使用?

    它们已经被弃用,取而代之的是实现新的hibernate3.3/3.5spi的类 CacheRegionFactory . 这些实现分别是:

    • net.sf.ehcache.hibernate.EhCacheRegionFactory
    • net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory

    • SPI删除了Hibernate缓存管道中的同步。它是 一直到缓存实现 如何控制并发访问。 有利于CAS的同步化 接近。结果,对于重 工作量惊人。
    • 缓存策略。Ehcache 2.0采用 这样可以减少内存 使用。它提供只读、非严格的 读写和读写策略, 所有群集安全。
    • Ehcache 2.0很容易与Terracotta服务器阵列一起分发。这个 提供群集安全操作 进程内缓存的限制 是大多数Hibernate用户使用 我今天就去。现有的 ehcache.jar文件和ehcache-陶土罐 它提供了客户端库。(...)

    因此,我们鼓励您使用新的实现。通过以下属性进行配置:

    <property name="hibernate.cache.region.factory_class">
        net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
    </property>
    

    它取代了 hibernate.cache.provider_class 财产。

    工具书类

        2
  •  16
  •   Milan Aleksić    13 年前

    如果你想使用 休眠4.0.0.Final。 为了价值hibernate.cache.region.factory\u类属性使用:

    • org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory 而不是 net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
    • org.hibernate.cache.ehcache.EhCacheRegionFactory 而不是 net.sf.ehcache.hibernate.EhCacheRegionFactory

    否则,最终会出现一些内部ClassNotFound异常

        3
  •  6
  •   Michał Stochmal    6 年前

    <dependency>
         <groupId>org.hibernate</groupId>
         <artifactId>hibernate-jcache</artifactId>
         <version>your_hibernate_version</version>
    </dependency>
    
    <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>3.6.3</version>
        <scope>runtime</scope>
    </dependency>
    

    第一个提供了与Hibernate兼容的JSR-107 API。第二个是实际的缓存实现-EhCache 3。

    也是新的 RegionFactory 必须使用:

    hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
    
        4
  •  5
  •   Bozho    14 年前

    这个 EhCache docs 假设从Hibernate 3.3开始,您应该使用:

    <property name="hibernate.cache.region.factory_class">
        net.sf.ehcache.hibernate.EhCacheRegionFactory
    </property>
    

    (或 net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory