2015-04-23 33 views
2

我正在運行Oracle coherence集羣並使用擴展客戶端連接到集羣。 如果存在多個繼續加入和離開Oracle一致性集羣的擴展客戶端,則有可能一個服務創建了一些緩存並離開了集羣,但這些緩存存在於集羣中。如何獲取Oracle Coherence集羣中存在的所有緩存名稱?

我希望在任何時間點都能在羣集中顯示所有緩存名稱。

是否有可能獲取所有緩存名稱?

cacheService中有一個稱爲getCacheNames的API,它返回與該服務相對應的所有緩存名稱。

但是如何獲得屬於客戶端的其他服務創建的緩存名稱,這些客戶端不是更活躍但緩存存在於羣集中?

[更新]: - 有一個名爲'maps'的命令,它提供服務器中存在的所有緩存(由所有客戶端創建)。但我無法找到任何APi來做同樣的操作。

是否有任何API執行maps命令或任何方式直接使用JAVA代碼執行此命令。

回答

1

良藥苦口...

這裏是一個粗略的例子,需要一些整理,如果你想在生產中使用它的...

Enumeration serviceNames = CacheFactory.getCluster().getServiceNames(); 
while(serviceNames.hasMoreElements()){ 
    String serviceName = (String)serviceNames.nextElement(); 
    Service service = null; 
    try{ 
     service = CacheFactory.getService(serviceName); 
    }catch(Exception e){ 
     continue; 
    } 
    if(service instanceof CacheService){ 
     CacheService cacheService = (CacheService)service; 
     Enumeration cacheNames = cacheService.getCacheNames(); 
     while(cacheNames.hasMoreElements()){ 
      String cacheName = (String)cacheNames.nextElement(); 
      System.out.println("<<<" + cacheName); 
     } 
    } 
} 
相關問題