提问者:小点点

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


我使用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-类型=键


共1个答案

匿名用户

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

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

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

您可以将此逻辑嵌入到函数中,并从客户端执行实际的函数来检索此数据,这正是gfsh在执行列表索引命令时所做的。

希望这有帮助。干杯。