Sending a Message
The JmsTemplate contains many convenience methods to send a message. Send
methods specify the destination by using a jakarta.jms.Destination object, and others
specify the destination by using a String in a JNDI lookup. The send method
that takes no destination argument uses the default destination.
The following example uses the MessageCreator callback to create a text message from the
supplied Session object:
import jakarta.jms.ConnectionFactory;
import jakarta.jms.JMSException;
import jakarta.jms.Message;
import jakarta.jms.Queue;
import jakarta.jms.Session;
import org.springframework.jms.core.MessageCreator;
import org.springframework.jms.core.JmsTemplate;
public class JmsQueueSender {
private JmsTemplate jmsTemplate;
private Queue queue;
public void setConnectionFactory(ConnectionFactory cf) {
this.jmsTemplate = new JmsTemplate(cf);
}
public void setQueue(Queue queue) {
this.queue = queue;
}
public void simpleSend() {
this.jmsTemplate.send(this.queue, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("hello queue world");
}
});
}
}
In the preceding example, the JmsTemplate is constructed by passing a reference to a
ConnectionFactory. As an alternative, a zero-argument constructor and
connectionFactory is provided and can be used for constructing the instance in
JavaBean style (using a BeanFactory or plain Java code). Alternatively, consider
deriving from Spring’s JmsGatewaySupport convenience base class, which provides
pre-built bean properties for JMS configuration.
The send(String destinationName, MessageCreator creator) method lets you send a
message by using the string name of the destination. If these names are registered in JNDI,
you should set the destinationResolver property of the template to an instance of
JndiDestinationResolver.
If you created the JmsTemplate and specified a default destination, the
send(MessageCreator c) sends a message to that destination.
Using JMS Message Converters
To facilitate the sending of domain model objects, the JmsTemplate has
various send methods that take a Java object as an argument for a message’s data
content. The overloaded methods convertAndSend() and receiveAndConvert() methods in
JmsTemplate delegate the conversion process to an instance of the MessageConverter
interface. This interface defines a simple contract to conve