From e3c8afe7fcb8a89b988384b6b8e28ff115be06e0 Mon Sep 17 00:00:00 2001 From: John Blum Date: Tue, 23 Jul 2019 10:52:55 -0700 Subject: [PATCH] DATAGEODE-212 - Refactor Gateway Sender/Receiver support and remove unnecessary configuration validations. --- .../wan/AbstractWANComponentFactoryBean.java | 17 ++-- .../wan/GatewayReceiverFactoryBean.java | 55 +++++------ .../gemfire/wan/GatewaySenderFactoryBean.java | 98 +++++++------------ ...ableGatewayReceiverConfigurationTests.java | 2 +- .../wan/GatewayReceiverFactoryBeanTest.java | 7 +- .../wan/GatewaySenderFactoryBeanTest.java | 30 +----- 6 files changed, 78 insertions(+), 131 deletions(-) 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 d92821cd..612f72fa 100644 --- a/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/wan/AbstractWANComponentFactoryBean.java @@ -17,10 +17,9 @@ package org.springframework.data.gemfire.wan; import org.apache.geode.cache.Cache; -import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.DisposableBean; -import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; +import org.springframework.data.gemfire.support.AbstractFactoryBeanSupport; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -33,13 +32,13 @@ import org.slf4j.LoggerFactory; * @author David Turanski * @author John Blum * @see org.apache.geode.cache.Cache - * @see org.springframework.beans.factory.BeanNameAware * @see org.springframework.beans.factory.DisposableBean * @see org.springframework.beans.factory.FactoryBean * @see org.springframework.beans.factory.InitializingBean + * @see org.springframework.data.gemfire.support.AbstractFactoryBeanSupport */ -public abstract class AbstractWANComponentFactoryBean - implements BeanNameAware, DisposableBean, FactoryBean, InitializingBean { +public abstract class AbstractWANComponentFactoryBean extends AbstractFactoryBeanSupport + implements DisposableBean, InitializingBean { protected Cache cache; @@ -72,12 +71,10 @@ public abstract class AbstractWANComponentFactoryBean } public String getName() { - return StringUtils.hasText(this.name) ? this.name : this.beanName; - } - @Override - public final boolean isSingleton() { - return true; + return StringUtils.hasText(this.name) + ? this.name + : this.beanName; } @Override diff --git a/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java b/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java index dae898c6..017847e5 100644 --- a/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBean.java @@ -78,48 +78,26 @@ public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean< super(cache); } - /** - * @inheritDoc - */ - @Override - public GatewayReceiver getObject() throws Exception { - return this.gatewayReceiver; - } - - /** - * @inheritDoc - */ - @Override - public Class getObjectType() { - - return this.gatewayReceiver != null - ? this.gatewayReceiver.getClass() - : GatewayReceiver.class; - } - - /** - * @inheritDoc - */ @Override protected void doInit() { - GatewayReceiverFactory gatewayReceiverFactory = cache.createGatewayReceiverFactory(); + GatewayReceiverFactory gatewayReceiverFactory = this.cache.createGatewayReceiverFactory(); Optional.ofNullable(this.gatewayReceiverConfigurer).ifPresent(it -> it.configure(getName(),this)); - if (StringUtils.hasText(this.bindAddress)) { - gatewayReceiverFactory.setBindAddress(this.bindAddress); - } + Optional.ofNullable(this.bindAddress) + .filter(StringUtils::hasText) + .ifPresent(gatewayReceiverFactory::setBindAddress); - if (StringUtils.hasText(this.hostnameForSenders)) { - gatewayReceiverFactory.setHostnameForSenders(this.hostnameForSenders); - } + Optional.ofNullable(this.hostnameForSenders) + .filter(StringUtils::hasText) + .ifPresent(gatewayReceiverFactory::setHostnameForSenders); int localStartPort = defaultPort(this.startPort, GatewayReceiver.DEFAULT_START_PORT); int localEndPort = defaultPort(this.endPort, GatewayReceiver.DEFAULT_END_PORT); Assert.isTrue(localStartPort <= localEndPort, - String.format("'startPort' must be less than or equal to %d.", localEndPort)); + String.format("[startPort] must be less than or equal to [%d]", localEndPort)); gatewayReceiverFactory.setStartPort(localStartPort); gatewayReceiverFactory.setEndPort(localEndPort); @@ -128,11 +106,24 @@ public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean< Optional.ofNullable(this.maximumTimeBetweenPings).ifPresent(gatewayReceiverFactory::setMaximumTimeBetweenPings); Optional.ofNullable(this.socketBufferSize).ifPresent(gatewayReceiverFactory::setSocketBufferSize); - CollectionUtils.nullSafeList(transportFilters).forEach(gatewayReceiverFactory::addGatewayTransportFilter); + CollectionUtils.nullSafeList(this.transportFilters).forEach(gatewayReceiverFactory::addGatewayTransportFilter); this.gatewayReceiver = gatewayReceiverFactory.create(); } + @Override + public GatewayReceiver getObject() throws Exception { + return this.gatewayReceiver; + } + + @Override + public Class getObjectType() { + + return this.gatewayReceiver != null + ? this.gatewayReceiver.getClass() + : GatewayReceiver.class; + } + protected int defaultPort(Integer port, int defaultPort) { return port != null ? port : defaultPort; } @@ -178,6 +169,6 @@ public class GatewayReceiverFactoryBean extends AbstractWANComponentFactoryBean< } public Collection getTransportFilters() { - return Collections.unmodifiableList(transportFilters); + return Collections.unmodifiableList(this.transportFilters); } } 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 81bdc419..1406c640 100644 --- a/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java +++ b/src/main/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBean.java @@ -16,6 +16,7 @@ package org.springframework.data.gemfire.wan; import java.util.List; +import java.util.Optional; import org.apache.geode.cache.Cache; import org.apache.geode.cache.wan.GatewayEventFilter; @@ -23,9 +24,10 @@ import org.apache.geode.cache.wan.GatewayEventSubstitutionFilter; import org.apache.geode.cache.wan.GatewaySender; import org.apache.geode.cache.wan.GatewaySenderFactory; import org.apache.geode.cache.wan.GatewayTransportFilter; +import org.apache.shiro.util.StringUtils; + import org.springframework.beans.factory.FactoryBean; import org.springframework.data.gemfire.util.CollectionUtils; -import org.springframework.util.Assert; /** * Spring {@link FactoryBean} for creating a parallel or serial GemFire {@link GatewaySender}. @@ -87,77 +89,50 @@ public class GatewaySenderFactoryBean extends AbstractWANComponentFactoryBean getObjectType() { - return this.gatewaySender != null ? this.gatewaySender.getClass() : GatewaySender.class; + + return this.gatewaySender != null + ? this.gatewaySender.getClass() + : GatewaySender.class; } public void setAlertThreshold(Integer alertThreshold) { @@ -208,7 +186,7 @@ public class GatewaySenderFactoryBean extends AbstractWANComponentFactoryBean beanNames.add(((TestGatewayTransportFilter) o).name)); + bean.getTransportFilters().forEach(o -> beanNames.add(((TestGatewayTransportFilter) o).name)); } } diff --git a/src/test/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBeanTest.java b/src/test/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBeanTest.java index aaafb5cf..86a0fa58 100644 --- a/src/test/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBeanTest.java +++ b/src/test/java/org/springframework/data/gemfire/wan/GatewayReceiverFactoryBeanTest.java @@ -15,7 +15,7 @@ */ package org.springframework.data.gemfire.wan; -import static org.junit.Assert.assertEquals; +import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.mock; @@ -98,7 +98,10 @@ public class GatewayReceiverFactoryBeanTest { factoryBean.afterPropertiesSet(); } catch (IllegalArgumentException expected) { - assertEquals("'startPort' must be less than or equal to 8192.", expected.getMessage()); + + assertThat(expected).hasMessageContaining("[startPort] must be less than or equal to [8192]"); + assertThat(expected).hasNoCause(); + throw expected; } } diff --git a/src/test/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBeanTest.java b/src/test/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBeanTest.java index 2552c6c2..a49b8029 100644 --- a/src/test/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBeanTest.java +++ b/src/test/java/org/springframework/data/gemfire/wan/GatewaySenderFactoryBeanTest.java @@ -13,21 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.data.gemfire.wan; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import org.junit.Test; + import org.apache.geode.cache.Cache; import org.apache.geode.cache.wan.GatewaySender; import org.apache.geode.cache.wan.GatewaySenderFactory; -import org.junit.Test; + import org.springframework.data.gemfire.TestUtils; /** @@ -176,29 +177,6 @@ public class GatewaySenderFactoryBeanTest { assertEquals(69, gatewaySender.getRemoteDSId()); } - @Test(expected = IllegalArgumentException.class) - public void parallelGatewaySenderWithOrderPolicyCreation() { - - GatewaySenderFactory mockGatewaySenderFactory = - mockGatewaySenderFactory("g2", 69); - - GatewaySenderFactoryBean factoryBean = new GatewaySenderFactoryBean( - mockCacheWithGatewayInfrastructure(mockGatewaySenderFactory)); - - factoryBean.setName("g2"); - factoryBean.setRemoteDistributedSystemId(69); - factoryBean.setParallel(true); - factoryBean.setOrderPolicy(GatewaySender.OrderPolicy.KEY); - - try { - factoryBean.doInit(); - } - catch (IllegalArgumentException expected) { - assertEquals("Order Policy cannot be used with a Parallel Gateway Sender Queue.", expected.getMessage()); - throw expected; - } - } - @Test public void gatewaySenderCreationWithDiskSynchronousAndNoPersistence() throws Exception {