Wildfly 12 infinispan缓存查找不起作用

时间:2018-04-11 11:28:41

标签: wildfly java-9 infinispan java-10

我从wildfly 10迁移到wildfly 12.我创建了与wildfly 10中配置相同的本地缓存。

standalone-full.xml配置:

 <cache-container name="DataCache" default-cache="modelcache" statistics-enabled="false">
            <local-cache name="modelcache" statistics-enabled="false"/>
        </cache-container>

使用@startup注释的singleton ejb中的查找代码:

 @Resource(lookup = "java:jboss/infinispan/container/DataCache")
private CacheContainer Container;
@PostConstruct
public void init() {
    Container.start();
    modelCache = Container.getCache("modelcache");

}

我在部署文件

时遇到以下异常

引起:org.infinispan.commons.CacheConfigurationException:ISPN000436:已请求缓存'modelcache',但不存在缓存配置 使用该名称并且没有为此容器设置默认缓存

如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

在项目描述符文件(web.xml,ejb-jar.xml等)中放入以下条目

<resource-ref>
    <res-ref-name>infinispan/DataCache</res-ref-name>
    <lookup-name>java:jboss/infinispan/container/DataCache</lookup-name>
</resource-ref>

答案 1 :(得分:1)

放入

<resource-ref>
    <res-ref-name>infinispan/DataCache</res-ref-name>
    <lookup-name>java:jboss/infinispan/cache/DataCache/modelcache</lookup-name>
</resource-ref>
jboss-web.xml

。请求高速缓存时,请执行以下操作(请注意,name批注属性用于指定资源):

@Resource(name = "infinispan/DataCache")
private Cache<K, V> cache;

有关更多详细信息,请参见此线程:https://developer.jboss.org/thread/277425

答案 2 :(得分:0)

对于 wildfly 10,您可以通过以下方式查找您的 infinispan 缓存或缓存容器

  1. 您需要在以下子系统下的 standalone-ha.xml(高可用性)中定义您的缓存
 <cache-container name="myCacheContainer" default-cache="myCache" module="org.wildfly.clustering.ejb.infinispan">
                <transport lock-timeout="60000"/>
              <replicated-cache name="myCache">
                    <expiration lifespan="86400000" max-idle="3600000"/>
                </replicated-cache>
                </cache-container>
  1. 定义缓存后,您可以查找缓存或容器。 2.a 要查找缓存,您应该在项目中设置一个资源引用元素 描述符文件,即(web.xml、jboss-web.xml 等)

    infinispan/myCache java:jboss/infinispan/cache/myCacheContainer/myCache

    2.b 如果要查找缓存容器,则还需要在项目描述符中定义配置查找。所以资源引用看起来像这样

     <resource-ref>
    

    infinispan/myCacheContainer org.infinispan.manager.CacheContainer java:jboss/infinispan/container/myCacheContainer infinispan/myCache-config org.infinispan.configuration.cache.Configuration java:jboss/infinispan/configuration/myCacheContainer/default

  2. 现在,如果使用 spring,您可以像这样对缓存进行 JNDI 查找

     <jee:jndi-lookup id="myCache"
    

    jndi-name="infinispan/myCache" />

    3.a 或者你可以这样查找容器

  3. 现在你可以像下面这样注入缓存

    @Resource(name="myCache") 私有缓存缓存;

    4.a 你可以像下面这样注入容器

    @Resource(name="myCacheContainer") 私有缓存容器缓存容器;