一尘不染

为什么不推荐使用EhCacheProvider?

hibernate

我正在将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,以防万一。


阅读 362

收藏
2020-06-20

共1个答案

一尘不染

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

不推荐使用它们,而赞成使用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>

那代替了hibernate.cache.provider_class财产。

参考文献

2020-06-20