gpt4 book ai didi

Spring、Infinispan 和 JBoss 7 集成

转载 作者:行者123 更新时间:2023-12-02 08:25:34 25 4
gpt4 key购买 nike

我正在尝试使用 JBoss 7 Infinispan 缓存作为两个 war 部署的基于 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 类转换异常问题。我使用了反射。

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% 确定您会获得相同的缓存,它可能会返回一个应用程序特定的缓存(这两个应用程序数据对象实际上来自不同的类加载器)。

嵌入式缓存可能不适合应用程序间通信。您可能需要使用客户端/服务器范例。

关于Spring、Infinispan 和 JBoss 7 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12858624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com