diff --git a/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointParser.java b/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointParser.java
index b9ec0d79ee..1dc54971d0 100644
--- a/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointParser.java
+++ b/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointParser.java
@@ -56,7 +56,9 @@ public class JmsMessageDrivenEndpointParser extends AbstractSingleBeanDefinition
JmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE,
"destination-resolver", "transaction-manager",
"concurrent-consumers", "max-concurrent-consumers",
- "max-messages-per-task", "idle-task-execution-limit", "selector"
+ "max-messages-per-task", "selector",
+ "receive-timeout", "recovery-interval",
+ "idle-consumer-limit", "idle-task-execution-limit"
};
@@ -141,6 +143,9 @@ public class JmsMessageDrivenEndpointParser extends AbstractSingleBeanDefinition
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "concurrent-consumers");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "max-concurrent-consumers");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "max-messages-per-task");
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "receive-timeout");
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "recovery-interval");
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "idle-consumer-limit");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "idle-task-execution-limit");
builder.addPropertyValue("autoStartup", false);
return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry());
diff --git a/spring-integration-jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd b/spring-integration-jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd
index fa12d56026..732751df32 100644
--- a/spring-integration-jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd
+++ b/spring-integration-jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd
@@ -401,6 +401,9 @@
+
+
+
@@ -544,6 +547,9 @@
+
+
+
diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsInboundGatewayParserTests.java b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsInboundGatewayParserTests.java
index 2a858df9be..ae07536421 100644
--- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsInboundGatewayParserTests.java
+++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsInboundGatewayParserTests.java
@@ -236,6 +236,30 @@ public class JmsInboundGatewayParserTests {
gateway.stop();
}
+ @Test
+ public void testGatewayWithReceiveTimeout() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsGatewayWithContainerSettings.xml", this.getClass());
+ JmsMessageDrivenEndpoint gateway = (JmsMessageDrivenEndpoint) context.getBean("gatewayWithReceiveTimeout");
+ gateway.start();
+ AbstractMessageListenerContainer container = (AbstractMessageListenerContainer)
+ new DirectFieldAccessor(gateway).getPropertyValue("listenerContainer");
+ assertEquals(1111L, new DirectFieldAccessor(container).getPropertyValue("receiveTimeout"));
+ gateway.stop();
+ }
+
+ @Test
+ public void testGatewayWithRecoveryInterval() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsGatewayWithContainerSettings.xml", this.getClass());
+ JmsMessageDrivenEndpoint gateway = (JmsMessageDrivenEndpoint) context.getBean("gatewayWithRecoveryInterval");
+ gateway.start();
+ AbstractMessageListenerContainer container = (AbstractMessageListenerContainer)
+ new DirectFieldAccessor(gateway).getPropertyValue("listenerContainer");
+ assertEquals(2222L, new DirectFieldAccessor(container).getPropertyValue("recoveryInterval"));
+ gateway.stop();
+ }
+
@Test
public void testGatewayWithIdleTaskExecutionLimit() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
@@ -248,6 +272,18 @@ public class JmsInboundGatewayParserTests {
gateway.stop();
}
+ @Test
+ public void testGatewayWithIdleConsumerLimit() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsGatewayWithContainerSettings.xml", this.getClass());
+ JmsMessageDrivenEndpoint gateway = (JmsMessageDrivenEndpoint) context.getBean("gatewayWithIdleConsumerLimit");
+ gateway.start();
+ AbstractMessageListenerContainer container = (AbstractMessageListenerContainer)
+ new DirectFieldAccessor(gateway).getPropertyValue("listenerContainer");
+ assertEquals(33, new DirectFieldAccessor(container).getPropertyValue("idleConsumerLimit"));
+ gateway.stop();
+ }
+
@Test
public void testGatewayWithContainerReference() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenChannelAdapterParserTests.java b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenChannelAdapterParserTests.java
index d8438bd53b..3059a11aad 100644
--- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenChannelAdapterParserTests.java
+++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsMessageDrivenChannelAdapterParserTests.java
@@ -30,6 +30,7 @@ import org.springframework.integration.core.PollableChannel;
import org.springframework.integration.history.MessageHistory;
import org.springframework.integration.jms.JmsMessageDrivenEndpoint;
import org.springframework.integration.test.util.TestUtils;
+import org.springframework.jms.listener.AbstractMessageListenerContainer;
import org.springframework.jms.support.destination.JmsDestinationAccessor;
/**
@@ -65,4 +66,52 @@ public class JmsMessageDrivenChannelAdapterParserTests {
assertEquals(Boolean.TRUE, container.isPubSubDomain());
}
+ @Test
+ public void testGatewayWithReceiveTimeout() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsInboundWithContainerSettings.xml", this.getClass());
+ JmsMessageDrivenEndpoint gateway = (JmsMessageDrivenEndpoint) context.getBean("adapterWithReceiveTimeout");
+ gateway.start();
+ AbstractMessageListenerContainer container = (AbstractMessageListenerContainer)
+ new DirectFieldAccessor(gateway).getPropertyValue("listenerContainer");
+ assertEquals(1111L, new DirectFieldAccessor(container).getPropertyValue("receiveTimeout"));
+ gateway.stop();
+ }
+
+ @Test
+ public void testGatewayWithRecoveryInterval() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsInboundWithContainerSettings.xml", this.getClass());
+ JmsMessageDrivenEndpoint gateway = (JmsMessageDrivenEndpoint) context.getBean("adapterWithRecoveryInterval");
+ gateway.start();
+ AbstractMessageListenerContainer container = (AbstractMessageListenerContainer)
+ new DirectFieldAccessor(gateway).getPropertyValue("listenerContainer");
+ assertEquals(2222L, new DirectFieldAccessor(container).getPropertyValue("recoveryInterval"));
+ gateway.stop();
+ }
+
+ @Test
+ public void testGatewayWithIdleTaskExecutionLimit() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsInboundWithContainerSettings.xml", this.getClass());
+ JmsMessageDrivenEndpoint gateway = (JmsMessageDrivenEndpoint) context.getBean("adapterWithIdleTaskExecutionLimit");
+ gateway.start();
+ AbstractMessageListenerContainer container = (AbstractMessageListenerContainer)
+ new DirectFieldAccessor(gateway).getPropertyValue("listenerContainer");
+ assertEquals(7, new DirectFieldAccessor(container).getPropertyValue("idleTaskExecutionLimit"));
+ gateway.stop();
+ }
+
+ @Test
+ public void testGatewayWithIdleConsumerLimit() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsInboundWithContainerSettings.xml", this.getClass());
+ JmsMessageDrivenEndpoint gateway = (JmsMessageDrivenEndpoint) context.getBean("adapterWithIdleConsumerLimit");
+ gateway.start();
+ AbstractMessageListenerContainer container = (AbstractMessageListenerContainer)
+ new DirectFieldAccessor(gateway).getPropertyValue("listenerContainer");
+ assertEquals(33, new DirectFieldAccessor(container).getPropertyValue("idleConsumerLimit"));
+ gateway.stop();
+ }
+
}
diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsGatewayWithContainerSettings.xml b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsGatewayWithContainerSettings.xml
index cc8e17c82a..7c65299df3 100644
--- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsGatewayWithContainerSettings.xml
+++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsGatewayWithContainerSettings.xml
@@ -35,6 +35,20 @@
request-pub-sub-domain="false"
max-messages-per-task="99"/>
+
+
+
+
+
+
diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithContainerSettings.xml b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithContainerSettings.xml
new file mode 100644
index 0000000000..7c119b409b
--- /dev/null
+++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithContainerSettings.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+