Почему EhCacheProvider устарел? - PullRequest
       27

Почему EhCacheProvider устарел?

19 голосов
/ 11 сентября 2010

Я настраиваю свой проект hibernate для использования провайдера кэша 2-го уровня, чтобы я мог использовать преимущества кэширования запросов.

Я добавил зависимость для ehcache:

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

Я думаю, что класс провайдера, который я хочу использовать:

net.sf.ehcache.hibernateEhCacheProvider

Когда я смотрю на библиотеки ссылок в eclipse, я вижу аннотацию @Deprecated в EhCacheProvider, а также в SingletonEhCacheProvider.Что дает?Есть ли у меня поставщик обновлений для замены, который я могу использовать?

Я использую спящий режим версии 3.4.0.GA, если это имеет значение.

Ответы [ 4 ]

46 голосов
/ 11 сентября 2010

Что дает?Есть ли какой-нибудь современный поставщик замены, которого я могу использовать?

Они устарели в пользу классов, реализующих новый SPI Hibernate 3.3 / 3.5 с 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.Это дает вам безопасную работу кластера (когерентность), высокую доступность и масштабирование за пределы внутрипроцессного кэша, как сегодня большинство пользователей Hibernate используют Ehcache.Существуют ehcache.jar и ehcache-terracotta.jar, которые предоставляют клиентскую библиотеку.(...)

Таким образом, вам предлагается использовать новые реализации.Настройка выполняется с помощью следующего свойства:

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

, которое заменяет свойство hibernate.cache.provider_class.

Ссылки

16 голосов
/ 02 января 2012

если вы хотите использовать 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

5 голосов
/ 11 сентября 2010

Документы EhCache говорят, что начиная с Hibernate 3.3 и выше вы должны использовать:

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

(или net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory)

4 голосов
/ 20 февраля 2019

EhCache 2 теперь устарела и больше не поддерживается. Вы должны использовать EhCache 3 вместо этого. В версиях Hibernate после 5.3 рекомендуется использовать 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>

Первый обеспечивает JSR-107 API, совместимый с Hibernate. Второе - актуальная реализация кеша - EhCache 3.

Также необходимо использовать RegionFactory:

hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
...