【问题标题】:Wildfly 12 infinispan cache lookup is not workingWildfly 12 infinispan 缓存查找不起作用
【发布时间】: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
  • 请显示堆栈跟踪

标签: wildfly java-9 infinispan java-10


【解决方案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 缓存或缓存容器

      1. 你需要在下面的子系统下的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>
      
      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") 私有Cache缓存;

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

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

      【讨论】:

      • 在 stackoverflow 上有地狱格式的 xml。我的 xml 有一半丢失了。
      猜你喜欢
      • 2017-03-26
      • 2017-10-23
      • 2015-12-13
      • 2018-06-12
      • 2020-02-13
      • 1970-01-01
      • 2018-11-03
      • 2020-06-19
      • 1970-01-01
      相关资源
      最近更新 更多