Skip to content

Commit

Permalink
DATAGEODE-8 - Ensure locators and servers and configured correctly wh…
Browse files Browse the repository at this point in the history
…en using <gfe:pool> attributes.

Related JIRA: https://jira.spring.io/browse/SGF-628.

(cherry picked from commit ffb8c70)
Signed-off-by: John Blum <jblum@pivotal.io>
  • Loading branch information
jxblum committed May 12, 2017
1 parent ea4670a commit dbba298
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 39 deletions.
Expand Up @@ -120,7 +120,7 @@ public class PoolFactoryBean implements FactoryBean<Pool>, InitializingBean, Dis
public void afterPropertiesSet() throws Exception {
if (!StringUtils.hasText(name)) {
Assert.hasText(beanName, "Pool 'name' is required");
name = beanName;
this.name = beanName;
}

// check for an existing, configured Pool with name first
Expand All @@ -131,15 +131,15 @@ public void afterPropertiesSet() throws Exception {
log.debug(String.format("A Pool with name [%1$s] already exists; using existing Pool.", name));
}

springBasedPool = false;
pool = existingPool;
this.springBasedPool = false;
this.pool = existingPool;
}
else {
if (log.isDebugEnabled()) {
log.debug(String.format("No Pool with name [%1$s] was found. Creating new Pool.", name));
}

springBasedPool = true;
this.springBasedPool = true;
}
}

Expand All @@ -166,7 +166,7 @@ public void destroy() throws Exception {
/* (non-Javadoc) */
@Override
public Pool getObject() throws Exception {
if (pool == null) {
if (this.pool == null) {
eagerlyInitializeClientCacheIfNotPresent();

PoolFactory poolFactory = createPoolFactory();
Expand All @@ -190,11 +190,11 @@ public Pool getObject() throws Exception {
poolFactory.setSubscriptionRedundancy(subscriptionRedundancy);
poolFactory.setThreadLocalConnections(threadLocalConnections);

for (ConnectionEndpoint locator : locators) {
for (ConnectionEndpoint locator : this.locators) {
poolFactory.addLocator(locator.getHost(), locator.getPort());
}

for (ConnectionEndpoint server : servers) {
for (ConnectionEndpoint server : this.servers) {
poolFactory.addServer(server.getHost(), server.getPort());
}

Expand All @@ -204,6 +204,18 @@ public Pool getObject() throws Exception {
return pool;
}

/**
* Determines whether the GemFire DistributedSystem exists yet or not.
*
* @return a boolean value indicating whether the single, GemFire DistributedSystem has been created already.
* @see org.springframework.data.gemfire.GemfireUtils#getDistributedSystem()
* @see org.springframework.data.gemfire.GemfireUtils#isConnected(DistributedSystem)
* @see org.apache.geode.distributed.DistributedSystem
*/
boolean isDistributedSystemPresent() {
return GemfireUtils.isConnected(GemfireUtils.getDistributedSystem());
}

/**
* Attempts to eagerly initialize the GemFire {@link ClientCache} if not already present so that the single
* {@link org.apache.geode.distributed.DistributedSystem} will exists, which is required to create
Expand All @@ -218,18 +230,6 @@ void eagerlyInitializeClientCacheIfNotPresent() {
}
}

/**
* Determines whether the GemFire DistributedSystem exists yet or not.
*
* @return a boolean value indicating whether the single, GemFire DistributedSystem has been created already.
* @see org.springframework.data.gemfire.GemfireUtils#getDistributedSystem()
* @see org.springframework.data.gemfire.GemfireUtils#isConnected(DistributedSystem)
* @see org.apache.geode.distributed.DistributedSystem
*/
boolean isDistributedSystemPresent() {
return GemfireUtils.isConnected(GemfireUtils.getDistributedSystem());
}

/**
* Creates an instance of the GemFire {@link PoolFactory} interface to construct, configure and initialize
* a GemFire {@link Pool}.
Expand All @@ -245,7 +245,7 @@ protected PoolFactory createPoolFactory() {
/* (non-Javadoc) */
@Override
public Class<?> getObjectType() {
return (pool != null ? pool.getClass() : Pool.class);
return (this.pool != null ? this.pool.getClass() : Pool.class);
}

/* (non-Javadoc) */
Expand Down Expand Up @@ -595,4 +595,12 @@ public void setSubscriptionRedundancy(int subscriptionRedundancy) {
public void setThreadLocalConnections(boolean threadLocalConnections) {
this.threadLocalConnections = threadLocalConnections;
}

/* (non-Javadoc; internal framework use only) */
public final void setLocatorsConfiguration(Object locatorsConfiguration) {
}

/* (non-Javadoc; internal framework use only) */
public final void setServersConfiguration(Object serversConfiguration) {
}
}
Expand Up @@ -128,8 +128,8 @@ protected void doParse(Element element, ParserContext parserContext, BeanDefinit
}
}

boolean locatorsSet = parseLocators(element, getRegistry(parserContext));
boolean serversSet = parseServers(element, getRegistry(parserContext));
boolean locatorsSet = parseLocators(element, builder, getRegistry(parserContext));
boolean serversSet = parseServers(element, builder, getRegistry(parserContext));

// NOTE: if neither Locators nor Servers were configured, then setup a connection to a Server
// running on localhost, listening on the default CacheServer port 40404
Expand Down Expand Up @@ -192,7 +192,7 @@ BeanDefinition parseLocator(Element element) {
}

/* (non-Javadoc) */
boolean parseLocators(Element element, BeanDefinitionRegistry registry) {
boolean parseLocators(Element element, BeanDefinitionBuilder poolBuilder, BeanDefinitionRegistry registry) {
String locatorsAttributeValue = element.getAttribute(LOCATORS_ATTRIBUTE_NAME);

if (StringUtils.hasText(locatorsAttributeValue)) {
Expand All @@ -207,7 +207,8 @@ boolean parseLocators(Element element, BeanDefinitionRegistry registry) {
AbstractBeanDefinition addLocatorsMethodInvokingBean =
addLocatorsMethodInvokingBeanBuilder.getBeanDefinition();

BeanDefinitionReaderUtils.registerWithGeneratedName(addLocatorsMethodInvokingBean, registry);
poolBuilder.addPropertyReference("locatorsConfiguration",
BeanDefinitionReaderUtils.registerWithGeneratedName(addLocatorsMethodInvokingBean, registry));

return true;
}
Expand All @@ -222,7 +223,7 @@ BeanDefinition parseServer(Element element) {
}

/* (non-Javadoc) */
boolean parseServers(Element element, BeanDefinitionRegistry registry) {
boolean parseServers(Element element, BeanDefinitionBuilder poolBuilder, BeanDefinitionRegistry registry) {
String serversAttributeValue = element.getAttribute(SERVERS_ATTRIBUTE_NAME);

if (StringUtils.hasText(serversAttributeValue)) {
Expand All @@ -237,7 +238,8 @@ boolean parseServers(Element element, BeanDefinitionRegistry registry) {
AbstractBeanDefinition addServersMethodInvokingBean =
addServersMethodInvokingBeanBuilder.getBeanDefinition();

BeanDefinitionReaderUtils.registerWithGeneratedName(addServersMethodInvokingBean, registry);
poolBuilder.addPropertyReference("serversConfiguration",
BeanDefinitionReaderUtils.registerWithGeneratedName(addServersMethodInvokingBean, registry));

return true;
}
Expand Down
Expand Up @@ -507,7 +507,9 @@ public void parseLocators() {
doAnswer(answer).when(mockRegistry).registerBeanDefinition(eq(generateBeanName(MethodInvokingBean.class)),
any(BeanDefinition.class));

assertThat(parser.parseLocators(mockElement, mockRegistry)).isTrue();
BeanDefinitionBuilder poolBuilder = BeanDefinitionBuilder.genericBeanDefinition();

assertThat(parser.parseLocators(mockElement, poolBuilder, mockRegistry)).isTrue();

verify(mockElement, times(1)).getAttribute(eq(PoolParser.ID_ATTRIBUTE));
verify(mockElement, times(1)).getAttribute(eq(PoolParser.LOCATORS_ATTRIBUTE_NAME));
Expand Down Expand Up @@ -557,7 +559,9 @@ public void parseServers() {
doAnswer(answer).when(mockRegistry).registerBeanDefinition(eq(generateBeanName(MethodInvokingBean.class)),
any(BeanDefinition.class));

assertThat(parser.parseServers(mockElement, mockRegistry)).isTrue();
BeanDefinitionBuilder poolBuilder = BeanDefinitionBuilder.genericBeanDefinition();

assertThat(parser.parseServers(mockElement, poolBuilder, mockRegistry)).isTrue();

verify(mockElement, times(1)).getAttribute(eq(PoolParser.ID_ATTRIBUTE));
verify(mockElement, times(1)).getAttribute(eq(PoolParser.SERVERS_ATTRIBUTE_NAME));
Expand Down
Expand Up @@ -12,7 +12,7 @@
">

<util:properties id="client.properties">
<prop key="gemfire.cache.client.locator.host-and-port">localhost[11235]</prop>
<prop key="gemfire.cache.client.pool.locator.hosts-and-ports">localhost[11235]</prop>
</util:properties>

<context:property-placeholder properties-ref="client.properties"/>
Expand All @@ -21,11 +21,12 @@
<prop key="log-level">warning</prop>
</util:properties>

<gfe:client-cache properties-ref="gemfireProperties" pool-name="locatorPool"/>

<gfe:pool id="locatorPool" locators="${gemfire.cache.client.locator.host-and-port}"/>
<gfe:client-cache properties-ref="gemfireProperties"/>

<gfe:client-region id="Example" pool-name="locatorPool" shortcut="PROXY"
key-constraint="java.lang.String" value-constraint="java.lang.Integer"/>

<!-- Keep the definition of this GemFire Pool bean after the Region (Example) that depends on it! -->
<gfe:pool id="locatorPool" locators="${gemfire.cache.client.pool.locator.hosts-and-ports}"/>

</beans>
Expand Up @@ -12,9 +12,9 @@
">

<util:properties id="clientProperties">
<prop key="gemfire.cache.client.server.hosts-and-ports">localhost[23579],localhost[23654]</prop>
<prop key="gemfire.cache.client.server.host.3">localhost</prop>
<prop key="gemfire.cache.client.server.port.3">24448</prop>
<prop key="gemfire.cache.client.pool.server.hosts-and-ports">localhost[23579],localhost[23654]</prop>
<prop key="gemfire.cache.client.pool.server.host">localhost</prop>
<prop key="gemfire.cache.client.pool.server.port">24448</prop>
</util:properties>

<context:property-placeholder properties-ref="clientProperties"/>
Expand All @@ -25,11 +25,12 @@

<gfe:client-cache properties-ref="gemfireProperties" pool-name="serverPool"/>

<gfe:pool id="serverPool" servers="${gemfire.cache.client.server.hosts-and-ports}">
<gfe:server host="${gemfire.cache.client.server.host.3}" port="${gemfire.cache.client.server.port.3}"/>
</gfe:pool>

<gfe:client-region id="Example" pool-name="serverPool" shortcut="PROXY"
key-constraint="java.lang.String" value-constraint="java.lang.Integer"/>

<!-- Keep the definition of this GemFire Pool bean after the Region (Example) that depends on it! -->
<gfe:pool id="serverPool" servers="${gemfire.cache.client.pool.server.hosts-and-ports}">
<gfe:server host="${gemfire.cache.client.pool.server.host}" port="${gemfire.cache.client.pool.server.port}"/>
</gfe:pool>

</beans>

0 comments on commit dbba298

Please sign in to comment.