diff --git a/src/main/java/org/springframework/data/gemfire/RegionLookupFactoryBean.java b/src/main/java/org/springframework/data/gemfire/RegionLookupFactoryBean.java index 1039bcbe..4a4b5669 100644 --- a/src/main/java/org/springframework/data/gemfire/RegionLookupFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/RegionLookupFactoryBean.java @@ -40,6 +40,8 @@ public class RegionLookupFactoryBean implements FactoryBean>, protected final Log log = LogFactory.getLog(getClass()); + private Boolean lookupEnabled = Boolean.TRUE; + private GemFireCache cache; private Region parent; @@ -59,11 +61,13 @@ public class RegionLookupFactoryBean implements FactoryBean>, synchronized (cache) { //region = (getParent() != null ? getParent().getSubregion(regionName) : cache.getRegion(regionName)); - if (getParent() != null) { - region = getParent().getSubregion(regionName); - } - else { - region = cache.getRegion(regionName); + if (isLookupEnabled()) { + if (getParent() != null) { + region = getParent().getSubregion(regionName); + } + else { + region = cache.getRegion(regionName); + } } if (region != null) { @@ -166,6 +170,18 @@ public class RegionLookupFactoryBean implements FactoryBean>, this.regionName = regionName; } + private boolean isLookupEnabled() { + return Boolean.TRUE.equals(getLookupEnabled()); + } + + public Boolean getLookupEnabled() { + return lookupEnabled; + } + + public void setLookupEnabled(Boolean lookupEnabled) { + this.lookupEnabled = lookupEnabled; + } + protected Region getRegion() { return region; } diff --git a/src/main/java/org/springframework/data/gemfire/client/ClientRegionFactoryBean.java b/src/main/java/org/springframework/data/gemfire/client/ClientRegionFactoryBean.java index cae9cc72..9619ba72 100644 --- a/src/main/java/org/springframework/data/gemfire/client/ClientRegionFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/client/ClientRegionFactoryBean.java @@ -75,8 +75,6 @@ public class ClientRegionFactoryBean extends RegionLookupFactoryBean private Interest[] interests; - private Region parent; - private RegionAttributes attributes; private Resource snapshot; @@ -91,6 +89,7 @@ public class ClientRegionFactoryBean extends RegionLookupFactoryBean } @Override + @SuppressWarnings("deprecation") protected Region lookupFallback(GemFireCache cache, String regionName) throws Exception { Assert.isTrue(cache instanceof ClientCache, String.format("Unable to create regions from %1$s", cache)); @@ -145,13 +144,13 @@ public class ClientRegionFactoryBean extends RegionLookupFactoryBean factory.setDiskStoreName(diskStoreName); } - Region clientRegion = (this.parent != null ? factory.createSubregion(parent, regionName) + Region clientRegion = (getParent() != null ? factory.createSubregion(getParent(), regionName) : factory.create(regionName)); if (log.isInfoEnabled()) { - if (parent != null) { + if (getParent() != null) { log.info(String.format("Created new Client Cache sub-Region [%1$s] under parent Region [%2$s].", - regionName, parent.getName())); + regionName, getParent().getName())); } else { log.info(String.format("Created new Client Cache Region [%1$s].", regionName)); @@ -237,15 +236,13 @@ public class ClientRegionFactoryBean extends RegionLookupFactoryBean * @see com.gemstone.gemfire.cache.DataPolicy */ protected void assertDataPolicyAndPersistentAttributeAreCompatible(final DataPolicy resolvedDataPolicy) { - final boolean persistentNotSpecified = (this.persistent == null); - if (resolvedDataPolicy.withPersistence()) { - Assert.isTrue(persistentNotSpecified || isPersistent(), String.format( + Assert.isTrue(isPersistentUnspecified() || isPersistent(), String.format( "Data Policy '%1$s' is invalid when persistent is false.", resolvedDataPolicy)); } else { // NOTE otherwise, the Data Policy is without persistence, so... - Assert.isTrue(persistentNotSpecified || isNotPersistent(), String.format( + Assert.isTrue(isPersistentUnspecified() || isNotPersistent(), String.format( "Data Policy '%1$s' is invalid when persistent is true.", resolvedDataPolicy)); } } @@ -380,7 +377,7 @@ public class ClientRegionFactoryBean extends RegionLookupFactoryBean /** * Sets the pool used by this client. * - * @param pool + * @param pool the GemFire client pool. */ public void setPool(Pool pool) { Assert.notNull(pool, "pool cannot be null"); @@ -390,7 +387,7 @@ public class ClientRegionFactoryBean extends RegionLookupFactoryBean /** * Sets the pool name used by this client. * - * @param poolName + * @param poolName a String specify the name of the GemFire client pool. */ public void setPoolName(String poolName) { Assert.hasText(poolName, "pool name is required"); @@ -474,7 +471,8 @@ public class ClientRegionFactoryBean extends RegionLookupFactoryBean /** * Sets the name of disk store to use for overflow and persistence - * @param diskStoreName + *

+ * @param diskStoreName a String specifying the 'name' of the client Region Disk Store. */ public void setDiskStoreName(String diskStoreName) { this.diskStoreName = diskStoreName; @@ -494,8 +492,8 @@ public class ClientRegionFactoryBean extends RegionLookupFactoryBean setDataPolicy(resolvedDataPolicy); } - public void setParent(Region parent) { - this.parent = parent; + protected boolean isPersistentUnspecified() { + return (persistent == null); } protected boolean isPersistent() { 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 ff41c1c0..1b2afea0 100644 --- a/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/AbstractRegionParser.java @@ -78,6 +78,7 @@ abstract class AbstractRegionParser extends AbstractSingleBeanDefinitionParser { } ParsingUtils.setPropertyValue(element, builder, "name"); + ParsingUtils.setPropertyValue(element, builder, "ignore-if-exists", "lookupEnabled"); ParsingUtils.setPropertyValue(element, builder, "data-policy"); ParsingUtils.setPropertyValue(element, builder, "persistent"); ParsingUtils.setPropertyValue(element, builder, "shortcut"); 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 75734ba1..3a66cae0 100644 --- a/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/ClientRegionParser.java @@ -59,8 +59,9 @@ class ClientRegionParser extends AbstractRegionParser { ParsingUtils.setPropertyValue(element, builder, "destroy"); } - ParsingUtils.setPropertyValue(element, builder, "data-policy", "dataPolicyName"); ParsingUtils.setPropertyValue(element, builder, "name"); + ParsingUtils.setPropertyValue(element, builder, "data-policy", "dataPolicyName"); + ParsingUtils.setPropertyValue(element, builder, "ignore-if-exists", "lookupEnabled"); ParsingUtils.setPropertyValue(element, builder, "persistent"); ParsingUtils.setPropertyValue(element, builder, "pool-name"); ParsingUtils.setPropertyValue(element, builder, "shortcut"); diff --git a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.4.xsd b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.4.xsd index 8d0db360..bf3ab5c5 100644 --- a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.4.xsd +++ b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-1.4.xsd @@ -548,6 +548,29 @@ CustomExpiry Time to idle (or idle timeout) configuration for the region entries + + + + + + * @author John Blum + * @see org.junit.Test + * @see org.springframework.context.ConfigurableApplicationContext + * @see org.springframework.data.gemfire.fork.SpringCacheServerProcess + * @see com.gemstone.gemfire.cache.Region + * @since 1.4.0 + * @link https://jira.spring.io/browse/SGF-204 + */ +public class RegionLookupIntegrationTests { + + @BeforeClass + public static void preTestSuiteSetup() { + ForkUtil.startCacheServer(SpringCacheServerProcess.class.getName() + " " + + "/org/springframework/data/gemfire/RegionLookupIntegrationTests-server-context.xml"); + } + + protected void assertNoRegionLookup(final String configLocation) { + ConfigurableApplicationContext applicationContext = null; + + try { + applicationContext = createApplicationContext(configLocation); + fail("Spring ApplicationContext should have thrown a BeanCreationException caused by a RegionExistsException!"); + } + catch (BeanCreationException expected) { + //expected.printStackTrace(System.err); + assertTrue(expected.getMessage(), expected.getCause() instanceof RegionExistsException); + throw (RegionExistsException) expected.getCause(); + } + finally { + closeApplicationContext(applicationContext); + } + } + + protected void closeApplicationContext(final ConfigurableApplicationContext applicationContext) { + if (applicationContext != null) { + applicationContext.close(); + } + } + + protected ConfigurableApplicationContext createApplicationContext(final String configLocation) { + return new ClassPathXmlApplicationContext(configLocation); + } + + @Test + public void testAllowRegionBeanDefinitionOverrides() { + ConfigurableApplicationContext applicationContext = null; + + try { + applicationContext = createApplicationContext( + "/org/springframework/data/gemfire/allowRegionBeanDefinitionOverridesTest.xml"); + + assertNotNull(applicationContext); + assertTrue(applicationContext.containsBean("regionOne")); + + Region appDataRegion = applicationContext.getBean("regionOne", Region.class); + + assertNotNull(appDataRegion); + assertEquals("AppDataRegion", appDataRegion.getName()); + assertEquals("/AppDataRegion", appDataRegion.getFullPath()); + assertNotNull(appDataRegion.getAttributes()); + assertEquals(DataPolicy.PERSISTENT_REPLICATE, appDataRegion.getAttributes().getDataPolicy()); + assertFalse(appDataRegion.getAttributes().getMulticastEnabled()); + assertEquals(Scope.DISTRIBUTED_ACK, appDataRegion.getAttributes().getScope()); + assertEquals(101, appDataRegion.getAttributes().getInitialCapacity()); + assertEquals(new Float(0.85f), new Float(appDataRegion.getAttributes().getLoadFactor())); + assertTrue(appDataRegion.getAttributes().getCloningEnabled()); + assertTrue(appDataRegion.getAttributes().getConcurrencyChecksEnabled()); + assertEquals(Integer.class, appDataRegion.getAttributes().getKeyConstraint()); + assertEquals(String.class, appDataRegion.getAttributes().getValueConstraint()); + } + finally { + closeApplicationContext(applicationContext); + } + } + + @Test(expected = RegionExistsException.class) + public void testNoDuplicateRegionDefinitions() { + assertNoRegionLookup("/org/springframework/data/gemfire/noDuplicateRegionDefinitionsTest.xml"); + } + + @Test(expected = RegionExistsException.class) + public void testNoClientRegionLookups() { + assertNoRegionLookup("/org/springframework/data/gemfire/noClientRegionLookupTest.xml"); + } + + @Test(expected = RegionExistsException.class) + public void testNoClientSubRegionLookups() { + assertNoRegionLookup("/org/springframework/data/gemfire/noClientSubRegionLookupTest.xml"); + } + + @Test(expected = RegionExistsException.class) + public void testNoLocalRegionLookups() { + assertNoRegionLookup("/org/springframework/data/gemfire/noLocalRegionLookupTest.xml"); + } + + @Test(expected = RegionExistsException.class) + public void testNoPartitionRegionLookups() { + assertNoRegionLookup("/org/springframework/data/gemfire/noPartitionRegionLookupTest.xml"); + } + + @Test(expected = RegionExistsException.class) + public void testNoReplicateRegionLookups() { + assertNoRegionLookup("/org/springframework/data/gemfire/noReplicateRegionLookupTest.xml"); + } + + @Test(expected = RegionExistsException.class) + public void testNoSubRegionLookups() { + assertNoRegionLookup("/org/springframework/data/gemfire/noSubRegionLookupTest.xml"); + } + + @Test + public void testEnableRegionLookups() { + ConfigurableApplicationContext applicationContext = null; + + try { + applicationContext = createApplicationContext("/org/springframework/data/gemfire/enableRegionLookupsTest.xml"); + + assertNotNull(applicationContext); + assertTrue(applicationContext.containsBean("NativeLocalRegion")); + assertTrue(applicationContext.containsBean("NativePartitionRegion")); + assertTrue(applicationContext.containsBean("NativeReplicateRegion")); + assertTrue(applicationContext.containsBean("NativeParentRegion")); + assertTrue(applicationContext.containsBean("/NativeParentRegion/NativeChildRegion")); + assertTrue(applicationContext.containsBean("SpringReplicateRegion")); + + Region nativeLocalRegion = applicationContext.getBean("NativeLocalRegion", Region.class); + + assertNotNull(nativeLocalRegion); + assertEquals("NativeLocalRegion", nativeLocalRegion.getName()); + assertEquals("/NativeLocalRegion", nativeLocalRegion.getFullPath()); + assertNotNull(nativeLocalRegion.getAttributes()); + assertEquals(DataPolicy.NORMAL, nativeLocalRegion.getAttributes().getDataPolicy()); + assertFalse(nativeLocalRegion.getAttributes().getCloningEnabled()); + assertFalse(nativeLocalRegion.getAttributes().getConcurrencyChecksEnabled()); + assertEquals(80, nativeLocalRegion.getAttributes().getConcurrencyLevel()); + assertEquals(101, nativeLocalRegion.getAttributes().getInitialCapacity()); + assertEquals(Integer.class, nativeLocalRegion.getAttributes().getKeyConstraint()); + assertEquals(new Float(0.95f), new Float(nativeLocalRegion.getAttributes().getLoadFactor())); + assertEquals(String.class, nativeLocalRegion.getAttributes().getValueConstraint()); + + Region nativePartitionRegion = applicationContext.getBean("NativePartitionRegion", Region.class); + + assertNotNull(nativePartitionRegion); + assertEquals("NativePartitionRegion", nativePartitionRegion.getName()); + assertEquals("/NativePartitionRegion", nativePartitionRegion.getFullPath()); + assertNotNull(nativePartitionRegion.getAttributes()); + assertEquals(DataPolicy.PERSISTENT_PARTITION, nativePartitionRegion.getAttributes().getDataPolicy()); + assertTrue(nativePartitionRegion.getAttributes().getCloningEnabled()); + assertTrue(nativePartitionRegion.getAttributes().getConcurrencyChecksEnabled()); + assertEquals(40, nativePartitionRegion.getAttributes().getConcurrencyLevel()); + assertEquals(51, nativePartitionRegion.getAttributes().getInitialCapacity()); + assertEquals(Integer.class, nativePartitionRegion.getAttributes().getKeyConstraint()); + assertEquals(new Float(0.85f), new Float(nativePartitionRegion.getAttributes().getLoadFactor())); + assertFalse(nativePartitionRegion.getAttributes().getMulticastEnabled()); + assertEquals(String.class, nativePartitionRegion.getAttributes().getValueConstraint()); + + Region nativeReplicateRegion = applicationContext.getBean("NativeReplicateRegion", Region.class); + + assertNotNull(nativeReplicateRegion); + assertEquals("NativeReplicateRegion", nativeReplicateRegion.getName()); + assertEquals("/NativeReplicateRegion", nativeReplicateRegion.getFullPath()); + assertNotNull(nativeReplicateRegion.getAttributes()); + assertEquals(DataPolicy.PERSISTENT_REPLICATE, nativeReplicateRegion.getAttributes().getDataPolicy()); + assertFalse(nativeReplicateRegion.getAttributes().getCloningEnabled()); + assertTrue(nativeReplicateRegion.getAttributes().getConcurrencyChecksEnabled()); + assertEquals(23, nativeReplicateRegion.getAttributes().getInitialCapacity()); + assertEquals(new Float(0.75f), new Float(nativeReplicateRegion.getAttributes().getLoadFactor())); + assertEquals(Integer.class, nativeReplicateRegion.getAttributes().getKeyConstraint()); + assertFalse(nativeReplicateRegion.getAttributes().getMulticastEnabled()); + assertEquals(Scope.DISTRIBUTED_NO_ACK, nativeReplicateRegion.getAttributes().getScope()); + assertEquals(String.class, nativeReplicateRegion.getAttributes().getValueConstraint()); + + Region nativeChildRegion = applicationContext.getBean("/NativeParentRegion/NativeChildRegion", Region.class); + + assertNotNull(nativeChildRegion); + assertEquals("NativeChildRegion", nativeChildRegion.getName()); + assertEquals("/NativeParentRegion/NativeChildRegion", nativeChildRegion.getFullPath()); + assertNotNull(nativeChildRegion.getAttributes()); + assertEquals(DataPolicy.REPLICATE, nativeChildRegion.getAttributes().getDataPolicy()); + + Region springReplicateRegion = applicationContext.getBean("SpringReplicateRegion", Region.class); + + assertNotNull(springReplicateRegion); + assertEquals("SpringReplicateRegion", springReplicateRegion.getName()); + assertEquals("/SpringReplicateRegion", springReplicateRegion.getFullPath()); + assertNotNull(springReplicateRegion.getAttributes()); + assertEquals(DataPolicy.REPLICATE, springReplicateRegion.getAttributes().getDataPolicy()); + } + finally { + closeApplicationContext(applicationContext); + } + } + + @Test + public void testEnableClientRegionLookups() { + ConfigurableApplicationContext applicationContext = null; + + try { + applicationContext = createApplicationContext("/org/springframework/data/gemfire/enableClientRegionLookupsTest.xml"); + + assertNotNull(applicationContext); + assertTrue(applicationContext.containsBean("NativeClientRegion")); + assertTrue(applicationContext.containsBean("NativeClientParentRegion")); + assertTrue(applicationContext.containsBean("/NativeClientParentRegion/NativeClientChildRegion")); + + Region nativeClientRegion = applicationContext.getBean("NativeClientRegion", Region.class); + + assertNotNull(nativeClientRegion); + assertEquals("NativeClientRegion", nativeClientRegion.getName()); + assertEquals("/NativeClientRegion", nativeClientRegion.getFullPath()); + assertNotNull(nativeClientRegion.getAttributes()); + assertFalse(nativeClientRegion.getAttributes().getCloningEnabled()); + assertEquals(DataPolicy.EMPTY, nativeClientRegion.getAttributes().getDataPolicy()); + + Region nativeClientChildRegion = applicationContext.getBean("/NativeClientParentRegion/NativeClientChildRegion", + Region.class); + + assertNotNull(nativeClientChildRegion); + assertEquals("NativeClientChildRegion", nativeClientChildRegion.getName()); + assertEquals("/NativeClientParentRegion/NativeClientChildRegion", nativeClientChildRegion.getFullPath()); + assertNotNull(nativeClientChildRegion.getAttributes()); + assertEquals(DataPolicy.EMPTY, nativeClientChildRegion.getAttributes().getDataPolicy()); + } + finally { + closeApplicationContext(applicationContext); + } + } + +} diff --git a/src/test/java/org/springframework/data/gemfire/SubRegionTest.java b/src/test/java/org/springframework/data/gemfire/SubRegionTest.java index afb36aec..2a28a255 100644 --- a/src/test/java/org/springframework/data/gemfire/SubRegionTest.java +++ b/src/test/java/org/springframework/data/gemfire/SubRegionTest.java @@ -21,13 +21,13 @@ import static org.junit.Assert.assertSame; import org.junit.Test; -import com.gemstone.gemfire.cache.GemFireCache; +import com.gemstone.gemfire.cache.Cache; import com.gemstone.gemfire.cache.Region; /** * * @author David Turanski - * + * @author John Blum */ public class SubRegionTest extends RecreatingContextTest { @Override @@ -44,25 +44,41 @@ public class SubRegionTest extends RecreatingContextTest { @SuppressWarnings({ "rawtypes", "unchecked" }) private void testBasic() throws Exception { - CacheFactoryBean cfb = new CacheFactoryBean(); - cfb.setBeanName("gemfireCache"); - cfb.setUseBeanFactoryLocator(false); - GemFireCache cache = cfb.getObject(); - RegionFactoryBean rfb = new ReplicatedRegionFactoryBean(); - rfb.setCache(cache); - rfb.setName("parent"); - rfb.afterPropertiesSet(); - Region parent = rfb.getObject(); + CacheFactoryBean cacheFactoryBean = new CacheFactoryBean(); - SubRegionFactoryBean srfb = new SubRegionFactoryBean(); - srfb.setParent(parent); - srfb.setName("/parent/child"); - srfb.setRegionName("child"); - srfb.afterPropertiesSet(); - Region child = srfb.getObject(); + cacheFactoryBean.setBeanName("gemfireCache"); + cacheFactoryBean.setUseBeanFactoryLocator(false); - assertNotNull(parent.getSubregion("child")); - assertSame(child, parent.getSubregion("child")); + Cache cache = cacheFactoryBean.getObject(); + + assertNotNull(cache); + + RegionFactoryBean regionFactory = new ReplicatedRegionFactoryBean(); + + regionFactory.setCache(cache); + regionFactory.setName("Outer"); + regionFactory.afterPropertiesSet(); + + Region outer = regionFactory.getObject(); + + assertNotNull(outer); + assertEquals("Outer", outer.getName()); + assertEquals("/Outer", outer.getFullPath()); + assertSame(outer, cache.getRegion("/Outer")); + + RegionFactoryBean subRegionFactory = new RegionFactoryBean(); + + subRegionFactory.setCache(cache); + subRegionFactory.setParent(outer); + subRegionFactory.setName("/Outer/Inner"); + subRegionFactory.setRegionName("Inner"); + subRegionFactory.afterPropertiesSet(); + + Region inner = subRegionFactory.getObject(); + + assertNotNull(inner); + assertSame(inner, outer.getSubregion("Inner")); + assertSame(inner, cache.getRegion("/Outer/Inner")); } @SuppressWarnings("rawtypes") diff --git a/src/test/java/org/springframework/data/gemfire/client/ClientRegionFactoryBeanTest.java b/src/test/java/org/springframework/data/gemfire/client/ClientRegionFactoryBeanTest.java index 7b306687..512036b1 100644 --- a/src/test/java/org/springframework/data/gemfire/client/ClientRegionFactoryBeanTest.java +++ b/src/test/java/org/springframework/data/gemfire/client/ClientRegionFactoryBeanTest.java @@ -81,12 +81,14 @@ public class ClientRegionFactoryBeanTest { } @Test + @SuppressWarnings("deprecation") public void testSetDataPolicyName() throws Exception { factoryBean.setDataPolicyName("NORMAL"); assertEquals(DataPolicy.NORMAL, TestUtils.readField("dataPolicy", factoryBean)); } @Test(expected = IllegalArgumentException.class) + @SuppressWarnings("deprecation") public void testSetDataPolicyNameWithInvalidName() throws Exception { try { factoryBean.setDataPolicyName("INVALID"); @@ -100,6 +102,17 @@ public class ClientRegionFactoryBeanTest { } } + @Test + public void testIsPersistentUnspecified() { + assertTrue(factoryBean.isPersistentUnspecified()); + factoryBean.setPersistent(true); + assertTrue(factoryBean.isPersistent()); + assertFalse(factoryBean.isPersistentUnspecified()); + factoryBean.setPersistent(false); + assertTrue(factoryBean.isNotPersistent()); + assertFalse(factoryBean.isPersistentUnspecified()); + } + @Test public void testIsPersistent() { assertFalse(factoryBean.isPersistent()); diff --git a/src/test/java/org/springframework/data/gemfire/client/MultipleClientCacheTest.java b/src/test/java/org/springframework/data/gemfire/client/MultipleClientCacheTest.java index 939b1d85..1efa8266 100644 --- a/src/test/java/org/springframework/data/gemfire/client/MultipleClientCacheTest.java +++ b/src/test/java/org/springframework/data/gemfire/client/MultipleClientCacheTest.java @@ -13,9 +13,9 @@ package org.springframework.data.gemfire.client; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; -import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ConfigurableApplicationContext; @@ -28,30 +28,33 @@ import com.gemstone.gemfire.cache.Region; /** * @author David Turanski + * @author John Blum */ public class MultipleClientCacheTest { @BeforeClass public static void startUp() throws Exception { - ForkUtil.startCacheServer(SpringCacheServerProcess.class.getName() + " " - + "/org/springframework/data/gemfire/client/datasource-server.xml"); + ForkUtil.startCacheServer(String.format("%1$s %2$s", 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"; + String configLocation = "/org/springframework/data/gemfire/client/client-cache-no-close.xml"; - ConfigurableApplicationContext context1 = new ClassPathXmlApplicationContext(resourcePath); - ConfigurableApplicationContext context2 = new ClassPathXmlApplicationContext(resourcePath); + ConfigurableApplicationContext context1 = new ClassPathXmlApplicationContext(configLocation); + ConfigurableApplicationContext context2 = new ClassPathXmlApplicationContext(configLocation); Cache cache1 = context1.getBean(Cache.class); Cache cache2 = context2.getBean(Cache.class); + assertNotNull(cache1); assertSame(cache1, cache2); Region region1 = context1.getBean(Region.class); Region region2 = context2.getBean(Region.class); + assertNotNull(region1); assertSame(region1, region2); assertFalse(cache1.isClosed()); assertFalse(region1.isDestroyed()); @@ -62,10 +65,4 @@ public class MultipleClientCacheTest { 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 b4dd837f..b70847a0 100644 --- a/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java +++ b/src/test/java/org/springframework/data/gemfire/config/MultipleCacheTest.java @@ -12,8 +12,8 @@ */ 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.assertSame; import org.junit.Test; @@ -25,24 +25,35 @@ import com.gemstone.gemfire.cache.Region; /** * @author David Turanski - * + * @author John Blum */ - 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); - 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(); + String configLocation = "/org/springframework/data/gemfire/config/MultipleCacheTest-context.xml"; + + ConfigurableApplicationContext context1 = new ClassPathXmlApplicationContext(configLocation); + ConfigurableApplicationContext context2 = new ClassPathXmlApplicationContext(configLocation); + + Cache cache1 = context1.getBean(Cache.class); + Cache cache2 = context2.getBean(Cache.class); + + assertNotNull(cache1); + assertSame(cache1, cache2); + + Region region1 = context1.getBean(Region.class); + Region region2 = context2.getBean(Region.class); + + assertNotNull(region1); + assertSame(region1, region2); assertFalse(cache1.isClosed()); - assertFalse("region was destroyed" ,region1.isDestroyed()); + assertFalse(region1.isDestroyed()); + + context1.close(); + + assertFalse(cache1.isClosed()); + assertFalse("region was destroyed", region1.isDestroyed()); } + } diff --git a/src/test/resources/cache-with-regions.xml b/src/test/resources/cache-with-regions.xml new file mode 100644 index 00000000..80f8c4fb --- /dev/null +++ b/src/test/resources/cache-with-regions.xml @@ -0,0 +1,44 @@ + + + + + + java.lang.Integer + java.lang.String + + + + + java.lang.Integer + java.lang.String + + + + + java.lang.Integer + java.lang.String + + + + + + + diff --git a/src/test/resources/clientcache-with-regions.xml b/src/test/resources/clientcache-with-regions.xml new file mode 100644 index 00000000..f7293d03 --- /dev/null +++ b/src/test/resources/clientcache-with-regions.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/RegionLookupIntegrationTests-server-context.xml b/src/test/resources/org/springframework/data/gemfire/RegionLookupIntegrationTests-server-context.xml new file mode 100644 index 00000000..743a36af --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/RegionLookupIntegrationTests-server-context.xml @@ -0,0 +1,28 @@ + + + + + springGemFireRegionLookupsTestServer + config + 0 + + + + + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/allowRegionBeanDefinitionOverridesTest.xml b/src/test/resources/org/springframework/data/gemfire/allowRegionBeanDefinitionOverridesTest.xml new file mode 100644 index 00000000..76d085d7 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/allowRegionBeanDefinitionOverridesTest.xml @@ -0,0 +1,32 @@ + + + + + springGemFireRegionBeanDefinitionOverridesAllowedTest + config + 0 + + + + + + + + + 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 index be2503e5..28684fc6 100644 --- 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 @@ -1,13 +1,18 @@ + xmlns:gfe="http://www.springframework.org/schema/gemfire" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd +"> - - + + + + + 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 92894131..ad53c2dc 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 @@ -1,11 +1,14 @@ + xmlns:gfe="http://www.springframework.org/schema/gemfire" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd +"> + + + + - - diff --git a/src/test/resources/org/springframework/data/gemfire/enableClientRegionLookupsTest.xml b/src/test/resources/org/springframework/data/gemfire/enableClientRegionLookupsTest.xml new file mode 100644 index 00000000..904c52ea --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/enableClientRegionLookupsTest.xml @@ -0,0 +1,33 @@ + + + + + springGemFireNoClientRegionLookupTest + config + 0 + + + + + + + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/enableRegionLookupsTest.xml b/src/test/resources/org/springframework/data/gemfire/enableRegionLookupsTest.xml new file mode 100644 index 00000000..e0605291 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/enableRegionLookupsTest.xml @@ -0,0 +1,60 @@ + + + + + springGemFireEnableRegionLookupsTest + config + 0 + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/noClientRegionLookupTest.xml b/src/test/resources/org/springframework/data/gemfire/noClientRegionLookupTest.xml new file mode 100644 index 00000000..f92bdb99 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/noClientRegionLookupTest.xml @@ -0,0 +1,26 @@ + + + + + springGemFireNoClientRegionLookupTest + config + 0 + + + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/noClientSubRegionLookupTest.xml b/src/test/resources/org/springframework/data/gemfire/noClientSubRegionLookupTest.xml new file mode 100644 index 00000000..0aaf02d8 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/noClientSubRegionLookupTest.xml @@ -0,0 +1,28 @@ + + + + + springGemFireNoClientSubRegionLookupTest + config + 0 + + + + + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/noDuplicateRegionDefinitionsTest.xml b/src/test/resources/org/springframework/data/gemfire/noDuplicateRegionDefinitionsTest.xml new file mode 100644 index 00000000..6fdf1b4b --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/noDuplicateRegionDefinitionsTest.xml @@ -0,0 +1,24 @@ + + + + + springGemFireNoDuplicateRegionDefinitionsTest + config + 0 + + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/noLocalRegionLookupTest.xml b/src/test/resources/org/springframework/data/gemfire/noLocalRegionLookupTest.xml new file mode 100644 index 00000000..2219c378 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/noLocalRegionLookupTest.xml @@ -0,0 +1,22 @@ + + + + + springGemFireNoLocalRegionLookupTest + config + 0 + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/noPartitionRegionLookupTest.xml b/src/test/resources/org/springframework/data/gemfire/noPartitionRegionLookupTest.xml new file mode 100644 index 00000000..7d88412c --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/noPartitionRegionLookupTest.xml @@ -0,0 +1,22 @@ + + + + + springGemFireNoPartitionRegionLookupTest + config + 0 + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/noReplicateRegionLookupTest.xml b/src/test/resources/org/springframework/data/gemfire/noReplicateRegionLookupTest.xml new file mode 100644 index 00000000..13abe32b --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/noReplicateRegionLookupTest.xml @@ -0,0 +1,22 @@ + + + + + springGemFireNoReplicateRegionLookupTest + config + 0 + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/noSubRegionLookupTest.xml b/src/test/resources/org/springframework/data/gemfire/noSubRegionLookupTest.xml new file mode 100644 index 00000000..7de79b80 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/noSubRegionLookupTest.xml @@ -0,0 +1,24 @@ + + + + + springGemFireNoSubRegionLookupTest + config + 0 + + + + + + + + +