Конфигурации области кеширования в persistence.xml

Согласно этой документации, когда Используя Infinispan с Hibernate, можно определить несколько областей кэша и настроить их индивидуально. Я использую WildFly 8.0, который использует Infinispan в качестве поставщика 2LC по умолчанию для Hibernate. Итак, вот моя конфигурация standalone.xml для контейнера кэша спящего режима:

<cache-container name="hibernate" default-cache="local-query" module="org.hibernate">
    <local-cache name="entity">
        <transaction mode="NON_XA"/>
        <eviction strategy="LRU" max-entries="10000"/>
        <expiration max-idle="100000"/>
    </local-cache>
    <local-cache name="local-query">
        <transaction mode="NONE"/>
        <eviction strategy="LRU" max-entries="10000"/>
        <expiration max-idle="100000"/>
    </local-cache>
    <local-cache name="timestamps">
        <transaction mode="NONE"/>
        <eviction strategy="NONE"/>
    </local-cache>
</cache-container>

Таким образом, максимальное время простоя установлено на 100 секунд. Вот как я сообщаю Hibernate кешировать запрос:

slotQuery.setHint("org.hibernate.cacheable", true)
         .setHint("org.hibernate.cacheRegion", "myRegionName")
         .getResultList();

Все работает идеально, запросы кешируются на 100 секунд. Но когда я пытаюсь настроить отдельную область кеша для запроса в persistence.xml:

<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.cache.infinispan.myRegionName.expiration.max_idle" value="5000"/>

настройки не переопределяются, и запрос кэшируется на 100 секунд. Что мне здесь не хватает?


person tb0171    schedule 11.04.2014    source источник
comment
При запуске внутри сервера приложений необходимо добавить имя развертывания, например hibernate.cache.infinispan.<warname>.<unitname>.<FQN of entity>.expiration.max_idle. Вы можете это попробовать?   -  person Galder Zamarreño    schedule 22.04.2014


Ответы (2)


Как упоминал Галдер Замарреньо в комментариях, название развертывания необходимо добавить к региону.

Или вы можете явно установить prefix в пустое ("") или какое-то значение, как показано ниже.

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

Затем укажите регион prefix, как показано ниже.

<property name="hibernate.cache.infinispan.my-cache.myRegionName.expiration.max_idle" value="5000"/>
person ulab    schedule 27.04.2017

Убедитесь, что вы поместили в свой persistence.xml factory_class:

<property name="hibernate.cache.region.factory_class"
            value="org.hibernate.cache.infinispan.InfinispanRegionFactory" />

Значение 5000 - это действительно то, что вам нужно? Помните, что это значение в миллисекундах, поэтому максимальное время простоя вашего кеша установлено на 5 секунд.

Что касается cacheRegion, я не смог найти способ создать его для запросов. Однако можно перезаписать значение по умолчанию infinispan. Вы можете использовать область кэша запросов по умолчанию для настройки max_idle следующим образом:

<!-- entity cache, never expires = -1 -->
<property name="hibernate.cache.infinispan.entity.expiration.max_idle"
            value="-1" />
<!-- query cache, with 12 hours expiration -->
<property name="hibernate.cache.infinispan.query.expiration.max_idle"
            value="1620000" />
person Tiago PC    schedule 07.04.2016