我在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中使用缓存?
谢谢。
答案 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;