2009-04-19 2 views
8

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

Часть конфигурации из 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;

мой 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=""/> 

и удаляет что неисправна префикс большой THx Руслану!

+1

Вы должны полностью указать слово «уровень» вместо «lvl». Это более читаемо и доступно. –

+1

Вы правы. Я писал, что это довольно расстроено, поэтому я не думал об этом ^^ спасибо – Dogrizz

ответ

8

IMHO, вы получите имя сгенерированного региона для своего класса. Это сгенерированное имя «persistence.unit: unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.pl.bdsdev.seps.encje.Kierunek». И это не определено в вашей конфигурации 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" /> 
+0

yes Я получаю сгенерированное имя региона (теперь я знаю, что это регион, в статье, которую я прочитал, он был просто назван кешем, поэтому я запутался ..), и это было моим первоначальным намерением. Интересно, почему Hibernate генерирует ошибочное имя региона. И еще раз, если у вас есть запись по умолчанию, вам не нужно указывать регион на сущность (если вы в порядке с этим). В любом случае я благодарен за ответ. Это решило мою проблему. Благодаря! ^^ – Dogrizz

+1

Добро пожаловать. Я проверил документацию. Они сказали, что имя региона по умолчанию - это полное имя класса. Это большая ошибка в документации, они должны исправить ее как можно скорее, поскольку это не ясно в любом случае. – ruslan

+0

он работал на 2 развертывания, и теперь я получаю: ВНИМАНИЕ: Не удалось найти конкретную конфигурацию ehcache для кеша с именем [persistence.unit: unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.Kierunek]; используя значения по умолчанию. 19: 52: 57,313 ОШИБКА [AbstractKernelController] Ошибка при установке в Start: name = persistence.unit: unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB state = Создать java.lang.IllegalArgumentException: Имя кэша не может содержать символы '/' , Он видит имя региона, указанное в аннотации, но добавляет, что запасной префикс .. – Dogrizz

0

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

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

+0

У меня есть правильная настройка ehcache (и вам не нужно слишком настраивать каждую сущность в ehcache.xml, если у вас задан кеш-память по умолчанию). Проблема в том, почему hibernate генерирует это странное имя кеша? Это должен быть pl.bdsdev.seps.encje.Kierunek и является persistence.unit: unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.pl.bdsdev.seps.encje.Kierunek – Dogrizz

5

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

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

Смежные вопросы