声明性缓存容器设置 - 是否可能?

时间:2017-12-06 19:02:06

标签: wildfly infinispan jcache

我正在使用Wildfly 10.1.0 + Infinispan 8.2.4.Final + cache API 1.0.0试图在我的应用程序中以最小的努力启用Infinispan Jcache拦截器,如果可能的话没有编程设置。 我想做一个这样的注释工作来存储一些词典:

@CacheResult(cacheName = "dictionary", cacheKeyGenerator = MyCacheKeyGeneratorImpl.class)  
public List getDictionary() {  
   ...  
}  

我最初开始这项活动是因为我错过了Spring @Cacheable注释(我们目前不使用Spring config / CDI,只有少数库,如Spring Data JPA Repositories)。 所以我下载了Infinispan Wilfly / EAP模块,将其解压缩到Wilfly模块文件夹并将其添加到jboss-deployment-structure.xml中:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
  <deployment>
  <dependencies>
  <module name="org.infinispan" slot="ispn-8.2" services="export"/>
  <module name="org.infinispan.cdi" slot="ispn-8.2" services="export"/>
  <module name="org.infinispan.jcache" slot="ispn-8.2" services="export"/>
  </dependencies>
  </deployment>
</jboss-deployment-structure>

现在处理注释,并使用一些默认缓存容器来创建“字典”缓存。现在我想微调这个缓存容器。 注入infinispan配置的常用方法是什么?是否可以将模块设置插入主Wilfly配置文件(standalone.xml)以定义此缓存容器,或者在单独的文件中指定它们?

<cache-container name="JCacheContainer" default-cache="default" module="org.infinispan.jcache">
  <local-cache name="default">
   <transaction mode="NONE"/>
   <eviction strategy="LRU" max-entries="1000"/>
   <expiration max-idle="3600000"/>
  </local-cache>
  <local-cache name="dictionary">
   <locking acquire-timeout="15000" isolation="REPEATABLE_READ"/>
   <transaction locking="PESSIMISTIC" mode="NONE"/>
   <eviction strategy="LRU" max-entries="100000"/>
   <expiration lifespan="15000" max-idle="15000"/>
  </local-cache>
</cache-container>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

可以在Infinispan Integration Tests中找到此类配置的工作示例。唯一的区别是Infinispan部署在WAR文件中,而不是放在模块中。

您需要做的就是将infinispan.xml放在WEB-INF目录中并使用正确的beans.xml

使用模块和CDI的另一个例子可以在JBoss Data Grid Quickstarts中找到。该示例中唯一缺少的是JCache。

最后,您可能会发现对Infinispan用户指南中的JCache documentation paragraph感兴趣。