JBoss EAP 7.0 standalone.xml中设置的Infinispan缓存设置未反映在应用程序中

时间:2017-10-06 05:20:37

标签: java caching jboss jboss7.x infinispan

我在JBoss 7中通过CLI添加了一个缓存:

/subsystem=infinispan/cache-container=sample:add
/subsystem=infinispan/cache-container=sample/replicated-cache=account:add(mode=ASYNC)
/subsystem=infinispan/cache-container=sample/replicated-cache=account/component=transaction:write-attribute(name=mode,value=BATCH)
/subsystem=infinispan/cache-container=sample/replicated-cache=account/component=locking:write-attribute(name=isolation, value=REPEATABLE_READ)

看到它反映在standalone.xml的Infinispan子系统中:

<cache-container name="sample">
    <replicated-cache name="account" mode="ASYNC">
        <locking isolation="REPEATABLE_READ"/>
        <transaction mode="BATCH"/>
    </replicated-cache>
</cache-container>

看到它反映在JBoss控制台中:

enter image description here

但是在应用程序中使用时,会找到缓存容器,但缓存不是。相反,当使用不同的设置调用cacheManager#getCache时,它会被懒惰地创建。

enter image description here

模式集被复制,但找到的是本地的。交易等其他设置也不同。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题。我在EAP 7中有一个配置了生命周期的本地缓存。它配置得相对较短。相同的配置在早期工作得很好,但我们意识到,缓存的东西永远保留在缓存中。

问题是我们如何进入缓存实例。我们注入了缓存管理器:

@Resource(lookup = "java:jboss/infinispan/download-manager")
private CacheContainer cacheContainer;

然后我们使用缓存容器来访问缓存。调试后,即使EAP 7的寿命仅为30秒,寿命也为-1。

cacheContainer.getCache("someCache")

没有得到缓存的实例,而是它创建了一个具有默认值的新缓存。我认为它解释了你的“本地缓存”设置。

我使用适当设置进入缓存的方式是:

@Resource(lookup = "java:jboss/infinispan/cache/download-manager/someCache")
private Cache<String, Object> negative_cache_direct;

答案 1 :(得分:0)

似乎仅根据相关的EJB模块急切地初始化缓存。支持CDI的库不会触发缓存初始化。