【问题标题】:Is there a way to retrieve all index created on server regions using Java?有没有办法使用 Java 检索在服务器区域上创建的所有索引?
【发布时间】:2019-01-30 05:03:52
【问题描述】:

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

我也尝试使用 new 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)(工作代码)

对象名 objName = 新对象名( 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

【问题讨论】:

    标签: java jmx gemfire


    【解决方案1】:

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

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

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

    您可以将此逻辑嵌入function 中并从客户端执行实际的function 以检索此数据,这正是gfsh 在执行list indexes command 时所做的事情。

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

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 2015-10-06
      • 2015-06-03
      • 2021-11-11
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多