diff --git a/src/main/java/org/springframework/data/gemfire/config/PoolParser.java b/src/main/java/org/springframework/data/gemfire/config/PoolParser.java index 0d131126..90acd783 100644 --- a/src/main/java/org/springframework/data/gemfire/config/PoolParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/PoolParser.java @@ -81,6 +81,12 @@ class PoolParser extends AbstractSimpleBeanDefinitionParser { locators.addAll(parseLocators(element)); servers.addAll(parseServers(element)); + // NOTE if neither Locators or Servers were specified, then setup a default connection to a Locator + // running on localhost listening on the default Locator port (10334) for convenience + if (locators.isEmpty() && servers.isEmpty()) { + locators.add(buildConnection(DEFAULT_HOST, String.valueOf(DEFAULT_LOCATOR_PORT), false)); + } + if (!locators.isEmpty()) { builder.addPropertyValue("locators", locators); } diff --git a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.6.xsd b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.6.xsd index aaa939a0..ef6ec09e 100644 --- a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.6.xsd +++ b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.6.xsd @@ -2052,11 +2052,9 @@ Note that in order to instantiate a pool, a GemFire cache needs to be already st - - - + + + diff --git a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.7.xsd b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.7.xsd index 46046c99..2774af09 100644 --- a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.7.xsd +++ b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.7.xsd @@ -2052,11 +2052,9 @@ Note that in order to instantiate a pool, a GemFire cache needs to be already st - - - + + + diff --git a/src/test/java/org/springframework/data/gemfire/config/PoolNamespaceTest.java b/src/test/java/org/springframework/data/gemfire/config/PoolNamespaceTest.java index 052f7425..eebfab21 100644 --- a/src/test/java/org/springframework/data/gemfire/config/PoolNamespaceTest.java +++ b/src/test/java/org/springframework/data/gemfire/config/PoolNamespaceTest.java @@ -19,6 +19,7 @@ package org.springframework.data.gemfire.config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.net.InetSocketAddress; @@ -71,18 +72,69 @@ public class PoolNamespaceTest { assertSocketAddress(locators.iterator().next(), "localhost", 40403); } + @Test + public void testSimplePool() throws Exception { + assertTrue(context.containsBean("simple")); + + PoolFactoryBean poolFactoryBean = context.getBean("&simple", PoolFactoryBean.class); + Collection locators = TestUtils.readField("locators", poolFactoryBean); + + assertNotNull(locators); + assertEquals(1, locators.size()); + + assertSocketAddress(locators.iterator().next(), PoolParser.DEFAULT_HOST, PoolParser.DEFAULT_LOCATOR_PORT); + + Collection servers = TestUtils.readField("servers", poolFactoryBean); + + assertNull(servers); + } + + @Test + public void testLocatorPool() throws Exception { + assertTrue(context.containsBean("locator")); + + PoolFactoryBean poolFactoryBean = context.getBean("&locator", PoolFactoryBean.class); + Collection locators = TestUtils.readField("locators", poolFactoryBean); + + assertNotNull(locators); + assertEquals(2, locators.size()); + + Iterator it = locators.iterator(); + + assertSocketAddress(it.next(), "skullbox", PoolParser.DEFAULT_LOCATOR_PORT); + assertSocketAddress(it.next(), "yorktown", 12480); + + Collection servers = TestUtils.readField("servers", poolFactoryBean); + + assertNull(servers); + } + @Test public void testComplexPool() throws Exception { assertTrue(context.containsBean("complex")); PoolFactoryBean poolFactoryBean = context.getBean("&complex", PoolFactoryBean.class); - assertEquals(30, TestUtils.readField("retryAttempts", poolFactoryBean)); - assertEquals(6000, TestUtils.readField("freeConnectionTimeout", poolFactoryBean)); - assertEquals(5000l, TestUtils.readField("pingInterval", poolFactoryBean)); - assertTrue((Boolean) TestUtils.readField("subscriptionEnabled", poolFactoryBean)); + assertEquals(2000, TestUtils.readField("freeConnectionTimeout", poolFactoryBean)); + assertEquals(20000l, TestUtils.readField("idleTimeout", poolFactoryBean)); + assertEquals(10000, TestUtils.readField("loadConditioningInterval", poolFactoryBean)); + assertEquals(false, TestUtils.readField("keepAlive", poolFactoryBean)); + assertEquals(100, TestUtils.readField("maxConnections", poolFactoryBean)); + assertEquals(5, TestUtils.readField("minConnections", poolFactoryBean)); + assertEquals(5, TestUtils.readField("minConnections", poolFactoryBean)); assertFalse((Boolean) TestUtils.readField("multiUserAuthentication", poolFactoryBean)); + assertEquals(5000l, TestUtils.readField("pingInterval", poolFactoryBean)); assertTrue((Boolean) TestUtils.readField("prSingleHopEnabled", poolFactoryBean)); + assertEquals(500, TestUtils.readField("readTimeout", poolFactoryBean)); + assertEquals(5, TestUtils.readField("retryAttempts", poolFactoryBean)); + assertEquals("TestGroup", TestUtils.readField("serverGroup", poolFactoryBean)); + assertEquals(65536, TestUtils.readField("socketBufferSize", poolFactoryBean)); + assertEquals(5000, TestUtils.readField("statisticInterval", poolFactoryBean)); + assertEquals(250, TestUtils.readField("subscriptionAckInterval", poolFactoryBean)); + assertTrue((Boolean) TestUtils.readField("subscriptionEnabled", poolFactoryBean)); + assertEquals(30000, TestUtils.readField("subscriptionMessageTrackingTimeout", poolFactoryBean)); + assertEquals(2, TestUtils.readField("subscriptionRedundancy", poolFactoryBean)); + assertTrue((Boolean) TestUtils.readField("threadLocalConnections", poolFactoryBean)); Collection servers = TestUtils.readField("servers", poolFactoryBean); @@ -122,11 +174,12 @@ public class PoolNamespaceTest { Collection servers = TestUtils.readField("servers", poolFactoryBean); assertNotNull(servers); - assertEquals(2, servers.size()); + assertEquals(3, servers.size()); Iterator serverIterator = locators.iterator(); assertSocketAddress(serverIterator.next(), "scorch", 21480); + assertSocketAddress(serverIterator.next(), "scorn", 51515); assertSocketAddress(serverIterator.next(), "skullbox", 9110); } diff --git a/src/test/java/org/springframework/data/gemfire/config/PoolParserTest.java b/src/test/java/org/springframework/data/gemfire/config/PoolParserTest.java index f681cbfb..8f2bfa76 100644 --- a/src/test/java/org/springframework/data/gemfire/config/PoolParserTest.java +++ b/src/test/java/org/springframework/data/gemfire/config/PoolParserTest.java @@ -19,6 +19,7 @@ package org.springframework.data.gemfire.config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -227,6 +228,8 @@ public class PoolParserTest { BeanDefinition poolDefinition = builder.getRawBeanDefinition(); assertNotNull(poolDefinition); + assertTrue(poolDefinition.getPropertyValues().contains("locators")); + assertTrue(poolDefinition.getPropertyValues().contains("servers")); ManagedList locators = (ManagedList) poolDefinition.getPropertyValues() .getPropertyValue("locators").getValue(); @@ -249,4 +252,33 @@ public class PoolParserTest { assertBeanDefinition(servers.get(2), "backspace", String.valueOf(PoolParser.DEFAULT_SERVER_PORT)); } + @Test + @SuppressWarnings("unchecked") + public void testPostProcessWithNoLocatorsOrServersSpecified() { + BeanDefinitionBuilder poolBuilder = BeanDefinitionBuilder.genericBeanDefinition(); + Element mockPoolElement = mock(Element.class, "testPostProcessWithNoLocatorsOrServersSpecified.MockPoolElement"); + NodeList mockNodeList = mock(NodeList.class, "testPostProcessWithNoLocatorsOrServersSpecified.MockNodeList"); + + when(mockNodeList.getLength()).thenReturn(0); + when(mockPoolElement.getChildNodes()).thenReturn(mockNodeList); + when(mockPoolElement.getAttribute(eq(PoolParser.LOCATORS_ATTRIBUTE_NAME))).thenReturn(""); + when(mockPoolElement.getAttribute(eq(PoolParser.SERVERS_ATTRIBUTE_NAME))).thenReturn(""); + + parser.postProcess(poolBuilder, mockPoolElement); + + BeanDefinition poolDefinition = poolBuilder.getBeanDefinition(); + + assertNotNull(poolDefinition); + assertTrue(poolDefinition.getPropertyValues().contains("locators")); + assertFalse(poolDefinition.getPropertyValues().contains("servers")); + + ManagedList locators = (ManagedList) poolDefinition.getPropertyValues() + .getPropertyValue("locators").getValue(); + + assertNotNull(locators); + assertFalse(locators.isEmpty()); + assertEquals(1, locators.size()); + assertBeanDefinition(locators.get(0), "localhost", String.valueOf(PoolParser.DEFAULT_LOCATOR_PORT)); + } + } diff --git a/src/test/resources/org/springframework/data/gemfire/config/pool-ns.xml b/src/test/resources/org/springframework/data/gemfire/config/pool-ns.xml index 12080355..0ee293c5 100644 --- a/src/test/resources/org/springframework/data/gemfire/config/pool-ns.xml +++ b/src/test/resources/org/springframework/data/gemfire/config/pool-ns.xml @@ -17,7 +17,7 @@ error - + @@ -25,8 +25,16 @@ - + + + + + @@ -37,6 +45,7 @@ +