我在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控制台中:
但是在应用程序中使用时,会找到缓存容器,但缓存不是。相反,当使用不同的设置调用cacheManager#getCache
时,它会被懒惰地创建。
模式集被复制,但找到的是本地的。交易等其他设置也不同。我错过了什么吗?
答案 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的库不会触发缓存初始化。