【问题标题】:Getting pre-configured cache from cache container configured under infinispan wildfly subsystem从 infinispan wildfly 子系统下配置的缓存容器获取预配置缓存
【发布时间】:2016-09-17 12:56:07
【问题描述】:

我对 Wildfly 下的 infinispan 子系统感到非常困惑,并且无法从现有缓存容器中获取预配置的缓存。为了可视化问题,我创建了一个在 Github 上共享的最小示例项目:infinispan-wildfly-test

测试设置创建一个带有两个缓存 (x,y) 的缓存容器 (TEST),将 x 设置为默认值。当我现在通过资源查找获得 EmbeddedCacheManager 时,我得到了我期待的容器:

@Resource(lookup = "java:jboss/infinispan/container/TEST")
private EmbeddedCacheManager cacheManager;

但是,当尝试获取缓存(x 或 y)时,我总是得到一个新创建的缓存,其配置与我使用 CLI 创建的配置不匹配,缓存完全未配置!

关键是我可以确定 EmbeddedCacheManager 是正确的容器,因为它将缓存 x 作为默认容器(但未配置)提供给我,但是我在这里缺少什么?如何获取缓存容器的预配置缓存?

那里的所有示例都没有解决这个问题,我不确定这些人是否意识到他们得到了一个未配置的缓存这一事实。示例始终只显示容器的资源查找以及获取默认缓存实例。没有检查配置...

那么有没有人知道答案(可能是 infinispan 的贡献者)?提前感谢和感谢;)

【问题讨论】:

    标签: wildfly wildfly-8 infinispan wildfly-9 wildfly-10


    【解决方案1】:

    直接注入你的缓存。

    @Resource(lookup = "java:jboss/infinispan/cache/TEST/x")
    private Cache<?, ?> cacheX;
    @Resource(lookup = "java:jboss/infinispan/cache/TEST/y")
    private Cache<?, ?> cacheY;
    

    【讨论】:

    • 但是有没有办法以编程方式从注入的 CM 中检索缓存?
    • 嗨,我之前已经尝试过,但无法通过上下文使用编程查找来获取缓存。注入缓存不是选项,因为在我需要缓存的地方,名称仅在运行时已知,不包括静态资源查找方法。
    • 我已经尝试过你的方法,它按预期工作,但它表现出一些奇怪的行为:当我使用 InitialContext.lookup("java:jboss/infinispan/cache/TEST/x")找不到名字!但是当我按照你所说的将资源注入添加到我的 servlet 时,我也可以使用上下文查找来查找这个缓存。那么资源查找概念是否有程序化方法?
    • 抱歉回复晚了 - 您需要在部署描述符中建立资源引用。这将确保目标服务可用于普通 JNDI 查找。
    猜你喜欢
    • 2019-06-15
    • 2020-10-26
    • 1970-01-01
    • 2015-12-13
    • 2014-09-29
    • 2021-01-12
    • 2018-11-03
    • 2013-12-03
    • 2015-09-07
    相关资源
    最近更新 更多