diff --git a/.springBeans b/.springBeans
index 08fe5a66..d3321de6 100644
--- a/.springBeans
+++ b/.springBeans
@@ -7,6 +7,7 @@
+ src/test/resources/org/springframework/data/gemfire/support/GemfirePersistenceExceptionTranslationTest-context.xml
diff --git a/gradle.properties b/gradle.properties
index ba90fe26..28e0a6af 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -8,7 +8,7 @@ slf4jVersion = 1.6.4
springVersion = 3.1.2.RELEASE
springDataCommonsVersion = 1.4.0.M1
#Temporary until release of 7.0
-gemfireVersion = 7.0-beta
+gemfireVersion = 7.0.Beta-SNAPSHOT
gemfireVersion6x = 6.6.3
# Testing
diff --git a/samples/readme.txt b/samples/readme.txt
index ba16df50..4f598f03 100644
--- a/samples/readme.txt
+++ b/samples/readme.txt
@@ -1,6 +1,7 @@
Spring GemFire Samples
----------------------
-
+NOTE: Spring Data GemFire Sample code has been moved to https://github.com/SpringSource/spring-gemfire-examples
+-----------------------------------------------------------------------------------------------------------------
This folder contains various various demo applications and samples for Spring GemFire.
Please see each folder for detailed instructions (readme.txt).
diff --git a/src/main/java/org/springframework/data/gemfire/CacheFactoryBean.java b/src/main/java/org/springframework/data/gemfire/CacheFactoryBean.java
index 5a6687cd..80e6ce34 100644
--- a/src/main/java/org/springframework/data/gemfire/CacheFactoryBean.java
+++ b/src/main/java/org/springframework/data/gemfire/CacheFactoryBean.java
@@ -38,6 +38,7 @@ import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.CollectionUtils;
+import com.gemstone.gemfire.GemFireCheckedException;
import com.gemstone.gemfire.GemFireException;
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.CacheClosedException;
@@ -454,6 +455,12 @@ public class CacheFactoryBean implements BeanNameAware, BeanFactoryAware, BeanCl
return wrapped;
}
}
+ if (ex.getCause() instanceof GemFireException) {
+ return GemfireCacheUtils.convertGemfireAccessException((GemFireException)ex.getCause());
+ }
+ if (ex.getCause() instanceof GemFireCheckedException) {
+ return GemfireCacheUtils.convertGemfireAccessException((GemFireCheckedException)ex.getCause());
+ }
return null;
}
diff --git a/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java b/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java
index daaab3aa..86f45d3f 100644
--- a/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java
+++ b/src/main/java/org/springframework/data/gemfire/RegionFactoryBean.java
@@ -27,7 +27,7 @@ import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.util.ReflectionUtils;
-import com.gemstone.gemfire.cache.AsyncEventQueue;
+import com.gemstone.gemfire.cache.asyncqueue.AsyncEventQueue;
import com.gemstone.gemfire.cache.AttributesFactory;
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.CacheClosedException;
@@ -133,13 +133,13 @@ public class RegionFactoryBean extends RegionLookupFactoryBean imple
hubId == null,
"It is invalid to configure a region with both a hubId and gatewaySenders. Note that the enableGateway and hubId properties are deprecated since Gemfire 7.0");
for (Object gatewaySender : gatewaySenders) {
- regionFactory.addGatewaySender((GatewaySender) gatewaySender);
+ regionFactory.addGatewaySenderId(((GatewaySender) gatewaySender).getId());
}
}
if (!ObjectUtils.isEmpty(asyncEventQueues)) {
for (Object asyncEventQueue : asyncEventQueues) {
- regionFactory.addAsyncEventQueue((AsyncEventQueue) asyncEventQueue);
+ regionFactory.addAsyncEventQueueId(((AsyncEventQueue) asyncEventQueue).getId());
}
}
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 c3770f85..2eab0002 100644
--- a/src/main/java/org/springframework/data/gemfire/config/CacheParser.java
+++ b/src/main/java/org/springframework/data/gemfire/config/CacheParser.java
@@ -19,10 +19,8 @@ package org.springframework.data.gemfire.config;
import java.util.List;
import org.springframework.beans.factory.BeanDefinitionStoreException;
-import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
-import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser;
diff --git a/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java b/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java
index 1b601a42..9c3c3802 100644
--- a/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java
+++ b/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java
@@ -38,6 +38,8 @@ public abstract class AbstractWANComponentFactoryBean implements FactoryBean<
protected final Cache cache;
+ protected Object factory;
+
protected AbstractWANComponentFactoryBean(Cache cache) {
this.cache = cache;
}
@@ -71,4 +73,9 @@ public abstract class AbstractWANComponentFactoryBean implements FactoryBean<
public final boolean isSingleton() {
return true;
}
+
+ public void setFactory(Object factory) {
+ this.factory = factory;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/org/springframework/data/gemfire/wan/AsyncEventQueueFactoryBean.java b/src/main/java/org/springframework/data/gemfire/wan/AsyncEventQueueFactoryBean.java
index 0cecf9a6..255b2381 100644
--- a/src/main/java/org/springframework/data/gemfire/wan/AsyncEventQueueFactoryBean.java
+++ b/src/main/java/org/springframework/data/gemfire/wan/AsyncEventQueueFactoryBean.java
@@ -17,11 +17,11 @@ package org.springframework.data.gemfire.wan;
import org.springframework.util.Assert;
-import com.gemstone.gemfire.cache.AsyncEventQueue;
-import com.gemstone.gemfire.cache.AsyncEventQueueFactory;
+import com.gemstone.gemfire.cache.asyncqueue.AsyncEventQueue;
+import com.gemstone.gemfire.cache.asyncqueue.AsyncEventQueueFactory;
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.CacheClosedException;
-import com.gemstone.gemfire.cache.wan.AsyncEventListener;
+import com.gemstone.gemfire.cache.asyncqueue.AsyncEventListener;
/**
* FactoryBean for creating GemFire {@link AsyncEventQueue}s.
@@ -44,8 +44,6 @@ public class AsyncEventQueueFactoryBean extends AbstractWANComponentFactoryBean<
private Boolean persistent;
- private Boolean parallel;
-
private String diskStoreRef;
/**
@@ -71,11 +69,13 @@ public class AsyncEventQueueFactoryBean extends AbstractWANComponentFactoryBean<
@Override
protected void doInit() {
Assert.notNull(asyncEventListener, "AsyncEventListener cannot be null");
-
- AsyncEventQueueFactory asyncEventQueueFactory = cache.createAsyncEventQueueFactory();
- if (parallel != null) {
- asyncEventQueueFactory.setParallel(parallel);
+ AsyncEventQueueFactory asyncEventQueueFactory = null;
+ if (this.factory == null) {
+ asyncEventQueueFactory = cache.createAsyncEventQueueFactory();
+ } else {
+ asyncEventQueueFactory = (AsyncEventQueueFactory)factory;
}
+
if (persistent != null) {
asyncEventQueueFactory.setPersistent(persistent);
}
@@ -99,7 +99,6 @@ public class AsyncEventQueueFactoryBean extends AbstractWANComponentFactoryBean<
public void destroy() throws Exception {
if (!cache.isClosed()) {
try {
- asyncEventQueue.stop();
asyncEventListener.close();
}
catch (CacheClosedException cce) {
@@ -119,8 +118,4 @@ public class AsyncEventQueueFactoryBean extends AbstractWANComponentFactoryBean<
public void setPersistent(Boolean persistent) {
this.persistent = persistent;
}
-
- public void setParallel(Boolean parallel) {
- this.parallel = parallel;
- }
}
diff --git a/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java b/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java
index 4845afa0..829ef50d 100644
--- a/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java
+++ b/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java
@@ -92,7 +92,12 @@ public class GatewaySenderFactoryBean extends AbstractWANComponentFactoryBean region = ctx.getBean("region-inner-gateway-sender", Region.class);
GatewaySender gws = ctx.getBean("gateway-sender", GatewaySender.class);
- assertNotNull(region.getAttributes().getGatewaySenders());
- assertEquals(2, region.getAttributes().getGatewaySenders().size());
+ assertNotNull(region.getAttributes().getGatewaySenderIds());
+ assertEquals(2, region.getAttributes().getGatewaySenderIds().size());
- // Isolate the inner gateway
- Set gatewaySenders = region.getAttributes().getGatewaySenders();
- assertTrue(gatewaySenders.remove(gws));
- gatewaySenders.remove(gws);
+// // Isolate the inner gateway
+// Set gatewaySenders = region.getAttributes().getGatewaySenderIds();
+// assertTrue(gatewaySenders.remove(gws));
+// gatewaySenders.remove(gws);
- gws = gatewaySenders.iterator().next();
+ RegionFactoryBean rfb = ctx.getBean("®ion-inner-gateway-sender", RegionFactoryBean.class);
+ Object[] gwsenders = TestUtils.readField("gatewaySenders", rfb);
+ gws = (GatewaySender)gwsenders[0];
List eventFilters = gws.getGatewayEventFilters();
assertNotNull(eventFilters);
assertEquals(1, eventFilters.size());
@@ -179,18 +197,19 @@ public class GemfireV7GatewayNamespaceTest extends RecreatingContextTest {
}
@Override
- public void afterAcknowledgement(AsyncEvent arg0) {
+ public void afterAcknowledgement(GatewayQueueEvent arg0) {
// TODO Auto-generated method stub
+
}
@Override
- public boolean beforeEnqueue(AsyncEvent arg0) {
+ public boolean beforeEnqueue(GatewayQueueEvent arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
- public boolean beforeTransmit(AsyncEvent arg0) {
+ public boolean beforeTransmit(GatewayQueueEvent arg0) {
// TODO Auto-generated method stub
return false;
}
@@ -234,4 +253,242 @@ public class GemfireV7GatewayNamespaceTest extends RecreatingContextTest {
}
}
+
+
+ public static class StubAsyncEventQueueFactory implements AsyncEventQueueFactory {
+
+ private AsyncEventListener listener;
+
+ private AsyncEventQueue asyncEventQueue = mock(AsyncEventQueue.class);
+
+ private boolean persistent;
+ private int maxQueueMemory;
+ private String diskStoreName;
+ private int batchSize;
+
+ private String name;
+
+ @Override
+ public AsyncEventQueue create(String name, AsyncEventListener listener) {
+ this.name = name;
+ this.listener = listener;
+
+ when(asyncEventQueue.getAsyncEventListener()).thenReturn(this.listener);
+ when(asyncEventQueue.getBatchSize()).thenReturn(this.batchSize);
+ when(asyncEventQueue.getDiskStoreName()).thenReturn(this.diskStoreName);
+ when(asyncEventQueue.isPersistent()).thenReturn(this.persistent);
+ when(asyncEventQueue.getId()).thenReturn(this.name);
+ when(asyncEventQueue.getMaximumQueueMemory()).thenReturn(this.maxQueueMemory);
+ return this.asyncEventQueue;
+ }
+
+ @Override
+ public AsyncEventQueueFactory setBatchSize(int batchSize) {
+ this.batchSize = batchSize;
+ return this;
+ }
+
+ @Override
+ public AsyncEventQueueFactory setDiskStoreName(String diskStoreName) {
+ this.diskStoreName = diskStoreName;
+ return this;
+ }
+
+ @Override
+ public AsyncEventQueueFactory setMaximumQueueMemory(int maxQueueMemory) {
+ this.maxQueueMemory = maxQueueMemory;
+ return this;
+ }
+
+ @Override
+ public AsyncEventQueueFactory setPersistent(boolean persistent) {
+ this.persistent = persistent;
+ return this;
+ }
+ }
+
+ public static class StubGWSenderFactory implements GatewaySenderFactory {
+
+ private GatewaySender gatewaySender = mock(GatewaySender.class);
+
+ private int alertThreshold;
+ private boolean batchConflationEnabled;
+ private int batchSize;
+ private int batchTimeInterval;
+ private String diskStoreName;
+ private boolean diskSynchronous;
+ private int dispatcherThreads;
+ private boolean manualStart;
+ private int maxQueueMemory;
+ private OrderPolicy orderPolicy;
+ private boolean parallel;
+ private boolean persistenceEnabled;
+ private int socketBufferSize;
+ private int socketReadTimeout;
+ private List eventFilters;
+ private List transportFilters;
+
+ private String name;
+
+ private int remoteSystemId;
+
+ public StubGWSenderFactory() {
+ this.eventFilters = new ArrayList();
+ this.transportFilters = new ArrayList();
+
+ }
+
+ @Override
+ public GatewaySenderFactory addGatewayEventFilter(GatewayEventFilter filter) {
+ eventFilters.add(filter);
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory addGatewayTransportFilter(GatewayTransportFilter filter) {
+ transportFilters.add(filter);
+ return this;
+ }
+
+ @Override
+ public GatewaySender create(String name, int remoteSystemId) {
+ this.name = name;
+ this.remoteSystemId = remoteSystemId;
+ when(gatewaySender.getId()).thenReturn(this.name);
+ when(gatewaySender.getRemoteDSId()).thenReturn(this.remoteSystemId);
+ when(gatewaySender.getAlertThreshold()).thenReturn(this.alertThreshold);
+ when(gatewaySender.getBatchSize()).thenReturn(this.batchSize);
+ when(gatewaySender.getBatchTimeInterval()).thenReturn(this.batchTimeInterval);
+ when(gatewaySender.getDiskStoreName()).thenReturn(this.diskStoreName);
+ when(gatewaySender.getDispatcherThreads()).thenReturn(this.dispatcherThreads);
+ when(gatewaySender.getGatewayEventFilters()).thenReturn(this.eventFilters);
+ when(gatewaySender.getGatewayTransportFilters()).thenReturn(this.transportFilters);
+ when(gatewaySender.getMaximumQueueMemory()).thenReturn(this.maxQueueMemory);
+ when(gatewaySender.getOrderPolicy()).thenReturn(this.orderPolicy);
+ when(gatewaySender.getSocketBufferSize()).thenReturn(this.socketBufferSize);
+ when(gatewaySender.getSocketReadTimeout()).thenReturn(this.socketReadTimeout);
+ when(gatewaySender.isManualStart()).thenReturn(this.manualStart);
+ when(gatewaySender.isBatchConflationEnabled()).thenReturn(this.batchConflationEnabled);
+ when(gatewaySender.isDiskSynchronous()).thenReturn(this.diskSynchronous);
+ when(gatewaySender.isParallel()).thenReturn(this.parallel);
+ when(gatewaySender.isPersistenceEnabled()).thenReturn(this.persistenceEnabled);
+ return gatewaySender;
+ }
+
+ @Override
+ public GatewaySenderFactory removeGatewayEventFilter(GatewayEventFilter filter) {
+ gatewaySender.removeGatewayEventFilter(filter);
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory removeGatewayTransportFilter(GatewayTransportFilter filter) {
+ gatewaySender.removeGatewayTransportFilter(filter);
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setAlertThreshold(int alertThreshold) {
+ this.alertThreshold = alertThreshold;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setBatchConflationEnabled(boolean batchConflationEnabled) {
+ this.batchConflationEnabled = batchConflationEnabled;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setBatchSize(int batchSize) {
+ this.batchSize = batchSize;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setBatchTimeInterval(int batchTimeInterval) {
+ this.batchTimeInterval = batchTimeInterval;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setDiskStoreName(String diskStoreName) {
+ this.diskStoreName = diskStoreName;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setDiskSynchronous(boolean diskSynchronous) {
+ this.diskSynchronous = diskSynchronous;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setDispatcherThreads(int dispatcherThreads) {
+ this.dispatcherThreads = dispatcherThreads;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setManualStart(boolean manualStart) {
+ this.manualStart = manualStart;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setMaximumQueueMemory(int maxQueueMemory) {
+ this.maxQueueMemory = maxQueueMemory;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setOrderPolicy(OrderPolicy orderPolicy) {
+ this.orderPolicy = orderPolicy;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setParallel(boolean parallel) {
+ this.parallel = parallel;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setPersistenceEnabled(boolean persistenceEnabled) {
+ this.persistenceEnabled = persistenceEnabled;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setSocketBufferSize(int socketBufferSize) {
+ this.socketBufferSize = socketBufferSize;
+ return this;
+ }
+
+ @Override
+ public GatewaySenderFactory setSocketReadTimeout(int socketReadTimeout) {
+ this.socketReadTimeout = socketReadTimeout;
+ return this;
+ }
+ }
+
+
+ /*
+ * This mocks out the WAN components which are disabled in the developer edition
+ */
+ @Override
+ public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
+ if (bean instanceof GatewaySenderFactoryBean) {
+ ((GatewaySenderFactoryBean)bean).setFactory(new StubGWSenderFactory());
+ }
+ if (bean instanceof AsyncEventQueueFactoryBean) {
+ ((AsyncEventQueueFactoryBean)bean).setFactory(new StubAsyncEventQueueFactory());
+ }
+ return bean;
+ }
+
+ @Override
+ public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
+ return bean;
+ }
}
diff --git a/src/test/resources/log4j.properties b/src/test/resources/log4j.properties
index 6db93321..9676596b 100644
--- a/src/test/resources/log4j.properties
+++ b/src/test/resources/log4j.properties
@@ -6,7 +6,7 @@ log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.category.org.springframework.data.gemfire.listener=TRACE
log4j.category.org.springframework.data.gemfire=DEBUG
-log4j.category.org.springframework.beans=DEBUG
+log4j.category.org.springframework=DEBUG
# for debugging datasource initialization
# log4j.category.test.jdbc=DEBUG
diff --git a/src/test/resources/org/springframework/data/gemfire/config/gateway-v7-ns.xml b/src/test/resources/org/springframework/data/gemfire/config/gateway-v7-ns.xml
index 44ee6696..fbdddb1a 100644
--- a/src/test/resources/org/springframework/data/gemfire/config/gateway-v7-ns.xml
+++ b/src/test/resources/org/springframework/data/gemfire/config/gateway-v7-ns.xml
@@ -10,11 +10,10 @@
-