diff --git a/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java b/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java index c7676a67..83bc1cb3 100644 --- a/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java @@ -250,47 +250,33 @@ public class RegionFactoryBean extends RegionLookupFactoryBean imple if (!region.getRegionService().isClosed()) { try { region.close(); + region = null; } catch (CacheClosedException cce) { // nothing to see folks, move on. } } - } else if (destroy) { + + } if (destroy) { region.destroyRegion(); + region = null; } } - region = null; } /** * Indicates whether the region referred by this factory bean, will be - * destroyed on shutdown (default false). Note: destroy and close are - * mutually exclusive. Enabling one will automatically disable the other. - * - * @param destroy whether or not to destroy the region - * - * @see #setClose(boolean) + * destroyed on shutdown (default false). */ public void setDestroy(boolean destroy) { this.destroy = destroy; - - if (destroy) { - close = false; - } } /** * Indicates whether the region referred by this factory bean, will be - * closed on shutdown (default true). Note: destroy and close are mutually - * exclusive. Enabling one will automatically disable the other. - * - * @param close whether to close or not the region - * @see #setDestroy(boolean) + * closed on shutdown (default true). */ public void setClose(boolean close) { this.close = close; - if (close) { - destroy = false; - } } /** diff --git a/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java b/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java index 69b58c42..daee69bb 100644 --- a/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java @@ -98,9 +98,12 @@ abstract class AbstractRegionParser extends AliasReplacingBeanDefinitionParser { String cacheRef = element.getAttribute("cache-ref"); // add cache reference (fallback to default if nothing is specified) builder.addPropertyReference("cache", (StringUtils.hasText(cacheRef) ? cacheRef : GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME)); + ParsingUtils.setPropertyValue(element, builder, "close"); + ParsingUtils.setPropertyValue(element, builder, "destroy"); } // add attributes ParsingUtils.setPropertyValue(element, builder, "name"); + ParsingUtils.parseOptionalRegionAttributes(parserContext, element, attrBuilder); ParsingUtils.parseStatistics(element, attrBuilder); ParsingUtils.setPropertyValue(element, attrBuilder, "publisher"); diff --git a/src/test/java/org/springframework/data/gemfire/config/ReplicatedRegionNamespaceTest.java b/src/test/java/org/springframework/data/gemfire/config/ReplicatedRegionNamespaceTest.java index d94362ff..369e64bc 100644 --- a/src/test/java/org/springframework/data/gemfire/config/ReplicatedRegionNamespaceTest.java +++ b/src/test/java/org/springframework/data/gemfire/config/ReplicatedRegionNamespaceTest.java @@ -55,6 +55,8 @@ public class ReplicatedRegionNamespaceTest { @Test public void testBasicReplica() throws Exception { assertTrue(context.containsBean("simple")); + RegionFactoryBean fb = context.getBean("&simple", RegionFactoryBean.class); + assertEquals(false ,(Boolean)TestUtils.readField("close", fb)); } @SuppressWarnings("rawtypes") diff --git a/src/test/resources/org/springframework/data/gemfire/config/replicated-ns.xml b/src/test/resources/org/springframework/data/gemfire/config/replicated-ns.xml index 9101253e..3f772a77 100644 --- a/src/test/resources/org/springframework/data/gemfire/config/replicated-ns.xml +++ b/src/test/resources/org/springframework/data/gemfire/config/replicated-ns.xml @@ -10,7 +10,7 @@ - +