Spring Data Gemfire - 从JNDI读取定位器

时间:2016-09-27 16:14:01

标签: spring-data-gemfire

我正在尝试从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中的一个问题吗?

2 个答案:

答案 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 locatorsservers属性中处理SpEL表达式不正确或者当前处理的简单事实基于<gfe:pool> XML名称空间元素的bean定义。

然而,它确实处理 Spring 属性占位符,如...

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

理解当前行为的原因是一个相当长而复杂的解释,但肯定可以改进。所以,我已经提交了SGF-535

  

注意:我在PoolParser中使用SGF-433中的locatorsservers属性指定了属性占位符时修复了<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,了解我的进展情况。

很抱歉给您带来不便,

约翰