2015-04-23 4 views
2

Я запускаю кластер согласованности Oracle и используя расширенные клиенты для подключения к кластеру. Если существует несколько расширенных клиентов, которые сохраняют соединение и оставляют кластер согласованности оракула, то есть вероятность того, что одна служба создала некоторые кеши и оставила кластер, но эти кеши присутствуют в кластере.Как получить имена всех кэшей в кластере Oracle Coherence?

Я хочу, чтобы все имена кешей присутствовали в кластере в любой момент времени.

Можно ли получить все имена кешей?

Существует API в cacheService под названием getCacheNames, который возвращает все имена кешей, соответствующие этой службе.

Но как получить имена кеша, созданные другими службами, принадлежащими клиентам, которые не активны, но кеши присутствуют в кластере?

[UPDATE]: - Существует команда под названием «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); 
     } 
    } 
}