2016-05-20 20 views
0

我對Wildfly下的infinispan子系統感到困惑,並且無法從現有的緩存容器中獲取預配置的緩存。爲了可視化我在Github上創建的最小示例項目,我創建了一個最小示例項目:infinispan-wildfly-test從配置在infinispan wildfly子系統下的緩存容器中獲取預配置的緩存

測試設置將創建一個包含兩個緩存(x,y)的緩存容器(TEST),並將x設置爲默認值。當我現在通過資源查找得到EmbeddedCacheManager我得到的容器我期待:

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

但隨後,試圖獲得一個Cache(x或y)我總是得到一個新創建的一個,其配置並不時匹配我使用CLI創建的那個,緩存完全沒有配置!

關鍵是我可以確定EmbeddedCacheManager是正確的容器,因爲它提供了緩存x作爲默認的(但未配置),但是我在這裏丟失了什麼?如何獲得緩存容器的預配置緩存?

所有在那裏的樣本都沒有解決這個問題,我不確定這些人是否知道他們獲得未配置緩存的事實。樣本始終只顯示容器的資源查找和獲取默認緩存實例。沒有配置檢查...

那麼有沒有人(可能是infinispan的貢獻者)誰知道答案?感謝並提前進行了許多升值;)

回答

4

直接注入緩存。

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

但是有沒有辦法從注入的CM以編程方式檢索緩存? –

+0

嗨,我已經嘗試過,並且無法通過上下文使用程序化查找來獲取緩存。注入緩存是沒有選擇的,因爲在我需要緩存的時候,只有在運行時才知道名稱,這就排除了靜態資源查找方法。 – shillner

+0

我已經嘗試過你的方法,它按預期工作,但它顯示了一些奇怪的行爲:當我使用InitialContext.lookup(「java:jboss/infinispan /緩存/ TEST/x」)名稱未找到!但是,當我如上所述將資源注入添加到我的servlet時,我也可以使用上下文查找來獲取此緩存。那麼是否有資源查找概念的編程方法? – shillner