最近几天,我来看一下使用infinispan来管理应用程序的缓存。我有一些在相同的wildfly和 我的目的是拥有我的所有应用程序都可以使用的本地缓存。该缓存将不会在节点之间共享。 我的意图是将infinspan与jcache一起使用,因此可以以此方式注释函数以缓存结果。 我对复制的缓存不感兴趣,因为我将要缓存的数据每5分钟被逐出一次,并且数据不会在节点上重复 (客户端会话保持不变,客户端多次使用不同的键值调用这些函数)。
我正在将Wildlfy 14与standalone-full配置文件一起使用,并且在线浏览了一些文档。 我也通过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批注,也没有使用拦截器定义的bean.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缓存仅用于内部使用,因此有必要像我之前说的那样使用ha配置文件。
感谢每个答案,我希望我足够清楚。