diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd
index 44829fb030..ecf7553937 100644
--- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd
+++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/config/spring-integration-adapters-1.0.xsd
@@ -92,6 +92,7 @@
+
diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/jms/JmsGateway.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/jms/JmsGateway.java
index 460836fea8..5faf15068a 100644
--- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/jms/JmsGateway.java
+++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/jms/JmsGateway.java
@@ -30,6 +30,7 @@ import org.springframework.jms.listener.DefaultMessageListenerContainer;
import org.springframework.jms.listener.adapter.MessageListenerAdapter;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.SimpleMessageConverter;
+import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.util.Assert;
/**
@@ -51,6 +52,8 @@ public class JmsGateway extends SimpleMessagingGateway implements Lifecycle, Dis
private volatile TaskExecutor taskExecutor;
+ private volatile PlatformTransactionManager transactionManager;
+
private volatile boolean sessionTransacted;
private volatile int sessionAcknowledgeMode = Session.AUTO_ACKNOWLEDGE;
@@ -91,6 +94,10 @@ public class JmsGateway extends SimpleMessagingGateway implements Lifecycle, Dis
this.taskExecutor = taskExecutor;
}
+ public void setTransactionManager(PlatformTransactionManager transactionManager) {
+ this.transactionManager = transactionManager;
+ }
+
public void setSessionTransacted(boolean sessionTransacted) {
this.sessionTransacted = sessionTransacted;
}
@@ -134,6 +141,7 @@ public class JmsGateway extends SimpleMessagingGateway implements Lifecycle, Dis
if (this.destinationName != null) {
dmlc.setDestinationName(this.destinationName);
}
+ dmlc.setTransactionManager(this.transactionManager);
dmlc.setSessionTransacted(this.sessionTransacted);
dmlc.setSessionAcknowledgeMode(this.sessionAcknowledgeMode);
dmlc.setAutoStartup(false);
diff --git a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/jms/config/JmsGatewayParser.java b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/jms/config/JmsGatewayParser.java
index 3f925490d0..46284419bd 100644
--- a/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/jms/config/JmsGatewayParser.java
+++ b/org.springframework.integration.adapter/src/main/java/org/springframework/integration/adapter/jms/config/JmsGatewayParser.java
@@ -86,6 +86,10 @@ public class JmsGatewayParser extends AbstractSingleBeanDefinitionParser {
builder.addPropertyValue("sessionAcknowledgeMode", acknowledgeMode);
}
}
+ String transactionManager = element.getAttribute("transaction-manager");
+ if (StringUtils.hasText(transactionManager)) {
+ builder.addPropertyReference("transactionManager", transactionManager);
+ }
String requestChannel = element.getAttribute("request-channel");
if (StringUtils.hasText(requestChannel)) {
builder.addPropertyReference("requestChannel", requestChannel);
diff --git a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/jms/config/JmsGatewayParserTests.java b/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/jms/config/JmsGatewayParserTests.java
index 21565b63d9..8af87b66ce 100644
--- a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/jms/config/JmsGatewayParserTests.java
+++ b/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/jms/config/JmsGatewayParserTests.java
@@ -18,6 +18,7 @@ package org.springframework.integration.adapter.jms.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import org.junit.Test;
@@ -29,6 +30,7 @@ import org.springframework.integration.adapter.jms.JmsGateway;
import org.springframework.integration.channel.MessageChannel;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.message.Message;
+import org.springframework.jms.connection.JmsTransactionManager;
/**
* @author Mark Fisher
@@ -140,4 +142,25 @@ public class JmsGatewayParserTests {
context.stop();
}
+ @Test
+ public void testTransactionManagerIsNullByDefault() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsGatewayTransactionManagerTests.xml", this.getClass());
+ JmsGateway gateway = (JmsGateway) context.getBean("gatewayWithoutTransactionManager");
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
+ assertNull(accessor.getPropertyValue("transactionManager"));
+ }
+
+ @Test
+ public void testGatewayWithTransactionManagerReference() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsGatewayTransactionManagerTests.xml", this.getClass());
+ JmsGateway gateway = (JmsGateway) context.getBean("gatewayWithTransactionManager");
+ DirectFieldAccessor accessor = new DirectFieldAccessor(gateway);
+ Object txManager = accessor.getPropertyValue("transactionManager");
+ assertEquals(JmsTransactionManager.class, txManager.getClass());
+ assertEquals(context.getBean("txManager"), txManager);
+ assertEquals(context.getBean("testConnectionFactory"), ((JmsTransactionManager) txManager).getConnectionFactory());
+ }
+
}
diff --git a/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/jms/config/jmsGatewayTransactionManagerTests.xml b/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/jms/config/jmsGatewayTransactionManagerTests.xml
new file mode 100644
index 0000000000..dabe2ee604
--- /dev/null
+++ b/org.springframework.integration.adapter/src/test/java/org/springframework/integration/adapter/jms/config/jmsGatewayTransactionManagerTests.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+