繁体   English   中英

Infinispan - 按实体设置expiration.lifespan

[英]Infinispan - set per Entity expiration.lifespan

我在Jboss 6.1.0上部署了一个java Web应用程序,它使用infinispan 5.2.6.Final。 我正在尝试按照本指南设置每个实体的特定expiration.lifespan

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

对于我的实体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>

谢谢。

如果您在应用程序服务器中运行,则除了实体名称之外,还必须提供部署名称和单元。 因此,所有这些过期属性都需要预先添加: 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

花了几个小时来找到正确的配置。 显然它如下:

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文档中的字符串。

简而言之,只有将hibernate.cache.region_prefix设置为“”时,官方的Infinispan文档才是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM