有没有办法使用Java检索在服务器区域上创建的所有索引?

时间:2019-01-30 05:03:52

标签: java jmx gemfire

我使用gfsh创建了具有索引的区域。我正在尝试获取基于区域和服务器的索引列表。我使用mbean“ CacheServerMXBean”来获取基于服务器的索引列表。但是我没有在其上创建索引的区域的名称。是否可以获取索引详细信息以及区域和服务器名称?

我还尝试使用新的ClientCacheFactory()。addPoolLocator(“ localhost”,10334).create()。getLocalQueryService()。getIndexes(); 结果集为空

1)ClientCache缓存= new ClientCacheFactory()。addPoolLocator(“ localhost”,10334).create();

    Region<String, Object> region1 = cache
              .<String, Object>createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY)
              .create("region_local");

region1.getRegionService()。getQueryService()。getIndexes();

错误:服务器区域不支持索引操作。

2)new ClientCacheFactory()。addPoolLocator(“ localhost”,10334).create()。getLocalQueryService()。getIndexes(); 输出:空数组

3)(工作代码)

ObjectName objName =新的ObjectName(                 String.format(String.format(“ GemFire:service = CacheServer,port =%s,type = Member,member =%s”,serverPort,serverName)));;         CacheServerMBean cacheBean = JMX.newMXBeanProxy(mbeanConnection,objName,CacheServerMBean.class);

    cacheBean.getIndexList();

输出:这给出了索引列表。但是我试图找到一种方法来获取创建这些索引的区域详细信息。

GFSH命令:创建索引--name = myKeyIndex_local --expression = region_local.Id --region = region_local --type = key

1 个答案:

答案 0 :(得分:0)

目前无法通过JMX获取完整的索引元数据,在内部,代码只是提取索引的名称,仅将特定数据返回给调用者(即使它具有实际的成员和区域名称)好)。

也就是说,可以使用类似于您发布的内容通过Java获得此信息,但是代码应在服务器端执行

for (final Index index : cache.getQueryService().getIndexes()) {
  System.out.println(index.getName() + " " + index.getRegion().getName());  
}

您可以将此逻辑嵌入function中,并从客户端执行实际的function以检索此数据,这正是执行{{1}时gfsh所做的} command

希望这会有所帮助。干杯。