我使用gfsh创建了带有索引的区域。我正在尝试根据区域和服务器获取这些索引列表。我使用mbean“CacheServerMXBean”来获取基于服务器的索引列表。但是我没有创建索引的区域名称。是否有选项可以获取索引详细信息以及区域和服务器名称?
我还尝试使用新的ClientCacheFactory(). addPoolLocator("localhost",10334).create().getLocalQueryService().getIndex();结果集为空
1)ClientCache cache=new ClientCacheFactory(). addPoolLocator("localhost",10334).create();
Region<String, Object> region1 = cache
.<String, Object>createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY)
.create("region_local");
地区1.获取地区服务()。获取查询服务()。获取索引();
错误:服务器区域不支持索引操作。
2)新的ClientCacheFactory(). addPoolLocator("localhost",10334).create().getLocalQueryService().getIndex();输出:空数组
3)(工作代码)
ObjectName objectName=new ObjectName(String. format("GemFire:service=CacheServer,port=%s,type=成员,成员=%s",serverPort,serverName)));CacheServerMBean cacheBean=JMX.newMXBeanProxy(mbeanConnection,ObjectName,CacheServerMBean.class);
cacheBean.getIndexList();
输出:这给了我索引列表。但我正在尝试找到一种方法来获取创建这些索引的区域详细信息。
GFSH命令:创建索引-名称=myKeyIndex_local-表达式=region_local.Id-区域=region_local-类型=键
目前没有办法通过JMX获取完整的索引元数据,内部代码只是提取索引的名称并仅将特定数据返回给调用者(即使它也有实际的成员和区域名称)。
也就是说,这些信息可以通过Java获得,使用类似于您发布的内容,但代码应该在服务器端执行:
for (final Index index : cache.getQueryService().getIndexes()) {
System.out.println(index.getName() + " " + index.getRegion().getName());
}
您可以将此逻辑嵌入到函数
中,并从客户端执行实际的函数
来检索此数据,这正是gfsh
在执行列表索引
命令时所做的。
希望这有帮助。干杯。