diff --git a/src/main/java/org/springframework/data/gemfire/config/GemfireDataSourceParser.java b/src/main/java/org/springframework/data/gemfire/config/GemfireDataSourceParser.java index 8fa30d25..60dbc836 100644 --- a/src/main/java/org/springframework/data/gemfire/config/GemfireDataSourceParser.java +++ b/src/main/java/org/springframework/data/gemfire/config/GemfireDataSourceParser.java @@ -32,27 +32,35 @@ public class GemfireDataSourceParser extends AbstractBeanDefinitionParser { */ @Override protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { - + AbstractBeanDefinition poolDefinition = (AbstractBeanDefinition) new PoolParser().parse(element, parserContext); - MutablePropertyValues poolProps = poolDefinition.getPropertyValues(); - + MutablePropertyValues poolProps = poolDefinition.getPropertyValues(); + poolProps.add("name", GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME); + if (!element.hasAttribute("subscription-enabled")) { + poolProps.add("subscriptionEnabled", true); + } - parserContext.getRegistry().registerBeanDefinition(GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME,poolDefinition); - - AbstractBeanDefinition clientCacheDefinition = (AbstractBeanDefinition)new ClientCacheParser().parse(element, parserContext); + parserContext.getRegistry().registerBeanDefinition(GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME, poolDefinition); + + AbstractBeanDefinition clientCacheDefinition = (AbstractBeanDefinition) new ClientCacheParser().parse(element, + parserContext); MutablePropertyValues props = clientCacheDefinition.getPropertyValues(); + props.add("pool", poolDefinition); - + clientCacheDefinition.setPropertyValues(props); - - parserContext.getRegistry().registerBeanDefinition(GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME,clientCacheDefinition); - - System.out.println("registered " + GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME+ ":" + clientCacheDefinition.getBeanClassName()); - - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(GemfireDataSourcePostProcessor.class); + + parserContext.getRegistry().registerBeanDefinition(GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME, + clientCacheDefinition); + + System.out.println("registered " + GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME + ":" + + clientCacheDefinition.getBeanClassName()); + + BeanDefinitionBuilder builder = BeanDefinitionBuilder + .genericBeanDefinition(GemfireDataSourcePostProcessor.class); builder.addConstructorArgReference(GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME); BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); return null; diff --git a/src/main/java/org/springframework/data/gemfire/repository/support/SimpleGemfireRepository.java b/src/main/java/org/springframework/data/gemfire/repository/support/SimpleGemfireRepository.java index b7be0369..0c4ae16e 100644 --- a/src/main/java/org/springframework/data/gemfire/repository/support/SimpleGemfireRepository.java +++ b/src/main/java/org/springframework/data/gemfire/repository/support/SimpleGemfireRepository.java @@ -100,13 +100,8 @@ public class SimpleGemfireRepository implements Gemf */ @Override public Collection findAll() { - return template.execute(new GemfireCallback>() { - @Override - @SuppressWarnings({ "rawtypes", "unchecked" }) - public Collection doInGemfire(Region region) { - return region.values(); - } - }); + SelectResults results = template.find("select * from " + template.getRegion().getFullPath()); + return (Collection)results.asList(); } /* diff --git a/src/test/java/org/springframework/data/gemfire/client/GemFireDataSourceTest.java b/src/test/java/org/springframework/data/gemfire/client/GemFireDataSourceTest.java index 5d8d1c5e..428403af 100644 --- a/src/test/java/org/springframework/data/gemfire/client/GemFireDataSourceTest.java +++ b/src/test/java/org/springframework/data/gemfire/client/GemFireDataSourceTest.java @@ -43,40 +43,41 @@ import com.gemstone.gemfire.cache.client.Pool; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("/org/springframework/data/gemfire/client/datasource-client.xml") public class GemFireDataSourceTest { - @Autowired + @Autowired ApplicationContext ctx; - + @BeforeClass public static void startUp() throws Exception { - ForkUtil.startCacheServer(SpringCacheServerProcess.class.getName() + " " + ForkUtil.startCacheServer(SpringCacheServerProcess.class.getName() + " " + "/org/springframework/data/gemfire/client/datasource-server.xml"); } - + @SuppressWarnings("unused") @Test public void testServerDataSource() { - Cache cache = ctx.getBean("gemfireCache",Cache.class); - Pool pool = ctx.getBean("gemfirePool",Pool.class); + Cache cache = ctx.getBean("gemfireCache", Cache.class); + Pool pool = ctx.getBean("gemfirePool", Pool.class); + assertEquals(true, pool.getSubscriptionEnabled()); + String regions[] = ctx.getBeanNamesForType(Region.class); List regionList = Arrays.asList(regions); assertTrue(regionList.contains("r1")); assertTrue(regionList.contains("r2")); assertTrue(regionList.contains("simple")); - - Region simple = ctx.getBean("simple", Region.class); + + Region simple = ctx.getBean("simple", Region.class); assertEquals(DataPolicy.EMPTY, simple.getAttributes().getDataPolicy()); } - - + @Test public void testRepositoryCreated() { PersonRepository repo = ctx.getBean(PersonRepository.class); - Person dave = new Person(1L,"Dave","Mathhews"); + Person dave = new Person(1L, "Dave", "Mathhews"); repo.save(dave); - Person saved = repo.findOne(1L); - assertEquals("Dave",saved.getFirstname()); + Person saved = repo.findOne(1L); + assertEquals("Dave", saved.getFirstname()); } - + @AfterClass public static void cleanUp() { ForkUtil.sendSignal(); diff --git a/src/test/java/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests.java b/src/test/java/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests.java new file mode 100644 index 00000000..b5eb0bff --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests.java @@ -0,0 +1,57 @@ +/* + * 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.repository.config; + +import static org.junit.Assert.assertEquals; + +import java.util.Collection; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.gemfire.ForkUtil; +import org.springframework.data.gemfire.fork.SpringCacheServerProcess; +import org.springframework.data.gemfire.repository.sample.Person; +import org.springframework.data.gemfire.repository.sample.PersonRepository; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * @author David Turanski + * + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class RepositoryClientRegionTests { + @Autowired + PersonRepository repository; + + @BeforeClass + public static void startUp() throws Exception { + ForkUtil.startCacheServer(SpringCacheServerProcess.class.getName() + " " + + "/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests-server-context.xml"); + } + + @Test + public void testFindAllAndCount() { + assertEquals(2, repository.count()); + assertEquals(2, ((Collection) repository.findAll()).size()); + } + + @AfterClass + public static void cleanUp() { + ForkUtil.sendSignal(); + } +} diff --git a/src/test/java/org/springframework/data/gemfire/repository/sample/RegionPopulator.java b/src/test/java/org/springframework/data/gemfire/repository/sample/RegionPopulator.java new file mode 100644 index 00000000..3a917a4b --- /dev/null +++ b/src/test/java/org/springframework/data/gemfire/repository/sample/RegionPopulator.java @@ -0,0 +1,43 @@ +/* + * 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.repository.sample; + +import javax.annotation.Resource; + +import org.springframework.beans.factory.InitializingBean; + +import com.gemstone.gemfire.cache.Region; + +/** + * @author David Turanski + * + */ +public class RegionPopulator implements InitializingBean { + @Resource(name="region") + Region region; + + /* (non-Javadoc) + * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() + */ + @Override + public void afterPropertiesSet() throws Exception { + region.put(1L,new Person(1L,"first1", "last1")); + region.put(2L,new Person(2L,"first2", "last2")); + + } + + public void setRegion(Region region) { + this.region=region; + } + +} diff --git a/src/test/resources/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests-context.xml b/src/test/resources/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests-context.xml new file mode 100644 index 00000000..724186e4 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests-context.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/src/test/resources/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests-server-context.xml b/src/test/resources/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests-server-context.xml new file mode 100644 index 00000000..4bb68ce9 --- /dev/null +++ b/src/test/resources/org/springframework/data/gemfire/repository/config/RepositoryClientRegionTests-server-context.xml @@ -0,0 +1,14 @@ + + + + + + + + + +