2012-10-12 48 views
3

我正在嘗試使用JBoss 7 Infinispan緩存作爲兩個部署war的基於Spring的應用程序的通信形式(更晚些時候)。我在訪問JBoss託管緩存管理器時遇到問題。Spring,Infinispan和JBoss 7集成

當我使用

DefaultCacheManager cacheManager = new DefaultCacheManager(); 
cache = cacheManager.getCache(); 
每個的兩個應用

,我得到兩個獨立的緩存。有什麼方法可以訪問由JBoss服務器創建的緩存而根本不使用@ManagedBean註釋和Java EE標準?


完成了。感謝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> 

儘管存在不同的類加載器,但仍會複製緩存。

+0

我有問題之內不工作了'DefaultEmbeddedCacheManager類轉換Exception'衆所周知的,你和你原來決心。但我無法弄清楚爲什麼將緩存實例定義爲'Map cache;'比[CacheContainer]少見(https://docs.jboss.org/infinispan/5.1/apidocs/org/infinispan/manager /CacheContainer.html)? –

回答

2

如果每個應用程序都使用自己的緩存管理器,它們將分開緩存。

您可以通過JNDI支持Spring(JNDI名稱爲java:jboss/infinispan/my-container-name)來檢索由應用程序服務器管理的緩存容器。所以Spring將負責確保每個部分都使用相同的容器。

我不是100%確定你會得到相同的緩存,它可能會返回一個特定於應用程序的緩存(2個應用程序數據對象實際上來自不同的類加載器)。

嵌入式高速緩存對於應用程序間通信可能不是必須的。您可能需要使用客戶端/服務器範例。

0

有點晚了一天,但對通過JNDI訪問infinispance緩存存儲的信息可以發現here

有了一個JNDI查找我得到的CacheContainer

<jee:jndi-lookup id="cache1" 
    jndi-name="java:jboss/infinispan/container/jbossas7-quickstart" 
    cache="true" resource-ref="false" lookup-on-startup="true" /> 

我通過注入setter

public void setContainer(CacheContainer container) { 
    this.container = container; 
} 

現在我可以訪問cachestore。請注意,建議here

@Resource(lookup="java:jboss/infinispan/container/my-container-name") 
@Resource(lookup="java:jboss/infinispan/cache/my-container-name/my-cache-name") 

與我的Spring bean