为什么弃用EhCacheProvider?

时间:2010-09-11 05:04:52

标签: hibernate caching ehcache terracotta

我正在配置我的hibernate项目以使用二级缓存提供程序,以便我可以利用查询缓存。

我在ehcache中添加了一个依赖项:

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

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

net.sf.ehcache.hibernateEhCacheProvider

当我查看eclipse中引用的库时,我会在@DeprecatedEhCacheProvider上看到SingletonEhCacheProvider注释。是什么赋予了?我可以使用最新的替代供应商吗?

我正在使用hibernate版本3.4.0.GA,以防万一。

4 个答案:

答案 0 :(得分:46)

  

是什么给出的?我可以使用最新的替代供应商吗?

它们已经被弃用,有利于实现新的Hibernate 3.3 / 3.5 SPI及其CacheRegionFactory的类。这些实现分别是:

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

新SPI的好处包括:

  
      
  • SPI删除了Hibernate缓存管道中的同步。它是   离开了缓存实现   关于如何控制并发访问。   Ehcache,从1.6开始,删除   同步有利于CAS   做法。结果,重   工作量令人印象深刻。
  •   
  • 新的SPI提供对缓存区域存储的精细控制   缓存策略。 Ehcache 2.0需要   这样做的好处是减少内存   使用。它提供只读,非严格   读写和读写策略,   所有集群安全。
  •   
  • Ehcache 2.0很容易与Terracotta Server Array一起分发。这个   为您提供集群安全操作   (一致性),HA和规模超越   进程内缓存的限制,即   是大多数Hibernate用户使用的方式   Ehcache今天。有现成的   ehcache.jar和ehcache-terracotta.jar   它提供了客户端库。 (...)
  •   

因此鼓励您使用新的实现。配置通过以下属性完成:

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

取代hibernate.cache.provider_class属性。

参考

答案 1 :(得分:16)

如果你想使用 Hibernate 4.0.0.Final。来获取hibernate.cache.region.factory_class属性的值,请使用:

  • org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory代替net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory
  • org.hibernate.cache.ehcache.EhCacheRegionFactory代替net.sf.ehcache.hibernate.EhCacheRegionFactory

否则你最终会得到一些内部的ClassNotFound异常

答案 2 :(得分:5)

EhCache docs说从Hibernate 3.3开始你应该使用:

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

(或net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory

答案 3 :(得分:4)

EhCache 2现在已弃用并终止。您应该改用EhCache 3。在5.3之后的Hibernate版本中,建议使用JSR-107(JCache)。为此,需要2个依赖项:

<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