diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationServiceActivator.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationAdviceChainTestBean.java similarity index 90% rename from org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationServiceActivator.java rename to org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationAdviceChainTestBean.java index 64bcc2c282..1df4db180d 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationServiceActivator.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationAdviceChainTestBean.java @@ -26,10 +26,10 @@ import org.springframework.integration.annotation.ServiceActivator; * @author Mark Fisher */ @MessageEndpoint -public class PollerAnnotationServiceActivator { +public class PollerAnnotationAdviceChainTestBean { @ServiceActivator(inputChannel="input", outputChannel="output") - @Poller(interval=5000, timeUnit=TimeUnit.SECONDS, maxMessagesPerPoll=1, + @Poller(interval=5, timeUnit=TimeUnit.SECONDS, maxMessagesPerPoll=1, adviceChain="beforeAdvice ,aroundAdvice, afterAdvice ") // spacing intentional public String testMethod(String input) { return input.toUpperCase(); diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerAdviceChainTests-context.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerAdviceChainTests-context.xml index e919f9429d..9c57ceed9b 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerAdviceChainTests-context.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerAdviceChainTests-context.xml @@ -20,11 +20,7 @@ - - - - - + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerTransactionalTests-context.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerTransactionalTests-context.xml new file mode 100644 index 0000000000..c9dc006908 --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerTransactionalTests-context.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerTransactionalTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerTransactionalTests.java new file mode 100644 index 0000000000..67b88e7d5e --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationConsumerTransactionalTests.java @@ -0,0 +1,87 @@ +/* + * Copyright 2002-2008 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.integration.channel.MessageChannel; +import org.springframework.integration.channel.PollableChannel; +import org.springframework.integration.message.Message; +import org.springframework.integration.message.StringMessage; +import org.springframework.integration.util.TestTransactionManager; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.TransactionDefinition; + +/** + * @author Mark Fisher + */ +@ContextConfiguration +@RunWith(SpringJUnit4ClassRunner.class) +public class PollerAnnotationConsumerTransactionalTests { + + @Autowired @Qualifier("input") + private MessageChannel input; + + @Autowired @Qualifier("output") + private PollableChannel output; + + @Autowired + private TestTransactionManager transactionManager; + + + @Before + public void resetTransactionManager() { + transactionManager.reset(); + } + + + @Test + public void commit() throws InterruptedException { + input.send(new StringMessage("test")); + transactionManager.waitForCompletion(1000); + Message reply = output.receive(1000); + assertEquals("TEST", reply.getPayload()); + assertEquals(1, transactionManager.getCommitCount()); + assertEquals(0, transactionManager.getRollbackCount()); + } + + @Test + public void rollback() throws InterruptedException { + input.send(new StringMessage("bad")); + transactionManager.waitForCompletion(1000); + assertNull(output.receive(0)); + assertEquals(0, transactionManager.getCommitCount()); + assertEquals(1, transactionManager.getRollbackCount()); + } + + @Test + public void verifyPropagationSetting() throws InterruptedException { + input.send(new StringMessage("test")); + transactionManager.waitForCompletion(1000); + assertEquals(TransactionDefinition.PROPAGATION_REQUIRES_NEW, + transactionManager.getLastDefinition().getPropagationBehavior()); + } + +} diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationTransactionalTestBean.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationTransactionalTestBean.java new file mode 100644 index 0000000000..2a01794c85 --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/PollerAnnotationTransactionalTestBean.java @@ -0,0 +1,42 @@ +/* + * Copyright 2002-2008 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.config; + +import org.springframework.integration.annotation.MessageEndpoint; +import org.springframework.integration.annotation.Poller; +import org.springframework.integration.annotation.ServiceActivator; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +/** + * @author Mark Fisher + */ +@MessageEndpoint +public class PollerAnnotationTransactionalTestBean { + + @ServiceActivator(inputChannel="input", outputChannel="output") + @Poller(interval=100, maxMessagesPerPoll=1, + transactionManager="testTransactionManager", + transactionAttributes=@Transactional(propagation=Propagation.REQUIRES_NEW)) + public String testMethod(String input) { + if ("bad".equals(input)) { + throw new IllegalArgumentException("bad input"); + } + return input.toUpperCase(); + } + +} diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/PollingTransactionTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/PollingTransactionTests.java index 0cfa0fde19..1b9e18c3c9 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/PollingTransactionTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/PollingTransactionTests.java @@ -27,6 +27,7 @@ import org.springframework.integration.channel.MessageChannel; import org.springframework.integration.channel.PollableChannel; import org.springframework.integration.message.Message; import org.springframework.integration.message.StringMessage; +import org.springframework.integration.util.TestTransactionManager; import org.springframework.transaction.IllegalTransactionStateException; import org.springframework.transaction.annotation.Propagation; diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationMandatoryTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationMandatoryTests.xml index 8778ce1c54..5414d20b77 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationMandatoryTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationMandatoryTests.xml @@ -33,6 +33,6 @@ - + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationNotSupportedTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationNotSupportedTests.xml index efca517669..7f04d0d8bb 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationNotSupportedTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationNotSupportedTests.xml @@ -29,6 +29,6 @@ - + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationRequiredTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationRequiredTests.xml index d21acb32f7..7fb86e121f 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationRequiredTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationRequiredTests.xml @@ -29,6 +29,6 @@ - + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationRequiresNewTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationRequiresNewTests.xml index b91815e540..31167f7df4 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationRequiresNewTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationRequiresNewTests.xml @@ -29,6 +29,6 @@ - + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationSupportsTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationSupportsTests.xml index 79b2cb6b8d..2177a88970 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationSupportsTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/propagationSupportsTests.xml @@ -29,6 +29,6 @@ - + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/transactionTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/transactionTests.xml index 9eea616b4e..c4564c69c8 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/transactionTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/transactionTests.xml @@ -41,6 +41,6 @@ - + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/TestTransactionManager.java b/org.springframework.integration/src/test/java/org/springframework/integration/util/TestTransactionManager.java similarity index 91% rename from org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/TestTransactionManager.java rename to org.springframework.integration/src/test/java/org/springframework/integration/util/TestTransactionManager.java index 0972060a26..a8372b90d4 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/dispatcher/TestTransactionManager.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/util/TestTransactionManager.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.integration.dispatcher; +package org.springframework.integration.util; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -36,11 +36,17 @@ public class TestTransactionManager extends AbstractPlatformTransactionManager { private final AtomicInteger rollbackCounter = new AtomicInteger(); - private final CountDownLatch latch = new CountDownLatch(1); + private volatile CountDownLatch latch = new CountDownLatch(1); private volatile TransactionDefinition lastDefinition; + public void reset() { + this.latch = new CountDownLatch(1); + this.commitCounter.set(0); + this.rollbackCounter.set(0); + } + public int getCommitCount() { return this.commitCounter.get(); }