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();
}