org.springframework.integration.jms
Class JmsOutboundGateway

java.lang.Object
  extended by org.springframework.integration.handler.AbstractMessageHandler
      extended by org.springframework.integration.handler.AbstractReplyProducingMessageHandler
          extended by org.springframework.integration.jms.JmsOutboundGateway
All Implemented Interfaces:
org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.InitializingBean, org.springframework.core.Ordered, MessageHandler

public class JmsOutboundGateway
extends AbstractReplyProducingMessageHandler
implements org.springframework.beans.factory.InitializingBean

An outbound Messaging Gateway for request/reply JMS.

Author:
Mark Fisher, Arjen Poutsma, Juergen Hoeller

Field Summary
 
Fields inherited from class org.springframework.integration.handler.AbstractReplyProducingMessageHandler
DEFAULT_SEND_TIMEOUT
 
Fields inherited from class org.springframework.integration.handler.AbstractMessageHandler
logger
 
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
 
Constructor Summary
JmsOutboundGateway()
           
 
Method Summary
 void afterPropertiesSet()
           
protected  javax.jms.Connection createConnection()
          Create a new JMS Connection for this JMS gateway, ideally a javax.jms.QueueConnection.
protected  javax.jms.Session createSession(javax.jms.Connection connection)
          Create a new JMS Session for this JMS gateway, ideally a javax.jms.QueueSession.
protected  void handleRequestMessage(Message<?> message, ReplyMessageHolder replyMessageHolder)
           
 void setConnectionFactory(javax.jms.ConnectionFactory connectionFactory)
          Set the JMS ConnectionFactory that this gateway should use.
 void setDeliveryMode(int deliveryMode)
          Specify the JMS DeliveryMode to use when sending request Messages.
 void setDestinationResolver(org.springframework.jms.support.destination.DestinationResolver destinationResolver)
          Provide the DestinationResolver to use when resolving either a 'requestDestinationName' or 'replyDestinationName' value.
 void setExtractReplyPayload(boolean extractReplyPayload)
          This property will take effect if no custom MessageConverter has been provided to the setMessageConverter(MessageConverter) method.
 void setExtractRequestPayload(boolean extractRequestPayload)
          This property will take effect if no custom MessageConverter has been provided to the setMessageConverter(MessageConverter) method.
 void setHeaderMapper(JmsHeaderMapper headerMapper)
          Provide a JmsHeaderMapper implementation for mapping the Spring Integration Message Headers to/from JMS Message properties.
 void setMessageConverter(org.springframework.jms.support.converter.MessageConverter messageConverter)
          Provide a MessageConverter strategy to use for converting the Spring Integration request Message into a JMS Message and for converting the JMS reply Messages back into Spring Integration Messages.
 void setPriority(int priority)
          Specify the JMS priority to use when sending request Messages.
 void setPubSubDomain(boolean pubSubDomain)
          Specify whether the request destination is a Topic.
 void setReceiveTimeout(long receiveTimeout)
          Set the max timeout value for the MessageConsumer's receive call when waiting for a reply.
 void setReplyChannel(MessageChannel replyChannel)
          Specify the Spring Integration reply channel.
 void setReplyDestination(javax.jms.Destination replyDestination)
          Set the JMS Destination from which reply Messages should be received.
 void setReplyDestinationName(java.lang.String replyDestinationName)
          Set the name of the JMS Destination from which reply Messages should be received.
 void setRequestDestination(javax.jms.Destination requestDestination)
          Set the JMS Destination to which request Messages should be sent.
 void setRequestDestinationName(java.lang.String requestDestinationName)
          Set the name of the JMS Destination to which request Messages should be sent.
 void setTimeToLive(long timeToLive)
          Specify the timeToLive for each sent Message.
 
Methods inherited from class org.springframework.integration.handler.AbstractReplyProducingMessageHandler
getOutputChannel, handleMessageInternal, sendReplyMessage, setBeanFactory, setChannelResolver, setOutputChannel, setRequiresReply, setSendTimeout
 
Methods inherited from class org.springframework.integration.handler.AbstractMessageHandler
getOrder, handleMessage, setOrder
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JmsOutboundGateway

public JmsOutboundGateway()
Method Detail

setConnectionFactory

public void setConnectionFactory(javax.jms.ConnectionFactory connectionFactory)
Set the JMS ConnectionFactory that this gateway should use. This is a required property.


setRequestDestination

public void setRequestDestination(javax.jms.Destination requestDestination)
Set the JMS Destination to which request Messages should be sent. Either this or the 'requestDestinationName' property is required.


setRequestDestinationName

public void setRequestDestinationName(java.lang.String requestDestinationName)
Set the name of the JMS Destination to which request Messages should be sent. Either this or the 'requestDestination' property is required.


setReplyDestination

public void setReplyDestination(javax.jms.Destination replyDestination)
Set the JMS Destination from which reply Messages should be received. If none is provided, this gateway will create a TemporaryQueue per invocation.


setReplyDestinationName

public void setReplyDestinationName(java.lang.String replyDestinationName)
Set the name of the JMS Destination from which reply Messages should be received. If none is provided, this gateway will create a TemporaryQueue per invocation.


setDestinationResolver

public void setDestinationResolver(org.springframework.jms.support.destination.DestinationResolver destinationResolver)
Provide the DestinationResolver to use when resolving either a 'requestDestinationName' or 'replyDestinationName' value. The default is an instance of DynamicDestinationResolver.


setPubSubDomain

public void setPubSubDomain(boolean pubSubDomain)
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.

Parameters:
pubSubDomain - true if the request destination is a Topic

setReceiveTimeout

public void setReceiveTimeout(long receiveTimeout)
Set the max timeout value for the MessageConsumer's receive call when waiting for a reply. The default value is 5 seconds.


setDeliveryMode

public void setDeliveryMode(int deliveryMode)
Specify the JMS DeliveryMode to use when sending request Messages.


setPriority

public void setPriority(int priority)
Specify the JMS priority to use when sending request Messages. The value should be within the range of 0-9.


setTimeToLive

public void setTimeToLive(long timeToLive)
Specify the timeToLive for each sent Message. The default value indicates no expiration.


setMessageConverter

public void setMessageConverter(org.springframework.jms.support.converter.MessageConverter messageConverter)
Provide a MessageConverter strategy to use for converting the Spring Integration request Message into a JMS Message and for converting the JMS reply Messages back into Spring Integration Messages.

The default is a HeaderMappingMessageConverter that delegates to a SimpleMessageConverter.


setHeaderMapper

public void setHeaderMapper(JmsHeaderMapper headerMapper)
Provide a JmsHeaderMapper implementation for mapping the Spring Integration Message Headers to/from JMS Message properties.

This property will be ignored if a MessageConverter is provided to the setMessageConverter(MessageConverter) method. However, you may provide your own implementation of the delegating HeaderMappingMessageConverter implementation.


setExtractRequestPayload

public void setExtractRequestPayload(boolean extractRequestPayload)
This property will take effect if no custom MessageConverter has been provided to the setMessageConverter(MessageConverter) method. In that case, a HeaderMappingMessageConverter will be used by default, and this value will be passed along to that converter's 'extractIntegrationMessagePayload' property.

See Also:
HeaderMappingMessageConverter.setExtractIntegrationMessagePayload(boolean)

setExtractReplyPayload

public void setExtractReplyPayload(boolean extractReplyPayload)
This property will take effect if no custom MessageConverter has been provided to the setMessageConverter(MessageConverter) method. In that case, a HeaderMappingMessageConverter will be used by default, and this value will be passed along to that converter's 'extractJmsMessageBody' property.

See Also:
HeaderMappingMessageConverter.setExtractJmsMessageBody(boolean)

setReplyChannel

public void setReplyChannel(MessageChannel replyChannel)
Specify the Spring Integration reply channel. If this property is not set the gateway will check for a 'replyChannel' header on the request.


afterPropertiesSet

public void afterPropertiesSet()
Specified by:
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean

handleRequestMessage

protected void handleRequestMessage(Message<?> message,
                                    ReplyMessageHolder replyMessageHolder)
Specified by:
handleRequestMessage in class AbstractReplyProducingMessageHandler

createConnection

protected javax.jms.Connection createConnection()
                                         throws javax.jms.JMSException
Create a new JMS Connection for this JMS gateway, ideally a javax.jms.QueueConnection.

The default implementation uses the javax.jms.QueueConnectionFactory API if available, falling back to a standard JMS 1.1 ConnectionFactory otherwise. This is necessary for working with generic JMS 1.1 connection pools (such as ActiveMQ's org.apache.activemq.pool.PooledConnectionFactory).

Throws:
javax.jms.JMSException

createSession

protected javax.jms.Session createSession(javax.jms.Connection connection)
                                   throws javax.jms.JMSException
Create a new JMS Session for this JMS gateway, ideally a javax.jms.QueueSession.

The default implementation uses the javax.jms.QueueConnection API if available, falling back to a standard JMS 1.1 Connection otherwise. This is necessary for working with generic JMS 1.1 connection pools (such as ActiveMQ's org.apache.activemq.pool.PooledConnectionFactory).

Throws:
javax.jms.JMSException