Infinispan - устанавливается для Entity expire.lifespan

У меня есть веб-приложение Java, развернутое на Jboss 6.1.0, которое использует infinispan 5.2.6.Final. Я пытаюсь установить expiration.lifespan для каждой сущности, следуя этому руководству.

http://infinispan.org/docs/5.2.x/user_guide/user_guide.html#_advanced_configuration_2

для моего компонента Entity bean com.myenterprise.myproject.dal.ejb.entity.RefStatus.

В руководстве указано следующее:

Вы также можете переопределить параметры удаления/срока действия для каждого объекта/типа коллекции таким образом, чтобы переопределенные настройки влияли только на этот конкретный объект (например, com.acme.Person) или тип коллекции (например, com.acme.Person.addresses). Например:

<property name="hibernate.cache.infinispan.com.acme.Person.expiration.lifespan" value= "65000"/>

Итак, я добавил следующий элемент в свой файл persistence.xml, чтобы сократить время жизни до 10 миллисекунд в тестовых целях, чтобы позже его настроить:

<property name="hibernate.cache.infinispan.com.myenterprise.myproject.dal.ejb.entity.RefStatus.expiration.lifespan" value= "10"/>

Настройка не оказывает никакого влияния, и срок службы остается по умолчанию.

Знаете ли вы, как мне настроить файл persistence.xml, чтобы он успешно переопределял срок действия по умолчанию? Настройка

<property name="hibernate.cache.infinispan.entity.expiration.lifespan" value= "10"/>

это работает, но влияет на все кеши сущностей, а это не то, что мне нужно.

Далее следует мой файл application.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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" version="2.0">
    <persistence-unit name="myProject_dal_PU" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>java:jboss/datasources/myProject-DataSource</jta-data-source>
        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
        <properties>
            <property name="hibernate.archive.autodetection" value="class" />
            <property name="hibernate.bytecode.use_reflection_optimizer" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="false" />

            <property name="hibernate.cache.use_second_level_cache" value="true" />
            <property name="hibernate.cache.use_minimal_puts" value="true" />
            <property name="hibernate.cache.use_query_cache" value="true" />
            <property name="hibernate.cache.infinispan.com.myenterprise.myproject.dal.ejb.entity.RefStatus.expiration.lifespan" value= "10"/>
        </properties>
    </persistence-unit>
</persistence>

Спасибо.


person Perelum    schedule 05.06.2014    source источник


Ответы (2)


Если вы работаете на сервере приложений, помимо имени сущности, вы также должны указать имя развертывания и единицу измерения. Таким образом, все такие свойства истечения срока действия должны начинаться с: hibernate.cache.infinispan.<warname>.<unitname>.<FQN of entity>...

В вашем случае я не знаю названия вашего развертывания, но с единицей и полным доменным именем, которые вы упомянули, что-то вроде:

hibernate.cache.infinispan.<warname>.myProject_dal_PU.com.myenterprise.myproject.dal.ejb.entity.RefStatus.expiration.lifespan

person Galder Zamarreño    schedule 10.06.2014
comment
Кстати, я работаю над обновлением документации, чтобы добавить эту недостающую информацию. - person Galder Zamarreño; 10.06.2014
comment
хороший пост/объяснение - person Ankur Singhal; 05.01.2015
comment
@GalderZamarreño Это не сработало с вашим ответом, пожалуйста, найдите изменение конфигурации, которое я сделал. в моем случае сущность Person остается внутри demo.war --› my-entity.jar --› com.demo.model.Person.class ... Добавлены следующие свойства в мой файл persistence.xml ‹property name=hibernate.cache.infinispan .demo.demo-model.com.demo.model.Person.expiration.lifespan value=-1/› Для тестирования я использую jconsole --› статистика --› записи. Через некоторое время из-за простоя сущности, которые хранятся в вытесняются, но мы хотим оставаться в кеше без срока действия и тайм-аута (в основном без истечения срока действия). - person prem; 30.05.2015
comment
К сожалению, опечатка в моем предыдущем комментарии, на самом деле сущность остается внутри demo.ear--›my-model.jar--›com.demo.model.Person.class - person prem; 02.06.2015
comment
Если вы хотите, чтобы они жили вечно в переопределенной конфигурации, передача -1 должна работать. Если это не работает, запустите удаленный отладчик в вашей любимой IDE для вашего сервера и поставьте несколько точек останова в классе org.hibernate.cache.infinispan.InfinispanRegionFactory, чтобы увидеть, какая конфигурация создается для этих кэшей, и посмотреть, правильно ли применяются переопределения. - person Galder Zamarreño; 05.06.2015

Потратил часы, чтобы найти правильную конфигурацию. Судя по всему, это следующее:

Свойство Hibernate должно быть в следующем формате:

hibernate.cache.infinispan.<prefix>.<full-class-name>.<property-name> где:

<prefix> - по умолчанию это имя, которое вы видите в виде имени JNDI. В случае Wildfly это ear-name.ear/ejb-jar-name.jar#persistence-unit-name Однако им можно управлять с помощью свойства hibernate.cache.region_prefix. Установите для region_prefix значение "" и игнорируйте префикс.

<property-name> — строка, как она представлена ​​в классе org.hibernate.cache.infinispan.InfinispanRegionFactory и в официальной документации Infinispan.

Короче говоря, официальная документация Infinispan верна только в том случае, если для hibernate.cache.region_prefix установлено значение ""

person Dmitry    schedule 28.07.2016