1

我们的 Thorntail (2.4.0.Final) webapp 使用 Infinispan 作为JCache (JSR-107) 提供者。除了 JCache 的属性(例如按值存储选项)之外,我们还想修改 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 {
}
  • 以下是我们使用 JCache API 配置缓存的方式:
@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 配置创建)。有没有办法配置现有的缓存?或者任何其他允许我们保持缓存提供者不可知论的替代方式?谢谢您的回答。

4

1 回答 1

2

我们遇到了类似的问题,除了定义缓存配置而不是缓存在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 )

于 2020-05-29T02:33:10.737 回答