Java Infinispan-按实体设置expiration.lifespan
我在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)。 例如: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
因此,我在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>