Save This Page
Home » spring-framework-2.5.5-with-dependencies » org.springframework » jms » listener » [javadoc | source]
org.springframework.jms.listener
public class: SimpleMessageListenerContainer [javadoc | source]
java.lang.Object
   org.springframework.jms.support.JmsAccessor
      org.springframework.jms.support.destination.JmsDestinationAccessor
         org.springframework.jms.listener.AbstractJmsListeningContainer
            org.springframework.jms.listener.AbstractMessageListenerContainer
               org.springframework.jms.listener.SimpleMessageListenerContainer

All Implemented Interfaces:
    javax.jms.ExceptionListener, DisposableBean, BeanNameAware, Lifecycle, InitializingBean

Direct Known Subclasses:
    SimpleMessageListenerContainer102

Message listener container that uses the plain JMS client API's MessageConsumer.setMessageListener() method to create concurrent MessageConsumers for the specified listeners.

NOTE: This class requires a JMS 1.1+ provider, because it builds on the domain-independent API. Use the SimpleMessageListenerContainer102 subclass for a JMS 1.0.2 provider, e.g. when running on a J2EE 1.3 server.

This is the simplest form of a message listener container. It creates a fixed number of JMS Sessions to invoke the listener, not allowing for dynamic adaptation to runtime demands. Its main advantage is its low level of complexity and the minimum requirements on the JMS provider: Not even the ServerSessionPool facility is required.

See the AbstractMessageListenerContainer javadoc for details on acknowledge modes and transaction options.

For a different style of MessageListener handling, through looped MessageConsumer.receive() calls that also allow for transactional reception of messages (registering them with XA transactions), see DefaultMessageListenerContainer .

Fields inherited from org.springframework.jms.listener.AbstractJmsListeningContainer:
sharedConnectionMonitor,  lifecycleMonitor
Fields inherited from org.springframework.jms.support.JmsAccessor:
logger
Method from org.springframework.jms.listener.SimpleMessageListenerContainer Summary:
createConsumer,   createListenerConsumer,   doInitialize,   doShutdown,   doStart,   initializeConsumers,   isPubSubNoLocal,   onException,   prepareSharedConnection,   processMessage,   setConcurrentConsumers,   setPubSubNoLocal,   setTaskExecutor,   sharedConnectionEnabled,   validateConfiguration
Methods from org.springframework.jms.listener.AbstractMessageListenerContainer:
checkMessageListener,   commitIfNecessary,   doExecuteListener,   doInvokeListener,   doInvokeListener,   executeListener,   getDestination,   getDestinationName,   getDurableSubscriptionName,   getExceptionListener,   getMessageListener,   getMessageSelector,   handleListenerException,   invokeExceptionListener,   invokeListener,   isAcceptMessagesWhileStopping,   isExposeListenerSession,   isSessionLocallyTransacted,   isSubscriptionDurable,   rollbackIfNecessary,   rollbackOnExceptionIfNecessary,   setAcceptMessagesWhileStopping,   setDestination,   setDestinationName,   setDurableSubscriptionName,   setExceptionListener,   setExposeListenerSession,   setMessageListener,   setMessageSelector,   setSubscriptionDurable,   validateConfiguration
Methods from org.springframework.jms.listener.AbstractJmsListeningContainer:
afterPropertiesSet,   createSharedConnection,   destroy,   doInitialize,   doRescheduleTask,   doShutdown,   doStart,   doStop,   establishSharedConnection,   getBeanName,   getClientId,   getPausedTaskCount,   getSharedConnection,   initialize,   isActive,   isRunning,   logRejectedTask,   prepareSharedConnection,   refreshSharedConnection,   rescheduleTaskIfNecessary,   resumePausedTasks,   runningAllowed,   setAutoStartup,   setBeanName,   setClientId,   sharedConnectionEnabled,   shutdown,   start,   startSharedConnection,   stop,   stopSharedConnection,   validateConfiguration,   waitWhileNotRunning
Methods from org.springframework.jms.support.destination.JmsDestinationAccessor:
getDestinationResolver,   isPubSubDomain,   resolveDestinationName,   setDestinationResolver,   setPubSubDomain
Methods from org.springframework.jms.support.JmsAccessor:
afterPropertiesSet,   convertJmsAccessException,   createConnection,   createSession,   getConnectionFactory,   getSessionAcknowledgeMode,   isClientAcknowledge,   isSessionTransacted,   setConnectionFactory,   setSessionAcknowledgeMode,   setSessionAcknowledgeModeName,   setSessionTransacted
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.springframework.jms.listener.SimpleMessageListenerContainer Detail:
 protected MessageConsumer createConsumer(Session session,
    Destination destination) throws JMSException 
    Create a JMS MessageConsumer for the given Session and Destination.

    This implementation uses JMS 1.1 API.

 protected MessageConsumer createListenerConsumer(Session session) throws JMSException 
    Create a MessageConsumer for the given JMS Session, registering a MessageListener for the specified listener.
 protected  void doInitialize() throws JMSException 
    Creates the specified number of concurrent consumers, in the form of a JMS Session plus associated MessageConsumer.
 protected  void doShutdown() throws JMSException 
    Destroy the registered JMS Sessions and associated MessageConsumers.
 protected  void doStart() throws JMSException 
    Re-initializes this container's JMS message consumers, if not initialized already.
 protected  void initializeConsumers() throws JMSException 
    Initialize the JMS Sessions and MessageConsumers for this container.
 protected boolean isPubSubNoLocal() 
    Return whether to inhibit the delivery of messages published by its own connection.
 public  void onException(JMSException ex) 
    JMS ExceptionListener implementation, invoked by the JMS provider in case of connection failures. Re-initializes this listener container's shared connection and its sessions and consumers.
 protected  void prepareSharedConnection(Connection connection) throws JMSException 
    Registers this listener container as JMS ExceptionListener on the shared connection.
 protected  void processMessage(Message message,
    Session session) 
    Process a message received from the provider.

    Executes the listener, exposing the current JMS Session as thread-bound resource (if "exposeListenerSession" is "true").

 public  void setConcurrentConsumers(int concurrentConsumers) 
    Specify the number of concurrent consumers to create. Default is 1.

    Raising the number of concurrent consumers is recommendable in order to scale the consumption of messages coming in from a queue. However, note that any ordering guarantees are lost once multiple consumers are registered. In general, stick with 1 consumer for low-volume queues.

    Do not raise the number of concurrent consumers for a topic. This would lead to concurrent consumption of the same message, which is hardly ever desirable.

 public  void setPubSubNoLocal(boolean pubSubNoLocal) 
    Set whether to inhibit the delivery of messages published by its own connection. Default is "false".
 public  void setTaskExecutor(TaskExecutor taskExecutor) 
    Set the Spring TaskExecutor to use for executing the listener once a message has been received by the provider.

    Default is none, that is, to run in the JMS provider's own receive thread, blocking the provider's receive endpoint while executing the listener.

    Specify a TaskExecutor for executing the listener in a different thread, rather than blocking the JMS provider, usually integrating with an existing thread pool. This allows to keep the number of concurrent consumers low (1) while still processing messages concurrently (decoupled from receiving!).

    NOTE: Specifying a TaskExecutor for listener execution affects acknowledgement semantics. Messages will then always get acknowledged before listener execution, with the underlying Session immediately reused for receiving the next message. Using this in combination with a transacted session or with client acknowledgement will lead to unspecified results!

    NOTE: Concurrent listener execution via a TaskExecutor will lead to concurrent processing of messages that have been received by the same underlying Session. As a consequence, it is not recommended to use this setting with a SessionAwareMessageListener , at least not if the latter performs actual work on the given Session. A standard javax.jms.MessageListener will work fine, in general.

 protected final boolean sharedConnectionEnabled() 
    Always use a shared JMS Connection.
 protected  void validateConfiguration()