首页 > 解决方案 > Wildfly 14 中带有 Infinispan 的本地缓存

问题描述

最近几天我看了一下使用 infinispan 来管理我的应用程序的缓存。我有一些在同一个 wildfly 上运行的耳朵应用程序,我的目的是拥有一个我的所有应用程序都可以使用的本地缓存。此缓存不会在节点之间共享。我的意图是将 infinspan 与 jcache 一起使用,因此我可以通过这种方式注释我的函数以缓存结果。我对复制的缓存不感兴趣,因为我要缓存的数据将每 5 分钟被驱逐一次,并且数据不会在节点上重复(客户端的会话被持久化,客户端调用这些函数多次使用不同的键值)。

我正在使用带有独立完整配置文件的 wildlfy 14,并且我查看了一些在线文档。我也通过 cli 在配置系统中添加了一个新的缓存容器

/subsystem=infinispan/cache-container=container-name:add
/subsystem=infinispan/cache-container=container-name/local-cache=container-name-default:add
/subsystem=infinispan/cache-container=container-name/local-cache=container-name-sd:add

我看到容器和缓存没有使用 jndi 发布,并且使用 wildfly 控制台我在 jndi 运行时字符串中找不到添加的缓存。没有 jndi 字符串,我无法访问缓存。

因为一开始我的意图是使用JCache,所以我在infinispan网站上找到了将infinispan的完整模块添加到wildlfy的文档。为了使用下载的模块,我在扩展标签部分使用 infinispan 模块扩展了 wildfly。使用独立的完整配置文件,我在访问缓存时遇到了一些错误,并且 @CacheResult 注释没有被触发,还有用拦截器定义的 beans.xml

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" version="1.1" bean-discovery-mode="all">
<interceptors>
     <class>org.infinispan.jcache.annotation.InjectedCacheResultInterceptor</class>
     <class>org.infinispan.jcache.annotation.InjectedCachePutInterceptor</class> 
     <class>org.infinispan.jcache.annotation.InjectedCacheRemoveEntryInterceptor</class>
     <class>org.infinispan.jcache.annotation.InjectedCacheRemoveAllInterceptor</class> 
</interceptors>

最后,我发现使用独立的 ha wildfy 配置文件并将 jgroup 添加到缓存容器中,我可以使用 jndi 字符串发布缓存并使用它。

有没有一种简单的方法可以使用 infinispan 和 wildfly 14 创建和访问本地缓存?有人可以提供一个耳朵应用程序的例子吗?我需要使用 ha 配置文件来定义带有 jgroups 的新缓存容器是否正确?我发现在完整的wildfly配置文件中,infinispan缓存是usde仅供内部使用,所以需要使用我之前说的ha配置文件。

感谢您的每一个回答,我希望我足够清楚。

标签: javacachingwildflyinfinispanjcache

解决方案


推荐阅读