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 74b58b2e..b7be0369 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 @@ -177,9 +177,13 @@ public class SimpleGemfireRepository implements Gemf @Override @SuppressWarnings("rawtypes") public Void doInGemfire(Region region) { - - for (Object key : region.keySet()) { - region.remove(key); + //clear() does not work for partitioned regions + try { + region.clear(); + } catch (UnsupportedOperationException e) { + for (Object key : region.keySet()) { + region.remove(key); + } } return null; diff --git a/src/test/java/org/springframework/data/gemfire/repository/support/SimpleGemfireRepositoryIntegrationTest.java b/src/test/java/org/springframework/data/gemfire/repository/support/SimpleGemfireRepositoryIntegrationTest.java index d2360998..56a45c6b 100644 --- a/src/test/java/org/springframework/data/gemfire/repository/support/SimpleGemfireRepositoryIntegrationTest.java +++ b/src/test/java/org/springframework/data/gemfire/repository/support/SimpleGemfireRepositoryIntegrationTest.java @@ -21,6 +21,8 @@ import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; +import javax.annotation.Resource; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,7 +34,11 @@ import org.springframework.data.repository.core.support.ReflectionEntityInformat import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import com.gemstone.gemfire.cache.CacheListener; +import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.RegionEvent; import com.gemstone.gemfire.cache.query.SelectResults; +import com.gemstone.gemfire.cache.util.CacheListenerAdapter; /** * Integration tests for {@link SimpleGemfireRepository}. @@ -45,12 +51,20 @@ public class SimpleGemfireRepositoryIntegrationTest { @Autowired GemfireTemplate template; + + @Resource(name="simple") + Region simpleRegion; SimpleGemfireRepository repository; + + @SuppressWarnings("rawtypes") + RegionClearListener regionClearListener; @Before public void setUp() { - + regionClearListener = new RegionClearListener(); + simpleRegion.getAttributesMutator().addCacheListener(regionClearListener); + EntityInformation information = new ReflectionEntityInformation(Person.class); repository = new SimpleGemfireRepository(template, information); } @@ -72,6 +86,13 @@ public class SimpleGemfireRepositoryIntegrationTest { assertThat(repository.findOne(person.id), is(nullValue())); assertThat(repository.findAll().size(), is(0)); } + + @Test + public void testDeleteAllFiresClearEvent() { + assertFalse(regionClearListener.eventFired); + repository.deleteAll(); + assertTrue(regionClearListener.eventFired); + } @Test public void queryRegion() throws Exception { @@ -101,4 +122,12 @@ public class SimpleGemfireRepositoryIntegrationTest { assertThat(result, hasItems(carter, leroi)); assertThat(result, not(hasItems(dave))); } + + public static class RegionClearListener extends CacheListenerAdapter { + public boolean eventFired; + @Override + public void afterRegionClear(RegionEvent ev) { + eventFired = true; + } + } }