2016-02-17 1 views
0

У меня есть приложение, использующее Hibernate с EhCache в качестве поставщика кеша второго уровня. Приложение развернуто на Wildfly 8.2. Кэш второго уровня настроен и работает как ожидалось, но я не могу понять, как создать отдельную конфигурацию кэша второго уровня в конфигурации echache.xml общим способом. В настоящее время моя установка выглядит следующим образом:Установить параметры для кэша L2 с Hibernate, EhCache и Wildlfy

Entitiy:

 /** 
    * The Country class 
    */ 
    @Entity 
    @Table(name = "country") 
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "ENTITY_L2_CACHE") 
    public class Country extends AbstractPersistentEntity {} 

pesistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="app_PU" transaction-type="JTA"> 
     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
     <jta-data-source>jdbc/app</jta-data-source> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
      <property name="hibernate.enable_lazy_load_no_trans" value="true"/> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/> 
      <property name="hibernate.transaction.jta.platform" value="com.torqueits.pos.jpa.ProxyJtaPlatform"/> 
      <!-- enabling L2 cache --> 
      <property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/> 
      <property name="hibernate.generate_statistics" value ="false" /> 
      <property name="hibernate.cache.use_second_level_cache" value="true"/> 
      <property name="hibernate.cache.use_query_cache" value="false"/> 
      <property name="hibernate.cache.ehcache.statistics" value="false"/> 
      <property name="hibernate.generate_statistics" value="false"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

И ehcache.xml

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" name="torqueCacheManager"> 
    <diskStore path="java.io.tmpdir"/> 
    <!-- Fail safe default cache--> 
    <defaultCache 
     maxElementsInMemory="10000" 
     eternal="false" 
     ... 
     memoryStoreEvictionPolicy="LRU">   
    </defaultCache> 
    <cache name="ENTITY_L2_CACHE" 
     maxElementsInMemory="10000" 
     ... 
     diskExpiryThreadIntervalSeconds="120" 
     memoryStoreEvictionPolicy="LRU"/>   
</ehcache> 

В то время как я настроил объекты для использования в качестве ENTITY_L2_CACHCE область для кэша второго уровня, фактическое имя, используемое спящим режимом, -

application.war # app_PU.ENTITY_L2_CACHE

Который использует имя развертывания и сохраняемости имя модуля в качестве префикса для региона. У меня нет контроля над именем развертывания, поэтому я не могу поместить 'application.war # app_PU.ENTITY_L2_CACHE' в ehcache.xml. Я не уверен, что это связано с сервером спячки или wildfly.

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

ответ

0

Глядя на

org.hibernate.cfg.AvailableSettings 

класса, я нашел

'hibernate.cache.region_prefix' 

параметр, который управляет префикс для региона кэша. Таким образом, чтобы решить эту проблему, мне нужно настроить префикс, а затем использовать этот префикс в файле конфигурации ehCache.xml для кеша L2.

Параметр должен быть установлен в persistence.xml файле:

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

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

  • Нет связанных вопросов^_^