diff --git a/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/PollingTransactionTests.java b/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/PollingTransactionTests.java index d20782560b..a3e940ae9a 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/PollingTransactionTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/PollingTransactionTests.java @@ -20,12 +20,19 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import java.util.List; + +import org.aopalliance.aop.Advice; +import org.aopalliance.intercept.MethodInterceptor; +import org.aopalliance.intercept.MethodInvocation; import org.junit.Test; +import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.Message; import org.springframework.integration.MessageChannel; import org.springframework.integration.core.PollableChannel; +import org.springframework.integration.endpoint.PollingConsumer; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.util.TestTransactionManager; import org.springframework.transaction.IllegalTransactionStateException; @@ -53,6 +60,27 @@ public class PollingTransactionTests { assertEquals(0, txManager.getRollbackCount()); context.stop(); } + + @Test + public void transactionWithCommitAndAdvices() throws InterruptedException { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "transactionTests.xml", this.getClass()); + PollingConsumer advicedPoller = context.getBean("advicedSa", PollingConsumer.class); + List adviceChain = (List) new DirectFieldAccessor(advicedPoller).getPropertyValue("adviceChain"); + assertEquals(2, adviceChain.size()); + TestTransactionManager txManager = (TestTransactionManager) context.getBean("txManager"); + MessageChannel input = (MessageChannel) context.getBean("goodInputWithAdvice"); + PollableChannel output = (PollableChannel) context.getBean("output"); + assertEquals(0, txManager.getCommitCount()); + assertEquals(0, txManager.getRollbackCount()); + input.send(new GenericMessage("test")); + txManager.waitForCompletion(10000); + Message message = output.receive(0); + assertNotNull(message); + assertEquals(1, txManager.getCommitCount()); + assertEquals(0, txManager.getRollbackCount()); + context.stop(); + } @Test public void transactionWithRollback() throws InterruptedException { @@ -157,4 +185,9 @@ public class PollingTransactionTests { context.stop(); } + public static class SampleAdvice implements MethodInterceptor { + public Object invoke(MethodInvocation invocation) throws Throwable { + return invocation.proceed(); + } + } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/transactionTests.xml b/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/transactionTests.xml index 845e32d3eb..cf3aa6bb20 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/transactionTests.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/dispatcher/transactionTests.xml @@ -1,46 +1,57 @@ - + http://www.springframework.org/schema/integration/spring-integration-2.0.xsd"> - + - + + + + + - + - - - - - - - - - - - - + + + + - + + + + + + + + + + + + + + + + + - - + + + diff --git a/spring-integration-core/template.mf b/spring-integration-core/template.mf index 221d881be6..e72f35ae1f 100644 --- a/spring-integration-core/template.mf +++ b/spring-integration-core/template.mf @@ -5,6 +5,7 @@ Bundle-ManifestVersion: 2 Import-Template: org.springframework.commons.*;version="[1.0.0, 2.0.0)";resolution:=optional, org.springframework.*;version="[3.0.3, 4.0.0)", + org.springframework.transaction;version="[3.0.3, 4.0.0)";resolution:=optional, org.apache.commons.logging;version="[1.1.1, 2.0.0)", org.aopalliance.*;version="[1.0.0, 2.0.0)", org.codehaus.jackson.*;version="[1.0.0, 2.0.0)";resolution:=optional,