为什么弃用EhCacheProvider?

RMo*_*sey 19 caching hibernate terracotta ehcache

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

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

   <dependency>
    <groupId>net.sf.ehcache</groupId>
    <artifactId>ehcache-core</artifactId>
    <version>2.2.0</version>
   </dependency>
Run Code Online (Sandbox Code Playgroud)

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

net.sf.ehcache.hibernateEhCacheProvider
Run Code Online (Sandbox Code Playgroud)

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

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

Pas*_*ent 46

是什么赋予了?我可以使用最新的替代供应商吗?

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

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

新SPI的好处包括:

  • SPI删除了Hibernate缓存管道中的同步.它取决于如何控制并发访问的缓存实现.从1.6开始,Ehcache删除了同步化以支持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>
Run Code Online (Sandbox Code Playgroud)

这取代了hibernate.cache.provider_class财产.

参考


Mil*_*sić 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异常


Mic*_*mal 6

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>
Run Code Online (Sandbox Code Playgroud)

第一个提供符合 Hibernate 的 JSR-107 API。第二个是实际的缓存实现 - EhCache 3。

RegionFactory必须使用new :

hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 5

的Ehcache文档说,从休眠3.3起,你应该使用:

<property name="hibernate.cache.region.factory_class">
    net.sf.ehcache.hibernate.EhCacheRegionFactory
</property>
Run Code Online (Sandbox Code Playgroud)

(或net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory)