Wildfly 11 - infinispan本地缓存未注册

时间:2018-06-08 05:22:22

标签: infinispan wildfly-11

我在wildfly 11中使用本地缓存。访问缓存时,我遇到错误 >

  

javax.naming.NameNotFoundException:infinispan / container / SearchContainer [root exception is is   java.lang.IllegalStateException]       在org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:153)       在org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:83)       在org.jboss.as.naming.NamingContext.lookup(NamingContext.java:207)       在org.jboss.as.naming.NamingContext.lookup(NamingContext.java:184)       at org.jboss.as.naming.InitialContext $ DefaultInitialContext.lookup(InitialContext.java:239)       在org.jboss.as.naming.NamingContext.lookup(NamingContext.java:193)       在org.jboss.as.naming.NamingContext.lookup(NamingContext.java:189)       引起:java.lang.IllegalStateException       at org.jboss.msc.value.InjectedValue.getValue(InjectedValue.java:47)       在org.jboss.as.naming.service.BinderService.getValue(BinderService.java:142)       在org.jboss.as.naming.service.BinderService.getValue(BinderService.java:46)       在org.jboss.msc.service.ServiceControllerImpl.getValue(ServiceControllerImpl.java:1158)       在org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:131)       ......还有174个

独立配置如下,

<cache-container name="SearchContainer" default-cache="TwoColumnSearchCache" jndi-name="java:jboss/infinispan/container/SearchContainer">
            <local-cache name="TwoColumnSearchCache">
                <eviction strategy="LRU" max-entries="-1"/>
                <expiration lifespan="60000" max-idle="60000"/>
            </local-cache>
        </cache-container>

在托管bean中,我尝试了两种方法,两种方式都不适用于wildfly 11.但是在Wildfly 10中,它使用相同的代码工作正常。

方式1:

CacheContainer searchContainer = (CacheContainer) new InitialContext().lookup("java:jboss/infinispan/container/SearchContainer");
Cache<String, List<Map<String, String>>> twoColumnSearchCache = searchContainer.getCache("TwoColumnSearchCache");

方式2:

@Resource(lookup="java:jboss/infinispan/container/SearchContainer/TwoColumnSearchCache")
Cache<String, List<Map<String, String>>> twoColumnSearchCache ;

我应该如何在wildfly 11中使用缓存?

谢谢。

1 个答案:

答案 0 :(得分:2)

在WF11中,按需安装缓存配置服务,因此对缓存管理器使用资源引用(例如@Resource,resource-ref,resource-env-ref)不足以确保安装其缓存配置。您需要为缓存配置添加额外的@ Resource / resource-ref / resource-env-ref,或者(甚至更好)只需使用resource-env-ref为缓存本身直接查找缓存。 e.g。

部署描述符:

<resource-env-ref>
    <resource-env-ref-name>TwoColumnSearchCache</resource-env-ref-name>
    <resource-env-ref-type>org.infinispan.Cache</resource-env-ref-type>
    <lookup-name>java:jboss/infinispan/cache/SearchContainer/TwoColumnSearchCache</lookup-name>
</resource-env-ref>

然后通过以下方式引用您的缓存:

@Resource(name="TwoColumnSearchCache")
Cache<String, List<Map<String, String>>> cache;