diff --git a/pom.xml b/pom.xml
index ad13c936..bf7764b7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,7 +22,7 @@
2.7.7
1.3.2
1.0.0
- 9.3.0
+ 9.4.0
2.0.2
1.01
0.4
diff --git a/src/main/java/org/springframework/data/gemfire/RegionLookupFactoryBean.java b/src/main/java/org/springframework/data/gemfire/RegionLookupFactoryBean.java
index b625d4bb..b1cc2287 100644
--- a/src/main/java/org/springframework/data/gemfire/RegionLookupFactoryBean.java
+++ b/src/main/java/org/springframework/data/gemfire/RegionLookupFactoryBean.java
@@ -205,6 +205,7 @@ public abstract class RegionLookupFactoryBean extends AbstractFactoryBeanS
}
/**
+>>>>>>> SGF-734 - Upgrade to Pivotal GemFire 9.4.
* Returns a reference to the {@link GemFireCache} used to create the {@link Region}.
*
* @return a reference to the {@link GemFireCache} used to create the {@link Region}..
diff --git a/src/main/java/org/springframework/data/gemfire/client/PoolAdapter.java b/src/main/java/org/springframework/data/gemfire/client/PoolAdapter.java
index ca34dd10..840c5040 100644
--- a/src/main/java/org/springframework/data/gemfire/client/PoolAdapter.java
+++ b/src/main/java/org/springframework/data/gemfire/client/PoolAdapter.java
@@ -78,7 +78,6 @@ public abstract class PoolAdapter implements Pool {
throw new UnsupportedOperationException(NOT_IMPLEMENTED);
}
- @Override
public List getOnlineLocators() {
throw new UnsupportedOperationException(NOT_IMPLEMENTED);
}
@@ -143,6 +142,10 @@ public abstract class PoolAdapter implements Pool {
throw new UnsupportedOperationException(NOT_IMPLEMENTED);
}
+ public int getSubscriptionTimeoutMultiplier() {
+ throw new UnsupportedOperationException(NOT_IMPLEMENTED);
+ }
+
public boolean getThreadLocalConnections() {
throw new UnsupportedOperationException(NOT_IMPLEMENTED);
}
diff --git a/src/main/java/org/springframework/data/gemfire/client/PoolFactoryBean.java b/src/main/java/org/springframework/data/gemfire/client/PoolFactoryBean.java
index a23ccc09..dc32bf52 100644
--- a/src/main/java/org/springframework/data/gemfire/client/PoolFactoryBean.java
+++ b/src/main/java/org/springframework/data/gemfire/client/PoolFactoryBean.java
@@ -98,6 +98,7 @@ public class PoolFactoryBean extends AbstractFactoryBeanSupport implements
private int subscriptionAckInterval = PoolFactory.DEFAULT_SUBSCRIPTION_ACK_INTERVAL;
private int subscriptionMessageTrackingTimeout = PoolFactory.DEFAULT_SUBSCRIPTION_MESSAGE_TRACKING_TIMEOUT;
private int subscriptionRedundancy = PoolFactory.DEFAULT_SUBSCRIPTION_REDUNDANCY;
+ private int subscriptionTimeoutMultiplier = PoolFactory.DEFAULT_SUBSCRIPTION_TIMEOUT_MULTIPLIER;
private long idleTimeout = PoolFactory.DEFAULT_IDLE_TIMEOUT;
private long pingInterval = PoolFactory.DEFAULT_PING_INTERVAL;
@@ -124,16 +125,18 @@ public class PoolFactoryBean extends AbstractFactoryBeanSupport implements
* @see org.apache.geode.cache.client.PoolManager
* @see org.apache.geode.cache.client.PoolFactory
* @see org.apache.geode.cache.client.Pool
- * @see #resolvePoolName()
*/
@Override
public void afterPropertiesSet() throws Exception {
+ init(Optional.ofNullable(find(resolvePoolName())));
+ }
- Pool existingPool = find(resolvePoolName());
+ @SuppressWarnings("all")
+ private void init(Optional existingPool) {
- if (existingPool != null) {
+ if (existingPool.isPresent()) {
- this.pool = existingPool;
+ this.pool = existingPool.get();
this.springManagedPool = false;
logDebug(() -> String.format("A Pool with name [%s] already exists; Using existing Pool",
@@ -308,6 +311,7 @@ public class PoolFactoryBean extends AbstractFactoryBeanSupport implements
it.setSubscriptionEnabled(this.subscriptionEnabled);
it.setSubscriptionMessageTrackingTimeout(this.subscriptionMessageTrackingTimeout);
it.setSubscriptionRedundancy(this.subscriptionRedundancy);
+ it.setSubscriptionTimeoutMultiplier(this.subscriptionTimeoutMultiplier);
it.setThreadLocalConnections(this.threadLocalConnections);
nullSafeCollection(this.locators).forEach(locator ->
@@ -564,6 +568,11 @@ public class PoolFactoryBean extends AbstractFactoryBeanSupport implements
return PoolFactoryBean.this.subscriptionRedundancy;
}
+ @Override
+ public int getSubscriptionTimeoutMultiplier() {
+ return PoolFactoryBean.this.subscriptionTimeoutMultiplier;
+ }
+
@Override
public boolean getThreadLocalConnections() {
return PoolFactoryBean.this.threadLocalConnections;
@@ -737,21 +746,19 @@ public class PoolFactoryBean extends AbstractFactoryBeanSupport implements
this.subscriptionRedundancy = subscriptionRedundancy;
}
+ public void setSubscriptionTimeoutMultiplier(int subscriptionTimeoutMultiplier) {
+ this.subscriptionTimeoutMultiplier = subscriptionTimeoutMultiplier;
+ }
+
public void setThreadLocalConnections(boolean threadLocalConnections) {
this.threadLocalConnections = threadLocalConnections;
}
- /*
- * (non-Javadoc)
- * internal framework use only
- */
+ // Internal framework use only.
public final void setLocatorsConfiguration(Object locatorsConfiguration) {
}
- /*
- * (non-Javadoc)
- * internal framework use only
- */
+ // Internal framework use only.
public final void setServersConfiguration(Object serversConfiguration) {
}
@@ -771,5 +778,6 @@ public class PoolFactoryBean extends AbstractFactoryBeanSupport implements
* @see org.apache.geode.cache.client.PoolFactory
*/
PoolFactory initialize(PoolFactory poolFactory);
+
}
}
diff --git a/src/main/java/org/springframework/data/gemfire/client/support/DefaultableDelegatingPoolAdapter.java b/src/main/java/org/springframework/data/gemfire/client/support/DefaultableDelegatingPoolAdapter.java
index 4ac4253b..f27127be 100644
--- a/src/main/java/org/springframework/data/gemfire/client/support/DefaultableDelegatingPoolAdapter.java
+++ b/src/main/java/org/springframework/data/gemfire/client/support/DefaultableDelegatingPoolAdapter.java
@@ -196,6 +196,11 @@ public abstract class DefaultableDelegatingPoolAdapter {
return defaultIfNull(defaultSubscriptionRedundancy, () -> getDelegate().getSubscriptionRedundancy());
}
+ public int getSubscriptionTimeoutMultiplier(Integer defaultSubscriptionTimeoutMultiplier) {
+ return defaultIfNull(defaultSubscriptionTimeoutMultiplier,
+ () -> getDelegate().getSubscriptionTimeoutMultiplier());
+ }
+
public boolean getThreadLocalConnections(Boolean defaultThreadLocalConnections) {
return defaultIfNull(defaultThreadLocalConnections, () -> getDelegate().getThreadLocalConnections());
}
@@ -204,7 +209,7 @@ public abstract class DefaultableDelegatingPoolAdapter {
getDelegate().destroy();
}
- public void destroy(boolean keepAlive) {
+ public void destroy(final boolean keepAlive) {
getDelegate().destroy(keepAlive);
}
@@ -218,4 +223,8 @@ public abstract class DefaultableDelegatingPoolAdapter {
PREFER_POOL
}
+
+ interface ValueProvider {
+ T getValue();
+ }
}
diff --git a/src/main/java/org/springframework/data/gemfire/client/support/DelegatingPoolAdapter.java b/src/main/java/org/springframework/data/gemfire/client/support/DelegatingPoolAdapter.java
index e26656d6..805bf130 100644
--- a/src/main/java/org/springframework/data/gemfire/client/support/DelegatingPoolAdapter.java
+++ b/src/main/java/org/springframework/data/gemfire/client/support/DelegatingPoolAdapter.java
@@ -258,6 +258,12 @@ public abstract class DelegatingPoolAdapter extends FactoryDefaultsPoolAdapter {
.orElseGet(super::getSubscriptionRedundancy);
}
+ @Override
+ public int getSubscriptionTimeoutMultiplier() {
+ return Optional.ofNullable(getDelegate()).map(Pool::getSubscriptionTimeoutMultiplier)
+ .orElseGet(super::getSubscriptionTimeoutMultiplier);
+ }
+
@Override
public boolean getThreadLocalConnections() {
diff --git a/src/main/java/org/springframework/data/gemfire/client/support/FactoryDefaultsPoolAdapter.java b/src/main/java/org/springframework/data/gemfire/client/support/FactoryDefaultsPoolAdapter.java
index 55aaf282..933b8609 100644
--- a/src/main/java/org/springframework/data/gemfire/client/support/FactoryDefaultsPoolAdapter.java
+++ b/src/main/java/org/springframework/data/gemfire/client/support/FactoryDefaultsPoolAdapter.java
@@ -161,6 +161,11 @@ public abstract class FactoryDefaultsPoolAdapter extends PoolAdapter {
return PoolFactory.DEFAULT_SUBSCRIPTION_REDUNDANCY;
}
+ @Override
+ public int getSubscriptionTimeoutMultiplier() {
+ return PoolFactory.DEFAULT_SUBSCRIPTION_TIMEOUT_MULTIPLIER;
+ }
+
@Override
public boolean getThreadLocalConnections() {
return PoolFactory.DEFAULT_THREAD_LOCAL_CONNECTIONS;
diff --git a/src/main/java/org/springframework/data/gemfire/config/xml/LocalRegionParser.java b/src/main/java/org/springframework/data/gemfire/config/xml/LocalRegionParser.java
index 16100ef4..367f8954 100644
--- a/src/main/java/org/springframework/data/gemfire/config/xml/LocalRegionParser.java
+++ b/src/main/java/org/springframework/data/gemfire/config/xml/LocalRegionParser.java
@@ -49,8 +49,8 @@ class LocalRegionParser extends AbstractRegionParser {
validateDataPolicyShortcutAttributesMutualExclusion(element, parserContext);
- BeanDefinitionBuilder regionAttributesBuilder = BeanDefinitionBuilder.genericBeanDefinition(
- RegionAttributesFactoryBean.class);
+ BeanDefinitionBuilder regionAttributesBuilder =
+ BeanDefinitionBuilder.genericBeanDefinition(RegionAttributesFactoryBean.class);
doParseRegionConfiguration(element, parserContext, builder, regionAttributesBuilder, subRegion);
diff --git a/src/main/java/org/springframework/data/gemfire/config/xml/PoolParser.java b/src/main/java/org/springframework/data/gemfire/config/xml/PoolParser.java
index 9c21b063..bba861a5 100644
--- a/src/main/java/org/springframework/data/gemfire/config/xml/PoolParser.java
+++ b/src/main/java/org/springframework/data/gemfire/config/xml/PoolParser.java
@@ -123,6 +123,7 @@ class PoolParser extends AbstractSingleBeanDefinitionParser {
ParsingUtils.setPropertyValue(element, poolBuilder, "subscription-enabled");
ParsingUtils.setPropertyValue(element, poolBuilder, "subscription-message-tracking-timeout");
ParsingUtils.setPropertyValue(element, poolBuilder, "subscription-redundancy");
+ ParsingUtils.setPropertyValue(element, poolBuilder, "subscription-timeout-multiplier");
ParsingUtils.setPropertyValue(element, poolBuilder, "thread-local-connections");
List childElements = DomUtils.getChildElements(element);
diff --git a/src/main/java/org/springframework/data/gemfire/function/execution/AbstractFunctionExecution.java b/src/main/java/org/springframework/data/gemfire/function/execution/AbstractFunctionExecution.java
index e50a4d02..60e944a5 100644
--- a/src/main/java/org/springframework/data/gemfire/function/execution/AbstractFunctionExecution.java
+++ b/src/main/java/org/springframework/data/gemfire/function/execution/AbstractFunctionExecution.java
@@ -33,6 +33,7 @@ import org.springframework.util.Assert;
* @author David Turanski
* @author John Blum
*/
+@SuppressWarnings("unused")
abstract class AbstractFunctionExecution {
private final static String NO_RESULT_MESSAGE = "Cannot return any result as the Function#hasResult() is false";
@@ -60,14 +61,13 @@ abstract class AbstractFunctionExecution {
public AbstractFunctionExecution(String functionId, Object... args) {
- Assert.hasText(functionId, "FunctionId cannot be null or empty");
+ Assert.hasText(functionId, "Function ID must not be null or empty");
this.functionId = functionId;
this.args = args;
}
- AbstractFunctionExecution() {
- }
+ AbstractFunctionExecution() { }
Object[] getArgs() {
return this.args;
diff --git a/src/main/java/org/springframework/data/gemfire/function/execution/GemfireOnServerFunctionTemplate.java b/src/main/java/org/springframework/data/gemfire/function/execution/GemfireOnServerFunctionTemplate.java
index 3fed5339..92f0f181 100644
--- a/src/main/java/org/springframework/data/gemfire/function/execution/GemfireOnServerFunctionTemplate.java
+++ b/src/main/java/org/springframework/data/gemfire/function/execution/GemfireOnServerFunctionTemplate.java
@@ -15,10 +15,16 @@ package org.springframework.data.gemfire.function.execution;
import org.apache.geode.cache.RegionService;
import org.apache.geode.cache.client.Pool;
+import org.apache.geode.cache.execute.Execution;
+import org.apache.geode.cache.execute.Function;
/**
+ * Creates an {@literal OnServer} {@link Function} {@link Execution} initialized with
+ * either {@link RegionService cache} or {@link Pool}.
+ *
* @author David Turanski
* @author John Blum
+ * @see org.springframework.data.gemfire.function.execution.AbstractFunctionTemplate
*/
public class GemfireOnServerFunctionTemplate extends AbstractFunctionTemplate {
@@ -37,7 +43,6 @@ public class GemfireOnServerFunctionTemplate extends AbstractFunctionTemplate {
@Override
protected AbstractFunctionExecution getFunctionExecution() {
- return (pool != null ? new PoolServerFunctionExecution(this.pool) : new ServerFunctionExecution(this.cache));
+ return pool != null ? new PoolServerFunctionExecution(this.pool) : new ServerFunctionExecution(this.cache);
}
-
}
diff --git a/src/main/java/org/springframework/data/gemfire/function/execution/PoolServerFunctionExecution.java b/src/main/java/org/springframework/data/gemfire/function/execution/PoolServerFunctionExecution.java
index 1bc2377f..0cd12b20 100644
--- a/src/main/java/org/springframework/data/gemfire/function/execution/PoolServerFunctionExecution.java
+++ b/src/main/java/org/springframework/data/gemfire/function/execution/PoolServerFunctionExecution.java
@@ -20,47 +20,58 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
/**
- * Creates a GemFire {@link Execution} using {code}FunctionService.onServer(Pool pool){code}
- * @author David Turanski
+ * Creates an {@link Execution} from {@link FunctionService#onServer(Pool)}.
*
+ * @author David Turanski
+ * @author John Blum
+ * @see org.springframework.beans.factory.InitializingBean
+ * @see org.springframework.data.gemfire.function.execution.AbstractFunctionExecution
*/
class PoolServerFunctionExecution extends AbstractFunctionExecution implements InitializingBean {
-
private Pool pool;
- private String poolname;
+ private String poolName;
/**
- * @param pool the {@link Pool}
+ * Constructs a new instance of {@link PoolServerFunctionExecution} initialized with the given {@link Pool}.
+ *
+ * @param pool {@link Pool} used to initialize the {@link Execution}.
+ * @throws IllegalArgumentException if {@link Pool} is {@literal null}.
+ * @see org.apache.geode.cache.client.Pool
*/
public PoolServerFunctionExecution(Pool pool) {
- super();
- Assert.notNull(pool, "pool cannot be null");
+
+ Assert.notNull(pool, "Pool must not be null");
+
this.pool = pool;
}
- public PoolServerFunctionExecution(String poolname) {
- super();
- Assert.notNull(poolname, "pool name cannot be null");
- this.poolname = poolname;
+ /**
+ * Constructs a new instance of {@link PoolServerFunctionExecution} initialized with
+ * the given {@link String name} of the {@link Pool}.
+ *
+ * @param poolName {@link String} containing the name of the {@link Pool}
+ * used to initialize the {@link Execution}.
+ * @throws IllegalArgumentException if {@link String poolName} is {@literal null} or empty.
+ */
+ public PoolServerFunctionExecution(String poolName) {
+ Assert.hasText(poolName, "Pool name must not be null or empty");
+
+ this.poolName = poolName;
}
-
@Override
protected Execution getExecution() {
return FunctionService.onServer(this.pool);
}
-
- /* (non-Javadoc)
- * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
- */
@Override
public void afterPropertiesSet() throws Exception {
- this.pool = PoolManager.find(poolname);
- Assert.notNull(pool," pool " + poolname+ " does not exist");
+ this.pool = PoolManager.find(this.poolName);
+
+ Assert.notNull(this.pool,String.format("Pool [%s] not found", this.poolName));
}
}
diff --git a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-2.1.xsd b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-2.1.xsd
index 508eb5a5..a9ded410 100644
--- a/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-2.1.xsd
+++ b/src/main/resources/org/springframework/data/gemfire/config/spring-gemfire-2.1.xsd
@@ -2666,6 +2666,7 @@ Comma-delimited list of Server endpoints used by this Pool in the form of: host1
+
diff --git a/src/test/java/org/springframework/data/gemfire/LookupRegionFactoryBeanTest.java b/src/test/java/org/springframework/data/gemfire/LookupRegionFactoryBeanTest.java
index 15901467..6f9c0c0b 100644
--- a/src/test/java/org/springframework/data/gemfire/LookupRegionFactoryBeanTest.java
+++ b/src/test/java/org/springframework/data/gemfire/LookupRegionFactoryBeanTest.java
@@ -57,13 +57,13 @@ import org.junit.Test;
*/
public class LookupRegionFactoryBeanTest {
- protected AsyncEventQueue mockAsyncEventQueue(final String id) {
+ private AsyncEventQueue mockAsyncEventQueue(final String id) {
AsyncEventQueue mockQueue = mock(AsyncEventQueue.class, String.format("MockAsyncEventQueue.%1$s", id));
when(mockQueue.getId()).thenReturn(id);
return mockQueue;
}
- protected GatewaySender mockGatewaySender(final String id) {
+ private GatewaySender mockGatewaySender(final String id) {
GatewaySender mockGatewaySender = mock(GatewaySender.class, String.format("MockGatewaySender.%1$s", id));
when(mockGatewaySender.getId()).thenReturn(id);
return mockGatewaySender;
@@ -72,6 +72,7 @@ public class LookupRegionFactoryBeanTest {
@Test
@SuppressWarnings("unchecked")
public void testAfterPropertiesSet() throws Exception {
+
Cache mockCache = mock(Cache.class, "testAfterPropertiesSet.MockCache");
Region