Spring Integration provides two adapters for accepting JMS messages:
JmsPollingSourceAdapter
and JmsMessageDrivenSourceAdapter
.
The former uses Spring's JmsTemplate
to receive based on a polling period. The latter
configures and delegates to an instance of Spring's DefaultMessageListenerContainer
.
The JmsPollingSourceAdapter
requires a reference to either a single
JmsTemplate
instance or both ConnectionFactory
and
Destination
(a 'destinationName' can be provided in place of the 'destination'
reference). The JmsPollingSourceAdapter
also requires a 'channel' property that should be
a reference to a MessageChannel
instance. The adapter accepts additional
properties such as: period, initialDelay, maxMessagesPerTask, and sendTimeout. The following example defines a
JMS source adapter that polls every 5 seconds and then sends to the "exampleChannel":
<bean class="org.springframework.integration.adapter.jms.JmsPollingSourceAdapter"> <constructor-arg ref="jmsTemplate"/> <property name="channel" ref="exampleChannel"/> <property name="period" value="5000"/> </bean>
In most cases, Spring Integration's message-driven JMS adapter is more appropriate since it delegates to a
MessageListener
container and supports dynamically adjusting concurrent
consumers. The JmsMessageDrivenSourceAdapter
requires references to a
MessageChannel
, a ConnectionFactory
, and a
Destination
(or 'destinationName'). The following example defines a JMS
message-driven source adapter that receives from the JMS queue called "exampleQueue" and then sends to
the Spring Integration channel named "exampleChannel":
<bean class="org.springframework.integration.adapter.jms.JmsMessageDrivenSourceAdapter"> <property name="connectionFactory" ref="connectionFactory"/> <property name="destinationName" value="exampleQueue"/> <property name="channel" ref="exampleChannel"/> </bean>
For both source adapter types, Spring's MessageConverter
strategy is used to
convert the JMS message into a plain Java object, and then Spring Integration's
MessageMapper
strategy is used to convert from the plain object to a
Message
.
The JmsTargetAdapter
is a MessageHandler
implementation
that is capable of mapping Spring Integration Messages
to JMS messages and then
sending to a JMS destination. It requires either a 'jmsTemplate' reference or both 'connectionFactory' and
'destination' references. In the section called “Configuring Channel Adapters”, you will see how to configure a JMS target
adapter with Spring Integration's namespace support.