From 444cd1e8df1be5945c22d7877dd4b492a3db4e17 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Fri, 3 May 2019 10:33:06 -0400 Subject: [PATCH] Move SF dependencies to the latest BUILD-SNAPSHOT (#2921) * Move SF dependencies to the latest BUILD-SNAPSHOT To avoid class loader issues it is better to align Spring Data dependencies with SF version we use explicitly. This way we don't have a `ClassLoader` issue when a newly introduced `TransactionManager` might not be visible from the previous versions * Fix code style warnings in the `TransactionSynchronizationFactoryBean` * Use `JavaUtils` in the `TransactionSynchronizationFactoryBean` to decrease code complexity * * Fix CQ Gemfire tests for upgrades compatibility --- build.gradle | 12 +-- ...TransactionSynchronizationFactoryBean.java | 40 ++++----- .../ContinuousQueryMessageProducerTests.java | 90 +++++++++---------- 3 files changed, 62 insertions(+), 80 deletions(-) diff --git a/build.gradle b/build.gradle index 1c5cbc6532..404ae57385 100644 --- a/build.gradle +++ b/build.gradle @@ -136,12 +136,12 @@ subprojects { subproject -> rsocketVersion = '0.12.2-RC3-SNAPSHOT' servletApiVersion = '4.0.1' smackVersion = '4.3.3' - springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '2.2.0.M1' - springDataJpaVersion = '2.2.0.M3' - springDataMongoVersion = '2.2.0.M3' - springDataRedisVersion = '2.2.0.M3' - springGemfireVersion = '2.2.0.M3' - springSecurityVersion = '5.2.0.M2' + springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '2.2.0.BUILD-SNAPSHOT' + springDataJpaVersion = '2.2.0.BUILD-SNAPSHOT' + springDataMongoVersion = '2.2.0.BUILD-SNAPSHOT' + springDataRedisVersion = '2.2.0.BUILD-SNAPSHOT' + springGemfireVersion = '2.2.0.BUILD-SNAPSHOT' + springSecurityVersion = '5.2.0.BUILD-SNAPSHOT' springRetryVersion = '1.2.4.RELEASE' springVersion = project.hasProperty('springVersion') ? project.springVersion : '5.2.0.BUILD-SNAPSHOT' springWsVersion = '3.0.7.RELEASE' diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transaction/TransactionSynchronizationFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/transaction/TransactionSynchronizationFactoryBean.java index a7e8b15641..3a342f03ea 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transaction/TransactionSynchronizationFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transaction/TransactionSynchronizationFactoryBean.java @@ -24,6 +24,7 @@ import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.integration.util.JavaUtils; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.core.BeanFactoryMessageChannelDestinationResolver; import org.springframework.messaging.core.DestinationResolver; @@ -36,6 +37,7 @@ import org.springframework.util.StringUtils; * * @author Artem Bilan * @author Gary Russell + * * @since 4.0 */ public class TransactionSynchronizationFactoryBean implements FactoryBean, @@ -169,39 +171,29 @@ public class TransactionSynchronizationFactoryBean implements FactoryBean + processor.setBeforeCommitExpression(PARSER.parseExpression(expression))) + .acceptIfHasText(this.afterCommitExpression, (expression) -> + processor.setAfterCommitExpression(PARSER.parseExpression(expression))) + .acceptIfHasText(this.afterRollbackExpression, (expression) -> + processor.setAfterRollbackExpression(PARSER.parseExpression(expression))) + .acceptIfNotNull(this.beforeCommitChannel, processor::setBeforeCommitChannel) + .acceptIfNotNull(this.afterCommitChannel, processor::setAfterCommitChannel) + .acceptIfNotNull(this.afterRollbackChannel, processor::setAfterRollbackChannel); if (this.beanFactory instanceof AutowireCapableBeanFactory) { ((AutowireCapableBeanFactory) this.beanFactory).initializeBean(processor, diff --git a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/inbound/ContinuousQueryMessageProducerTests.java b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/inbound/ContinuousQueryMessageProducerTests.java index c5fb4da2c6..887423c38e 100644 --- a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/inbound/ContinuousQueryMessageProducerTests.java +++ b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/inbound/ContinuousQueryMessageProducerTests.java @@ -22,9 +22,9 @@ import static org.mockito.Mockito.mock; import org.apache.geode.cache.Operation; import org.apache.geode.cache.query.CqEvent; import org.apache.geode.cache.query.CqQuery; -import org.apache.geode.cache.query.internal.cq.ServerCQImpl; -import org.junit.Before; -import org.junit.Test; +import org.apache.geode.cache.query.cq.internal.ServerCQImpl; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.data.gemfire.listener.ContinuousQueryListenerContainer; @@ -37,73 +37,63 @@ import org.springframework.messaging.MessagingException; /** * @author David Turanski * @author Artem Bilan + * * @since 2.1 */ public class ContinuousQueryMessageProducerTests { private static final SpelExpressionParser PARSER = new SpelExpressionParser(); - ContinuousQueryListenerContainer queryListenerContainer; + private ContinuousQueryMessageProducer cqMessageProducer; - ContinuousQueryMessageProducer cqMessageProducer; + private CqMessageHandler handler; - CqMessageHandler handler; - - @Before - public void setUp() { - queryListenerContainer = mock(ContinuousQueryListenerContainer.class); - cqMessageProducer = new ContinuousQueryMessageProducer(queryListenerContainer, "foo"); + @BeforeEach + void setUp() { + ContinuousQueryListenerContainer queryListenerContainer = mock(ContinuousQueryListenerContainer.class); + this.cqMessageProducer = new ContinuousQueryMessageProducer(queryListenerContainer, "foo"); DirectChannel outputChannel = new DirectChannel(); - cqMessageProducer.setOutputChannel(outputChannel); - cqMessageProducer.setBeanFactory(mock(BeanFactory.class)); - handler = new CqMessageHandler(); - outputChannel.subscribe(handler); + this.cqMessageProducer.setOutputChannel(outputChannel); + this.cqMessageProducer.setBeanFactory(mock(BeanFactory.class)); + this.handler = new CqMessageHandler(); + outputChannel.subscribe(this.handler); } @Test - public void testMessageProduced() { + void testMessageProduced() { CqEvent cqEvent = event(Operation.CREATE, "hello"); - - cqMessageProducer.onEvent(cqEvent); - - assertThat(handler.count).isEqualTo(1); - assertThat(handler.payload).isEqualTo(cqEvent); + this.cqMessageProducer.onEvent(cqEvent); + assertThat(this.handler.count).isEqualTo(1); + assertThat(this.handler.payload).isEqualTo(cqEvent); } @Test - public void testMessageNotProducedForUnsupportedEventType() { + void testMessageNotProducedForUnsupportedEventType() { CqEvent cqEvent = event(Operation.DESTROY, "hello"); - - cqMessageProducer.onEvent(cqEvent); - - assertThat(handler.count).isEqualTo(0); + this.cqMessageProducer.onEvent(cqEvent); + assertThat(this.handler.count).isEqualTo(0); } @Test - public void testMessageProducedForAddedEventType() { - + void testMessageProducedForAddedEventType() { CqEvent cqEvent = event(Operation.DESTROY, null); - - cqMessageProducer.setSupportedEventTypes(CqEventType.DESTROYED); - cqMessageProducer.onEvent(cqEvent); - - assertThat(handler.count).isEqualTo(1); - assertThat(handler.payload).isEqualTo(cqEvent); + this.cqMessageProducer.setSupportedEventTypes(CqEventType.DESTROYED); + this.cqMessageProducer.onEvent(cqEvent); + assertThat(this.handler.count).isEqualTo(1); + assertThat(this.handler.payload).isEqualTo(cqEvent); } @Test - public void testPayloadExpression() { + void testPayloadExpression() { CqEvent cqEvent = event(Operation.CREATE, "hello"); - cqMessageProducer.setPayloadExpression(PARSER.parseExpression("newValue.toUpperCase() + ', WORLD'")); - cqMessageProducer.afterPropertiesSet(); - - cqMessageProducer.onEvent(cqEvent); - assertThat(handler.count).isEqualTo(1); - assertThat(handler.payload).isEqualTo("HELLO, WORLD"); + this.cqMessageProducer.setPayloadExpression(PARSER.parseExpression("newValue.toUpperCase() + ', WORLD'")); + this.cqMessageProducer.afterPropertiesSet(); + this.cqMessageProducer.onEvent(cqEvent); + assertThat(this.handler.count).isEqualTo(1); + assertThat(this.handler.payload).isEqualTo("HELLO, WORLD"); } CqEvent event(final Operation operation, final Object value) { - return new CqEvent() { final CqQuery cq = new ServerCQImpl(); @@ -119,15 +109,15 @@ public class ContinuousQueryMessageProducerTests { } public CqQuery getCq() { - return cq; + return this.cq; } public byte[] getDeltaValue() { - return ba; + return this.ba; } public Object getKey() { - return key; + return this.key; } public Object getNewValue() { @@ -139,7 +129,7 @@ public class ContinuousQueryMessageProducerTests { } public Throwable getThrowable() { - return ex; + return this.ex; } }; @@ -147,13 +137,13 @@ public class ContinuousQueryMessageProducerTests { private static class CqMessageHandler implements MessageHandler { - public int count; + int count; - public Object payload; + Object payload; public void handleMessage(Message message) throws MessagingException { - count++; - payload = message.getPayload(); + this.count++; + this.payload = message.getPayload(); } }