我正在尝试从JNDI读取定位器主机和端口信息,其值的格式为host [port],host2 [port2]。
<jee:jndi-lookup id="locatorsJndi" jndi-name="locators/locator1" />
<gfe:pool id="locatorPool" locators="#{locatorsJndi}">
在这种情况下,Spring Data gemfire似乎无法正确识别定位器。它将JNDI lookuped值字符串作为一个主机,并在末尾附加端口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中的一个问题吗?
答案 0 :(得分:0)
由于基础异常为NoAvailableLocatorsException
,您可以尝试从gfsh
尝试连接到定位器,看看是否成功了吗?
gfsh>connect --locator=host1[port1]
答案 1 :(得分:0)
无法连接到列表中的任何定位器&#34;
host[10334],host2[10334]:10334]
&#34;;
来自堆栈跟踪消息的主机/端口,逗号分隔的字符串不正确。
我在JNDI上下文中收集了GemFire定位器的配置被正确指定为...&#34; host[10334],host2[10334]
&#34;?
如果是这样,那么归结为 Spring Data GemFire 在locators
和servers
属性中处理SpEL表达式不正确或者当前处理的简单事实基于<gfe:pool>
XML名称空间元素的bean定义。
然而,它确实处理 Spring 属性占位符,如...
<gfe:pool id="locatorsPool" locators="${app.gemfire.locators}"/>
理解当前行为的原因是一个相当长而复杂的解释,但肯定可以改进。所以,我已经提交了SGF-535。
注意:我在
PoolParser
中使用SGF-433中的locators
和servers
属性指定了属性占位符时修复了<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}"/>
中的类似问题。
要解决此问题,您可以执行以下操作...
{{1}}
关注SGF-535,了解我的进展情况。
很抱歉给您带来不便,
约翰