INT-1793 added a 'receive-timeout' attribute to the JMS inbound-channel-adapter element

This commit is contained in:
Mark Fisher
2011-02-09 19:11:28 -06:00
parent cae35083e3
commit 034994ecb3
4 changed files with 54 additions and 2 deletions

View File

@@ -57,7 +57,8 @@ abstract class JmsAdapterParserUtils {
private static final String[] JMS_TEMPLATE_ATTRIBUTES = {
"connection-factory", "message-converter", "destination-resolver", "pub-sub-domain",
"time-to-live", "priority", "delivery-persistent", "explicit-qos-enabled", "acknowledge"
"time-to-live", "priority", "delivery-persistent", "explicit-qos-enabled", "acknowledge",
"receive-timeout"
};
@@ -123,8 +124,9 @@ abstract class JmsAdapterParserUtils {
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "priority");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "delivery-persistent");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "explicit-qos-enabled");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "receive-timeout");
Integer acknowledgeMode = parseAcknowledgeMode(element, parserContext);
if (acknowledgeMode != null){
if (acknowledgeMode != null) {
builder.addPropertyValue("sessionAcknowledgeMode", acknowledgeMode);
}

View File

@@ -473,6 +473,14 @@
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="extract-payload" type="xsd:string" default="true"/>
<xsd:attribute name="receive-timeout" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
Timeout for receive calls on the template.
NOTE: for JmsTemplate, 0 means indefinite while -1 means no-wait.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="jms-template" type="xsd:string">
<xsd:annotation>
<xsd:appinfo>

View File

@@ -151,6 +151,15 @@ public class JmsInboundChannelAdapterParserTests {
assertEquals("test [with selector: TestProperty = 'foo']", message.getPayload());
}
@Test
public void pollingAdapterWithReceiveTimeout() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"jmsInboundWithReceiveTimeout.xml", this.getClass());
JmsTemplate jmsTemplate =
TestUtils.getPropertyValue(context.getBean("adapter"), "source.jmsTemplate", JmsTemplate.class);
assertEquals(99, jmsTemplate.getReceiveTimeout());
}
@Test
public void pollingAdapterWithMessageConverter() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(

View File

@@ -0,0 +1,33 @@
<?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:integration="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:inbound-channel-adapter id="adapter" destination-name="test" receive-timeout="99" channel="output"/>
<integration:channel id="output">
<integration:queue capacity="1"/>
</integration:channel>
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<constructor-arg>
<bean class="org.springframework.integration.jms.StubConnection">
<constructor-arg value="test"/>
</bean>
</constructor-arg>
</bean>
<bean id="testConverter" class="org.springframework.integration.jms.config.TestMessageConverter"/>
<integration:poller id="poller" default="true">
<integration:interval-trigger interval="500"/>
</integration:poller>
</beans>