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]