Java Infinispan-按实体设置expiration.lifespan

Java Infinispan-按实体设置expiration.lifespan,java,caching,jboss6.x,infinispan,persistence.xml,Java,Caching,Jboss6.x,Infinispan,Persistence.xml,我在Jboss 6.1.0上部署了一个java web应用程序,它使用infinispan 5.2.6.Final。 我正在尝试设置每个实体特定的过期时间。使用寿命遵循此指南 对于我的实体bean com.myenterprise.myproject.dal.ejb.Entity.RefStatus 《指南》规定如下: 您还可以覆盖每个实体/集合上的逐出/过期设置 以这样的方式键入basis,即覆盖的设置仅检测该特定的 实体(即com.acme.Person)或集合类型(即com.acme.P

我在Jboss 6.1.0上部署了一个java web应用程序,它使用infinispan 5.2.6.Final。 我正在尝试设置每个实体特定的过期时间。使用寿命遵循此指南

对于我的实体bean com.myenterprise.myproject.dal.ejb.Entity.RefStatus

《指南》规定如下:

您还可以覆盖每个实体/集合上的逐出/过期设置 以这样的方式键入basis,即覆盖的设置仅检测该特定的 实体(即com.acme.Person)或集合类型(即com.acme.Person.addresses)。 例如:


因此,我在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"/>

它可以工作,但会影响所有实体缓存,这不是我想要的

下面是my 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>

org.hibernate.ejb.HibernatePersistence
java:jboss/datasources/myProject数据源
启用\u选择性

谢谢。

如果您在应用服务器中运行,除了实体名称外,还必须提供部署名称和单元。因此,所有这些过期属性都需要在前面加上:
hibernate.cache.infinispan……

在您的情况下,我不知道部署的名称,但您提到的单元和FQN,类似于:


hibernate.cache.infinispan..myProject\u dal\u PU.com.myenterprise.myProject.dal.ejb.entity.RefStatus.expiration.lifespan

花费数小时找到正确的配置。显然是这样的:

Hibernate属性应采用以下格式:

hibernate.cache.infinispan…

-默认情况下,它位于您在某种JNDI名称中看到的名称中。对于Wildfly,它是
ear name.ear/ejb jar name.jar#持久化单元名称
但是,它可以由
hibernate.cache.region\u prefix
属性控制。将区域前缀设置为“”并忽略前缀

-字符串,如
org.hibernate.cache.infinispan.InfinispanRegionFactory
类和官方infinispan文档中所示


简言之,只有当您将
hibernate.cache.region\u prefix
设置为“

顺便说一句,我正在更新文档以添加缺少的信息。很好的帖子/explanantion@GalderZamarreño你的答案不适用,请找到我做的配置更改。在我的例子中,Person实体保留在demo.war-->my-entity.jar-->com.demo.model.Person.class中…在my persistence.xml中添加了以下属性以测试pupose,我正在使用jconsole-->statistics-->条目。由于空闲时间的原因,在一段时间后,存储在其中的实体将被逐出,但我们希望保留在缓存中,而不受影响寿命和超时(基本上没有过期)。哎呀,我上一条评论中的一个输入错误实际上实体位于demo.ear-->my model.jar-->com.demo.model.Person.classic中。如果希望它们永远在覆盖的配置中生存,传递-1应该可以。如果不工作,在您最喜欢的IDE上针对您的服务器启动远程调试器,并在
org.hibernate.cache.infinispan.InfinispanRegionFactory
类中放置一些断点,以查看为这些缓存构造了什么配置,并查看覆盖是否正确应用。
<?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>