Есть ли способ получить все индексы, созданные в регионах сервера, используя Java? - PullRequest
0 голосов
/ 30 января 2019

Я создал регионы с индексами, используя gfsh.Я пытаюсь получить этот список индексов на основе региона и сервера.Я использовал mbean "CacheServerMXBean", чтобы получить список индексов на основе сервера.Но я не получаю название региона, по которому создается индекс.Есть ли возможность получить данные индекса вместе с регионом и именем сервера?

Я также пытался использовать новую ClientCacheFactory (). AddPoolLocator ("localhost", 10334) .create (). GetLocalQueryService (). GetIndexes ();Набор результатов пуст

1) Кэш ClientCache = новый 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, порт =% s, тип =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= ключ

1 Ответ

0 голосов
/ 30 января 2019

В настоящее время нет способа получить полные метаданные индекса через JMX, внутренне код просто извлекает имя индекса и возвращает вызывающей стороне только эти конкретные данные (даже если у него есть фактический член и имя региона какхорошо).

Тем не менее, эта информация может быть получена через Java, используя что-то похожее на то, что вы опубликовали, , но код должен выполняться на стороне сервера :

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

Вы можете встроить эту логику в function и выполнить фактический function от клиента для получения этих данных, что в точности и делает gfsh при выполнении команды list indexes .

Надеюсь, это поможет.Приветствия.

...