[英]Spring, Infinispan and JBoss 7 integration
我正在尝试使用JBoss 7 Infinispan缓存作为两个战争部署的基于Spring的应用程序的通信形式(更晚一些)。 我在访问JBoss托管缓存管理器时遇到问题。
我用的时候
DefaultCacheManager cacheManager = new DefaultCacheManager();
cache = cacheManager.getCache();
在两个应用程序中的每一个上,我得到两个单独的缓存。 有没有办法在不使用@ManagedBean注释和Java EE标准的情况下访问JBoss服务器创建的缓存?
完成。 感谢Kazaag,我使用了JNDI。
JndiTemplate jndiTemplate = new JndiTemplate();
jndiTemplate.lookup("java:jboss/infinispan/container/cluster");
我有一个众所周知的DefaultEmbeddedCacheManager类Cast Exception问题。 我用过反射。
Map<Object, Object> cache;
JndiTemplate jndiTemplate = new JndiTemplate();
Object cacheManager;
try {
cacheManager = (Object) jndiTemplate.lookup("java:jboss/infinispan/container/cluster");
Method method = cacheManager.getClass().getMethod("getCache");
cache = (Map) method.invoke(cacheManager);
} catch (Exception e) {
e.printStackTrace();
return;
}
此外,我不得不急切地将容器标记为开始。
<cache-container name="cluster" aliases="ha-partition" default-cache="default">
<transport lock-timeout="60000"/>
<replicated-cache name="default" mode="SYNC" start="EAGER" batching="true">
<locking isolation="REPEATABLE_READ"/>
</replicated-cache>
</cache-container>
虽然不同的类加载器复制了缓存。
如果每个应用程序都使用自己的缓存管理器,则它们将分离缓存。
您可以通过Spring的JNDI支持检索应用程序服务器管理的缓存容器(JNDI名称为java:jboss/infinispan/my-container-name
)。 所以Spring将负责确保每个部件都使用相同的容器。
我不是100%确定你会获得相同的缓存,它可能会返回一个特定于应用程序的缓存(2个应用程序数据对象实际上来自不同的类加载器)。
嵌入式缓存可能不适用于应用程序间通信。 您可能需要使用客户端/服务器范例。
有一天晚些时候,但可以在这里找到有关通过JNDI访问infinispance缓存存储的信息
通过JNDI查找,我获得了CacheContainer
<jee:jndi-lookup id="cache1"
jndi-name="java:jboss/infinispan/container/jbossas7-quickstart"
cache="true" resource-ref="false" lookup-on-startup="true" />
我通过二传手注入
public void setContainer(CacheContainer container) {
this.container = container;
}
现在我可以访问缓存库了。 请注意这里的建议
@Resource(lookup="java:jboss/infinispan/container/my-container-name")
@Resource(lookup="java:jboss/infinispan/cache/my-container-name/my-cache-name")
不在我的Spring Bean中工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.