diff --git a/src/main/java/org/springframework/data/gemfire/CacheFactoryBean.java b/src/main/java/org/springframework/data/gemfire/CacheFactoryBean.java index 50622b4c..300cdc26 100644 --- a/src/main/java/org/springframework/data/gemfire/CacheFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/CacheFactoryBean.java @@ -201,6 +201,8 @@ public class CacheFactoryBean implements BeanNameAware, BeanFactoryAware, BeanCl protected String beanName; protected boolean useBeanFactoryLocator = true; + + protected boolean close = true; // PDX options protected Object pdxSerializer; @@ -405,6 +407,9 @@ public class CacheFactoryBean implements BeanNameAware, BeanFactoryAware, BeanCl @Override public void destroy() throws Exception { + if (!close) { + return; + } if (cache != null && !cache.isClosed()) { cache.close(); } @@ -614,6 +619,14 @@ public class CacheFactoryBean implements BeanNameAware, BeanFactoryAware, BeanCl public void setCriticalHeapPercentage(Float criticalHeapPercentage) { this.criticalHeapPercentage = criticalHeapPercentage; } + + /** + * + * @param close set to false if destroy() should not close the cache + */ + public void setClose(boolean close) { + this.close = close; + } /** * diff --git a/src/main/java/org/springframework/data/gemfire/config/CacheParser.java b/src/main/java/org/springframework/data/gemfire/config/CacheParser.java index 45469990..4a82ee2b 100644 --- a/src/main/java/org/springframework/data/gemfire/config/CacheParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/CacheParser.java @@ -67,6 +67,7 @@ class CacheParser extends AbstractSimpleBeanDefinitionParser { ParsingUtils.setPropertyValue(element, builder, "search-timeout"); ParsingUtils.setPropertyValue(element, builder, "critical-heap-percentage"); ParsingUtils.setPropertyValue(element, builder, "eviction-heap-percentage"); + ParsingUtils.setPropertyValue(element, builder, "close"); List txListeners = DomUtils.getChildElementsByTagName(element, "transaction-listener"); if (!CollectionUtils.isEmpty(txListeners)) { 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 31e13b1f..e1188eff 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 @@ -239,6 +239,15 @@ JavaDocs for com.gemstone.gemfire.cache.control.ResourceManager for more informa ]]> + + + + + diff --git a/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java b/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java new file mode 100644 index 00000000..0697265c --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java @@ -0,0 +1,44 @@ +/* + * 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.config; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.gemstone.gemfire.cache.Cache; + +/** + * @author David Turanski + * + */ + +public class MultipleCacheTest { + @Test + public void testMultipleCaches() { + String resourcePath = "/org/springframework/data/gemfire/config/MultipleCacheTest-context.xml"; + + ConfigurableApplicationContext ctx1 = new ClassPathXmlApplicationContext(resourcePath); + ConfigurableApplicationContext ctx2 = new ClassPathXmlApplicationContext(resourcePath); + Cache cache1 = ctx1.getBean(Cache.class); + Cache cache2 = ctx2.getBean(Cache.class); + assertSame(cache1,cache2); + ctx1.close(); + ctx2.close(); + assertFalse(cache1.isClosed()); + } +} diff --git a/src/test/java/org/springframework/data/gemfire/fork/SpringCacheServerProcess.java b/src/test/java/org/springframework/data/gemfire/fork/SpringCacheServerProcess.java index 86d7fb05..a792ed45 100644 --- a/src/test/java/org/springframework/data/gemfire/fork/SpringCacheServerProcess.java +++ b/src/test/java/org/springframework/data/gemfire/fork/SpringCacheServerProcess.java @@ -15,6 +15,7 @@ package org.springframework.data.gemfire.fork; import java.io.BufferedReader; import java.io.InputStreamReader; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.gemfire.ForkUtil; @@ -24,19 +25,22 @@ import org.springframework.data.gemfire.ForkUtil; */ public class SpringCacheServerProcess { public static void main(String[] args) { + ConfigurableApplicationContext ctx = null; try { - new ClassPathXmlApplicationContext(args[0]); + ctx = new ClassPathXmlApplicationContext(args[0]); ForkUtil.createControlFile(SpringCacheServerProcess.class.getName()); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Waiting for shutdown"); bufferedReader.readLine(); - - } catch (Exception e) { e.printStackTrace(); System.exit(1); + } finally { + if (ctx != null) { + ctx.close(); + } } } } 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 new file mode 100644 index 00000000..194d0be8 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/config/MultipleCacheTest-context.xml @@ -0,0 +1,10 @@ + + + + +