首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring、Infinispan和JBoss 7集成

Spring、Infinispan和JBoss 7集成
EN

Stack Overflow用户
提问于 2012-10-12 12:01:20
回答 2查看 6.4K关注 0票数 3

我正在尝试使用JBoss 7 Infinispan作为两个war部署的基于春季的应用程序的通信形式(更晚一些)。我在访问JBoss管理的缓存管理器时遇到了问题。

当我用

代码语言:javascript
复制
DefaultCacheManager cacheManager = new DefaultCacheManager();
cache = cacheManager.getCache();

在两个应用程序中,每个应用程序都有两个单独的缓存。有没有任何方法可以不使用@ManagedBean注释和Java标准来访问JBoss服务器创建的缓存?

就这样办。多亏了Kazaag,我用了JNDI。

代码语言:javascript
复制
JndiTemplate jndiTemplate = new JndiTemplate();
jndiTemplate.lookup("java:jboss/infinispan/container/cluster");

我遇到了众所周知的DefaultEmbeddedCacheManager类强制转换异常的问题。我用的是倒影。

代码语言:javascript
复制
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;
}

此外,我还得把容器标记为已开始时的样子。

代码语言:javascript
复制
    <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>

缓存被复制,尽管不同的类加载器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-13 11:16:38

如果每个应用程序都在使用自己的缓存管理器,则它们将分离缓存。

您可以通过Spring的JNDI支持( JNDI名称为java:jboss/infinispan/my-container-name)检索应用服务器管理的缓存容器。因此Spring将负责确保每个部件都使用同一个容器。

我不能100%肯定您会得到相同的缓存,它可能会返回一个特定于应用程序的缓存(2个应用程序数据对象实际上来自不同的类加载程序)。

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

票数 2
EN

Stack Overflow用户

发布于 2013-02-21 11:27:55

虽然有点晚了,但是有关通过JNDI访问无穷大缓存的信息可以找到这里

通过JNDI查找,我得到了CacheContainer

代码语言:javascript
复制
<jee:jndi-lookup id="cache1" 
    jndi-name="java:jboss/infinispan/container/jbossas7-quickstart" 
    cache="true" resource-ref="false" lookup-on-startup="true" />

我是通过注射器注射的

代码语言:javascript
复制
public void setContainer(CacheContainer container) {
    this.container = container;
}

现在我可以进入圣殿了。注意建议这里

代码语言:javascript
复制
@Resource(lookup="java:jboss/infinispan/container/my-container-name")
@Resource(lookup="java:jboss/infinispan/cache/my-container-name/my-cache-name")

不要在我的春豆里工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12858624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档