我使用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
答案 0 :(得分:0)
目前无法通过JMX获取完整的索引元数据,在内部,代码只是提取索引的名称,仅将特定数据返回给调用者(即使它具有实际的成员和区域名称)好)。
也就是说,可以使用类似于您发布的内容通过Java获得此信息,但是代码应在服务器端执行:
for (final Index index : cache.getQueryService().getIndexes()) {
System.out.println(index.getName() + " " + index.getRegion().getName());
}
您可以将此逻辑嵌入function
中,并从客户端执行实际的function
以检索此数据,这正是执行{{1}时gfsh
所做的} command。
希望这会有所帮助。干杯。