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/myCache2.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 缓存表