INT-1586 added 'receive-timeout', 'recovery-interval', and 'idle-consumer-limit' attributes

This commit is contained in:
Mark Fisher
2010-11-11 09:31:38 -05:00
parent a7eddb14e5
commit 35c767a93b
6 changed files with 163 additions and 1 deletions

View File

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

View File

@@ -401,6 +401,9 @@
<xsd:attribute name="concurrent-consumers" type="xsd:string"/>
<xsd:attribute name="max-concurrent-consumers" type="xsd:string"/>
<xsd:attribute name="max-messages-per-task" type="xsd:string"/>
<xsd:attribute name="receive-timeout" type="xsd:string"/>
<xsd:attribute name="recovery-interval" type="xsd:string"/>
<xsd:attribute name="idle-consumer-limit" type="xsd:string"/>
<xsd:attribute name="idle-task-execution-limit" type="xsd:string"/>
</xsd:extension>
</xsd:complexContent>
@@ -544,6 +547,9 @@
<xsd:attribute name="concurrent-consumers" type="xsd:string"/>
<xsd:attribute name="max-concurrent-consumers" type="xsd:string"/>
<xsd:attribute name="max-messages-per-task" type="xsd:string"/>
<xsd:attribute name="receive-timeout" type="xsd:string"/>
<xsd:attribute name="recovery-interval" type="xsd:string"/>
<xsd:attribute name="idle-consumer-limit" type="xsd:string"/>
<xsd:attribute name="idle-task-execution-limit" type="xsd:string"/>
<xsd:attribute name="reply-time-to-live" type="xsd:string"/>
<xsd:attribute name="reply-priority" type="xsd:string"/>

View File

@@ -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(

View File

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

View File

@@ -35,6 +35,20 @@
request-pub-sub-domain="false"
max-messages-per-task="99"/>
<jms:inbound-gateway id="gatewayWithReceiveTimeout"
connection-factory="testConnectionFactory"
request-channel="requestChannel"
request-destination-name="testTopic"
request-pub-sub-domain="true"
receive-timeout="1111"/>
<jms:inbound-gateway id="gatewayWithRecoveryInterval"
connection-factory="testConnectionFactory"
request-channel="requestChannel"
request-destination-name="testTopic"
request-pub-sub-domain="true"
recovery-interval="2222"/>
<jms:inbound-gateway id="gatewayWithIdleTaskExecutionLimit"
connection-factory="testConnectionFactory"
request-channel="requestChannel"
@@ -42,6 +56,13 @@
request-pub-sub-domain="true"
idle-task-execution-limit="7"/>
<jms:inbound-gateway id="gatewayWithIdleConsumerLimit"
connection-factory="testConnectionFactory"
request-channel="requestChannel"
request-destination-name="testTopic"
request-pub-sub-domain="true"
idle-consumer-limit="33"/>
<bean id="testConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<constructor-arg>
<bean class="org.springframework.integration.jms.StubConnection">

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:si="http://www.springframework.org/schema/integration"
xmlns:jms="http://www.springframework.org/schema/integration/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/jms
http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd">
<jms:message-driven-channel-adapter id="adapterWithReceiveTimeout"
connection-factory="testConnectionFactory"
destination-name="testQueue"
receive-timeout="1111"
auto-startup="false"/>
<jms:message-driven-channel-adapter id="adapterWithRecoveryInterval"
connection-factory="testConnectionFactory"
destination-name="testQueue"
recovery-interval="2222"
auto-startup="false"/>
<jms:message-driven-channel-adapter id="adapterWithIdleTaskExecutionLimit"
connection-factory="testConnectionFactory"
destination-name="testQueue"
idle-task-execution-limit="7"
auto-startup="false"/>
<jms:message-driven-channel-adapter id="adapterWithIdleConsumerLimit"
connection-factory="testConnectionFactory"
destination-name="testQueue"
idle-consumer-limit="33"
auto-startup="false"/>
<bean id="testConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<constructor-arg>
<bean class="org.springframework.integration.jms.StubConnection">
<constructor-arg value="message-driven-test"/>
</bean>
</constructor-arg>
</bean>
</beans>