Wildfly 12 infinispan 缓存查找不起作用

Posted

技术标签:

【中文标题】Wildfly 12 infinispan 缓存查找不起作用【英文标题】:Wildfly 12 infinispan cache lookup is not working 【发布时间】:2018-09-21 06:30:36 【问题描述】:

我正在从 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 注释的单例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”,但不存在缓存配置 使用该名称并且没有为此容器设置默认缓存

如何解决这个问题?

【问题讨论】:

你是如何开始 WildFly 的? standalone.bat -b 0.0.0.0 -c Standalone-full.xml 请显示堆栈跟踪 【参考方案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】:

将以下条目放入您的项目描述符文件(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>

【讨论】:

【参考方案3】:

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

    你需要在下面的子系统下的standalone-ha.xml(High availability)中定义你的缓存
 <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>

    定义缓存后,您可以查找缓存或容器。 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

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

     <jee:jndi-lookup id="myCache"
    

    jndi-name="infinispan/myCache" />

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

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

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

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

    @Resource(name="myCacheContainer") private CacheContainer cacheContainer;

【讨论】:

在 *** 上有地狱格式的 xml。我的 xml 有一半丢失了。

以上是关于Wildfly 12 infinispan 缓存查找不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Wildfly 23 中浏览 Infinispan 缓存数据

Spring 和 WildFly Infinispan 缓存查找

在 Wildfly 8.2 上重新部署后从 Infinispan 缓存读取时发生 ClassCastException

J2EE之wildfly 实践9 -- 使用infinispan 过期缓存

如何在 Wildfly Standalone-full-ha 中使用复制的 Infinispan 缓存

未使用 Wildfly 15+ 使用 invalidation-cache 和 jdbc-store 自动创建 Infinispan 缓存表