From e02c23eea47ffe2920dfb4439568ea3e55723666 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 6 Nov 2014 14:29:29 +0100 Subject: [PATCH] Straight JmsMessagingTemplate setup based on JMS ConnectionFactory Issue: SPR-12413 --- .../jms/core/JmsMessagingTemplate.java | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java index e66b685d04e..467c0812e52 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java @@ -17,6 +17,7 @@ package org.springframework.jms.core; import java.util.Map; +import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Session; @@ -39,6 +40,7 @@ import org.springframework.util.Assert; * An implementation of {@link JmsMessageOperations}. * * @author Stephane Nicoll + * @author Juergen Hoeller * @since 4.1 */ public class JmsMessagingTemplate extends AbstractMessagingTemplate @@ -53,13 +55,22 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate /** * Constructor for use with bean properties. - * Requires {@link #setJmsTemplate} to be called. + * Requires {@link #setConnectionFactory} or {@link #setJmsTemplate} to be called. */ public JmsMessagingTemplate() { } /** - * Create an instance with the {@link JmsTemplate} to use. + * Create a {@code JmsMessagingTemplate} instance with the JMS {@link ConnectionFactory} + * to use, implicitly building a {@link JmsTemplate} based on it. + * @since 4.1.2 + */ + public JmsMessagingTemplate(ConnectionFactory connectionFactory) { + this.jmsTemplate = new JmsTemplate(connectionFactory); + } + + /** + * Create a {@code JmsMessagingTemplate} instance with the {@link JmsTemplate} to use. */ public JmsMessagingTemplate(JmsTemplate jmsTemplate) { Assert.notNull("JmsTemplate must not be null"); @@ -67,6 +78,27 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate } + /** + * Set the ConnectionFactory to use for the underlying {@link JmsTemplate}. + * @since 4.1.2 + */ + public void setConnectionFactory(ConnectionFactory connectionFactory) { + if (this.jmsTemplate != null) { + this.jmsTemplate.setConnectionFactory(connectionFactory); + } + else { + this.jmsTemplate = new JmsTemplate(connectionFactory); + } + } + + /** + * Return the ConnectionFactory that the underlying {@link JmsTemplate} uses. + * @since 4.1.2 + */ + public ConnectionFactory getConnectionFactory() { + return (this.jmsTemplate != null ? this.jmsTemplate.getConnectionFactory() : null); + } + /** * Set the {@link JmsTemplate} to use. */ @@ -92,6 +124,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate * @see org.springframework.jms.support.converter.MessagingMessageConverter */ public void setJmsMessageConverter(MessageConverter jmsMessageConverter) { + Assert.notNull(jmsMessageConverter, "MessageConverter must not be null"); this.jmsMessageConverter = jmsMessageConverter; } @@ -122,8 +155,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate @Override public void afterPropertiesSet() { - Assert.notNull(getJmsTemplate(), "Property 'jmsTemplate' is required"); - Assert.notNull(getJmsMessageConverter(), "Property 'jmsMessageConverter' is required"); + Assert.notNull(getJmsTemplate(), "Property 'connectionFactory' or 'jmsTemplate' is required"); }