Hibernate 2-й уровень кеша - PullRequest
       12

Hibernate 2-й уровень кеша

8 голосов
/ 19 апреля 2009

Привет! У меня возникли некоторые проблемы с кэшем второго уровня в спящем режиме. В качестве поставщика кеша я использую ehcache.

Часть конфигурации из файла persistence.xml

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" />
<property name="hibernate.cache.provider_configuration_file_resource_path" value="/ehcache.xml" />

Я настраиваю свои сущности, используя аннотации так:

@Cache(region = "Kierunek", usage = CacheConcurrencyStrategy.READ_WRITE)
public class Kierunek implements Serializable {

импорт для этих аннотаций: import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy;

my ehcache.xml

<diskStore path="java.io.tmpdir" />

<defaultCache maxElementsInMemory="10000" eternal="false"
    timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
    diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"
    diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
    memoryStoreEvictionPolicy="LRU" />

<cache name="Kierunek" maxElementsInMemory="1000"
    eternal="true" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" />

И кто-нибудь знает, почему я получаю следующую ошибку?

WARNING: Could not find a specific ehcache configuration for cache named [persistence.unit:unitName=pz2EAR.ear/pz2EJB.jar#pz2EJB.Kierunek]; using defaults.
19:52:57,313 ERROR [AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=pz2EAR.ear/pz2EJB.jar#pz2EJB state=Create
java.lang.IllegalArgumentException: Cache name cannot contain '/' characters.

решение - добавить еще одно свойство к persistence.xml

<property name="hibernate.cache.region_prefix" value=""/>

и это удаляет этот неправильный префикс big thx ruslan!

Ответы [ 3 ]

9 голосов
/ 19 апреля 2009

ИМХО, вы получите сгенерированное имя региона для вашего класса. Сгенерированное имя И это не определено в вашей конфигурации ehcache.xml. Также он ищет предопределенное имя, поэтому он не может использовать регион по умолчанию.

В качестве варианта решения этой проблемы вы можете использовать свойства аннотации @Cache для предопределения некоторого имени региона, например

@Cache(region = 'Kierunek', usage = CacheConcurrencyStrategy.READ_WRITE) 
public class Kierunek implements Serializable {
  // ....
}

А в ehcache.xml

<cache name="Kierunek" 
       maxElementsInMemory="1000"
       eternal="true" 
       overflowToDisk="false" 
       memoryStoreEvictionPolicy="LRU" />
5 голосов
/ 03 ноября 2011

Hibernate добавляет префикс к именам кэша на основе имени приложения или значения свойства hibernate.cache.region_prefix

Если вы установите это свойство для "" (пустая строка), то у вас есть регионы, названные точно так же, как и имена в конфигурации hibernate.

0 голосов
/ 19 апреля 2009

EHCache нужна конфигурация, которая указывает, как кэшировать объекты в вашем приложении (время работы, тип кэша, размер кэша, поведение кэширования и т. Д.). Для каждого класса, который вы пытаетесь кэшировать, он будет пытаться найти подходящую конфигурацию кэша и напечатает ошибку выше, если это не удастся сделать.

См. http://ehcache.sourceforge.net/documentation/configuration.html о том, как настроить EHCache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...