Infinispan - зададено за Entity expiration.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>...

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

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 трябва да работи. Ако не работи, стартирайте Remote Debugger на любимата си 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