我们的Thorntail(2.4.0.Final)Web应用程序使用Infinispan作为JCache (JSR-107) provider。除了JCache的属性(例如store-by-value选项)之外,我们还要修改Infinispan的特定属性(例如,默认获取超时)。
我们当前的解决方案无效。这是到目前为止我们尝试过的。
infinispan.xml
:<infinispan
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:5.2 http://www.infinispan.org/schemas/infinispan-config-9.4.xsd"
xmlns="urn:infinispan:config:9.4">
<cache-container>
<local-cache name="foo">
<locking acquire-timeout="15000"/>
</local-cache>
</cache-container>
</infinispan>
public class CacheManagerProducer {
@Produces
@ApplicationScoped
public CacheManager defaultEmbeddedCacheManager() {
return Caching.getCachingProvider().getCacheManager(URI.create("infinispan.xml"), this.getClass().getClassLoader());
}
}
FooCache
接口定义为:@Qualifier
@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FooCache {
}
@Produces
@FooCache
public Cache<Long, DiscountOrAddition> createDiscoCache(InjectionPoint injectionPoint) {
MutableConfiguration<Long, DiscountOrAddition> config = new MutableConfiguration<>();
config.setStoreByValue(true);
config.setStatisticsEnabled(false);
config.setManagementEnabled(false);
return mgr.createCache("foo", config);
}
这是我们失败的地方,因为foo
缓存已经存在(根据XML配置创建)。有什么方法可以配置现有缓存?还是任何其他允许我们保持缓存提供者不可知的方式?谢谢您的回答。
我们遇到了类似的问题,除了在infinispan.xml
中定义缓存配置而不是缓存:
<?xml version="1.0" encoding="UTF-8"?>
<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:infinispan:config:8.2 https://infinispan.org/schemas/infinispan-config-8.2.xsd"
xmlns="urn:infinispan:config:8.2">
<cache-container>
<local-cache-configuration name="foo">
<locking acquire-timeout="15000"/>
</local-cache-configuration>
</cache-container>
</infinispan>
期望以上配置将用作模板,并与JCache配置合并以创建缓存foo
。这在Infinispan 8.2流中可以正常工作,但是升级到9.4流后,它现在不起作用。我们认为这是意外的,已经提交了错误报告(ISPN-11918)