diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsOutboundGateway.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsOutboundGateway.java index 053cf06e9b..4c9819f29f 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsOutboundGateway.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsOutboundGateway.java @@ -27,6 +27,7 @@ import javax.jms.QueueConnectionFactory; import javax.jms.Session; import javax.jms.TemporaryQueue; import javax.jms.TemporaryTopic; +import javax.jms.Topic; import org.springframework.beans.factory.InitializingBean; import org.springframework.integration.core.Message; @@ -55,6 +56,8 @@ public class JmsOutboundGateway extends AbstractReplyProducingMessageHandler imp private volatile Destination replyDestination; + private volatile boolean pubSubDomain; + private volatile long receiveTimeout = 5000; private volatile int deliveryMode = javax.jms.Message.DEFAULT_DELIVERY_MODE; @@ -91,6 +94,9 @@ public class JmsOutboundGateway extends AbstractReplyProducingMessageHandler imp * This is a required property. */ public void setRequestDestination(Destination requestDestination) { + if (requestDestination instanceof Topic) { + this.pubSubDomain = true; + } this.requestDestination = requestDestination; } @@ -102,6 +108,17 @@ public class JmsOutboundGateway extends AbstractReplyProducingMessageHandler imp this.replyDestination = replyDestination; } + /** + * Specify whether the request destination is a Topic. This value is + * necessary when providing a destination name for a Topic rather than + * a destination reference. + * + * @param pubSubDomain true if the request destination is a Topic + */ + public void setPubSubDomain(boolean pubSubDomain) { + this.pubSubDomain = pubSubDomain; + } + /** * Set the max timeout value for the MessageConsumer's receive call when * waiting for a reply. The default value is 5 seconds. @@ -278,12 +295,10 @@ public class JmsOutboundGateway extends AbstractReplyProducingMessageHandler imp */ protected Connection createConnection() throws JMSException { ConnectionFactory cf = this.connectionFactory; - if (cf instanceof QueueConnectionFactory) { + if (!this.pubSubDomain && cf instanceof QueueConnectionFactory) { return ((QueueConnectionFactory) cf).createQueueConnection(); } - else { - return cf.createConnection(); - } + return cf.createConnection(); } /** @@ -296,12 +311,10 @@ public class JmsOutboundGateway extends AbstractReplyProducingMessageHandler imp * (such as ActiveMQ's org.apache.activemq.pool.PooledConnectionFactory). */ protected Session createSession(Connection connection) throws JMSException { - if (connection instanceof QueueConnection) { + if (!this.pubSubDomain && connection instanceof QueueConnection) { return ((QueueConnection) connection).createQueueSession(false, Session.AUTO_ACKNOWLEDGE); } - else { - return connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - } + return connection.createSession(false, Session.AUTO_ACKNOWLEDGE); } }