diff --git a/src/main/java/org/springframework/data/gemfire/client/PoolFactoryBean.java b/src/main/java/org/springframework/data/gemfire/client/PoolFactoryBean.java index 976a1c68..7d4ae742 100644 --- a/src/main/java/org/springframework/data/gemfire/client/PoolFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/client/PoolFactoryBean.java @@ -188,8 +188,9 @@ public class PoolFactoryBean implements FactoryBean, InitializingBean, if (!pool.isDestroyed()) { pool.releaseThreadLocalConnection(); pool.destroy(keepAlive); - if (log.isDebugEnabled()) + if (log.isDebugEnabled()) { log.debug("Destroyed pool '" + name + "'..."); + } } } } diff --git a/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java b/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java index 25189be2..264632f9 100644 --- a/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java @@ -74,7 +74,8 @@ class ClientRegionParser extends AliasReplacingBeanDefinitionParser { attr = element.getAttribute("cache-ref"); // add cache reference (fallback to default if nothing is specified) builder.addPropertyReference("cache", (StringUtils.hasText(attr) ? attr : GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME)); - + ParsingUtils.setPropertyValue(element, builder, "close"); + ParsingUtils.setPropertyValue(element, builder, "destroy"); // eviction + overflow attributes // client attributes BeanDefinitionBuilder attrBuilder = BeanDefinitionBuilder diff --git a/src/main/java/org/springframework/data/gemfire/listener/ContinuousQueryListenerContainer.java b/src/main/java/org/springframework/data/gemfire/listener/ContinuousQueryListenerContainer.java index 2c0bd2e4..51c02eb7 100644 --- a/src/main/java/org/springframework/data/gemfire/listener/ContinuousQueryListenerContainer.java +++ b/src/main/java/org/springframework/data/gemfire/listener/ContinuousQueryListenerContainer.java @@ -274,7 +274,7 @@ public class ContinuousQueryListenerContainer implements InitializingBean, Dispo this.errorHandler.handleError(ex); } else if (logger.isWarnEnabled()) { - logger.warn("Execution of JMS event listener failed, and no ErrorHandler has been set.", ex); + logger.warn("Execution of the CQ event listener failed, and no ErrorHandler has been set.", ex); } } diff --git a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.3.xsd b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.3.xsd index 0355ff95..7eb9b5ee 100755 --- a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.3.xsd +++ b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.3.xsd @@ -1874,6 +1874,8 @@ The name of the pool definition (by default "gemfirePool").]]> + region; - + @Resource(name = "challengeQuestionsRegion") + Region region; + @Autowired ClientCache cache; - - @Test - public void test() { - assertEquals("gemfirePool",region.getAttributes().getPoolName()); - } + + @Test + public void test() { + assertEquals("gemfirePool", region.getAttributes().getPoolName()); + } + + @Test + public void testNoClose() { + ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("/org/springframework/data/gemfire/client/client-cache-no-close.xml"); + Cache cache = ctx.getBean(Cache.class); + ctx.close(); + assertFalse(cache.isClosed()); + } } diff --git a/src/test/java/org/springframework/data/gemfire/client/MultipleClientCacheTest.java b/src/test/java/org/springframework/data/gemfire/client/MultipleClientCacheTest.java new file mode 100644 index 00000000..b32beecd --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/client/MultipleClientCacheTest.java @@ -0,0 +1,66 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.springframework.data.gemfire.client; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.data.gemfire.ForkUtil; +import org.springframework.data.gemfire.fork.SpringCacheServerProcess; + +import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.client.Pool; + +/** + * @author David Turanski + * + */ + +public class MultipleClientCacheTest { + @BeforeClass + public static void startUp() throws Exception { + ForkUtil.startCacheServer(SpringCacheServerProcess.class.getName() + " " + + "/org/springframework/data/gemfire/client/datasource-server.xml"); + } + @Test + public void testMultipleCaches() { + String resourcePath = "/org/springframework/data/gemfire/client/client-cache-no-close.xml"; + + ConfigurableApplicationContext ctx1 = new ClassPathXmlApplicationContext(resourcePath); + ConfigurableApplicationContext ctx2 = new ClassPathXmlApplicationContext(resourcePath); + Region region1 = ctx1.getBean(Region.class); + Cache cache1 = ctx1.getBean(Cache.class); + Pool pool = ctx1.getBean(Pool.class); + Region region2 = ctx2.getBean(Region.class); + Cache cache2 = ctx2.getBean(Cache.class); + assertSame(region1,region2); + assertSame(cache1,cache2); + assertFalse(region1.isDestroyed()); + ctx1.close(); + assertFalse(cache1.isClosed()); + assertFalse("region was destroyed" ,region1.isDestroyed()); + } + + @AfterClass + public static void cleanUp() throws InterruptedException { + Thread.sleep(3000); + ForkUtil.sendSignal(); + } +} diff --git a/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java b/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java index ff799c24..b4dd837f 100644 --- a/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java +++ b/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java @@ -12,6 +12,7 @@ */ package org.springframework.data.gemfire.config; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; @@ -20,6 +21,7 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.gemstone.gemfire.cache.Cache; +import com.gemstone.gemfire.cache.Region; /** * @author David Turanski @@ -33,11 +35,14 @@ public class MultipleCacheTest { ConfigurableApplicationContext ctx1 = new ClassPathXmlApplicationContext(resourcePath); ConfigurableApplicationContext ctx2 = new ClassPathXmlApplicationContext(resourcePath); + Region region1 = ctx1.getBean(Region.class); Cache cache1 = ctx1.getBean(Cache.class); + Region region2 = ctx2.getBean(Region.class); Cache cache2 = ctx2.getBean(Cache.class); + assertSame(region1,region2); assertSame(cache1,cache2); ctx1.close(); - ctx2.close(); assertFalse(cache1.isClosed()); + assertFalse("region was destroyed" ,region1.isDestroyed()); } } diff --git a/src/test/resources/org/springframework/data/gemfire/client/client-cache-no-close.xml b/src/test/resources/org/springframework/data/gemfire/client/client-cache-no-close.xml new file mode 100644 index 00000000..be2503e5 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/client/client-cache-no-close.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/client/client-cache.xml b/src/test/resources/org/springframework/data/gemfire/client/client-cache.xml index 29eecb6b..b0a76411 100644 --- a/src/test/resources/org/springframework/data/gemfire/client/client-cache.xml +++ b/src/test/resources/org/springframework/data/gemfire/client/client-cache.xml @@ -9,5 +9,5 @@ - + diff --git a/src/test/resources/org/springframework/data/gemfire/config/MultipleCacheTest-context.xml b/src/test/resources/org/springframework/data/gemfire/config/MultipleCacheTest-context.xml index 194d0be8..92894131 100644 --- a/src/test/resources/org/springframework/data/gemfire/config/MultipleCacheTest-context.xml +++ b/src/test/resources/org/springframework/data/gemfire/config/MultipleCacheTest-context.xml @@ -7,4 +7,5 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> +