Spring Data Gemfire - чтение локаторов от JNDI

Я пытаюсь прочитать информацию о хосте локатора и порте из JNDI, значение которого находится в формате host[port],host2[port2].

<jee:jndi-lookup id="locatorsJndi" jndi-name="locators/locator1" />
<gfe:pool id="locatorPool" locators="#{locatorsJndi}">

Похоже, Spring Data gemfire не может правильно определить локаторы в этом случае. Он принимает искомую строку значений JNDI в качестве одного хоста и добавляет порт 10334 в конце.

Unable to connect to any locators in the list [**host[10334],host2[10334]**:10334]; nested exception is com.gemstone.gemfire.cache.client.NoAvailableLocatorsException:

Но, если я передаю значения хоста и порта как часть атрибута locators, как показано ниже, он работает как положено.

<gfe:pool id="locatorPool" locators="host1[port1],host2[port2]">

Это проблема в Spring Data Gemfire?

2 ответа

Решение

Невозможно подключиться к любому локатору в списке "host[10334],host2[10334]:10334]";

Хост / порт, разделенный запятыми String из сообщения Stack Trace, неверен.

Я понял, что ваша конфигурация локаторов GemFire ​​в вашем контексте JNDI правильно указана как... "host[10334],host2[10334]"?

Если это так, то это сводится к тому простому факту, что Spring Data GemFire неправильно, а точнее в настоящее время, обрабатывает выражения SpEL в locators а также servers атрибуты <gfe:pool> Определения bean-компонентов на основе элементов пространства имен XML.

Это, однако, обрабатывает заполнители свойства Spring, как в...

<gfe:pool id="locatorsPool" locators="${app.gemfire.locators}"/>

Это довольно длинное и сложное объяснение, чтобы понять, почему текущее поведение является тем, чем оно является, но, безусловно, это можно улучшить. Итак, я подал SGF-535.

ПРИМЕЧАНИЕ: я исправил аналогичную проблему в PoolParser когда свойства заполнителей были указаны с locators а также servers атрибуты в SGF-433.

Чтобы обойти эту проблему, вы можете сделать следующее...

<jee:jndi-lookup id="locatorsJndi" jndi-name="locators/locator1"/>

<util:properties id="applicationProperties">
  <prop key="locators">#{locatorsJndi}</prop>
</util:properties>

<context:property-placeholder properties-ref="applicationProperties"/>

<gfe:pool id="locatorPool" locators="${locators}"/>

Следуйте SGF-535 для получения обновлений о моем прогрессе.

Приносим извинения за неудобства,

Джон

Поскольку основное исключение NoAvailableLocatorsExceptionпопробуйте подключиться к локаторам из gfsh чтобы увидеть, если это удастся?

gfsh>connect --locator=host1[port1]
Другие вопросы по тегам