2015-04-23 36 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); 
     } 
    } 
} 
相关问题