Spring provides a JMS integration framework that simplifies the use of the JMS API much like Spring's integration does for the JDBC API.
JMS can be roughly divided into two areas of functionality, namely
the production and consumption of messages. The
JmsTemplate
class is used for message production
and synchronous message reception. For asynchronous reception similar to
Java EE's message-driven bean style, Spring provides a number of message
listener containers that are used to create Message-Driven POJOs
(MDPs).
The package org.springframework.jms.core
provides
the core functionality for using JMS. It contains JMS template classes
that simplifies the use of the JMS by handling the creation and release of
resources, much like the JdbcTemplate
does for
JDBC. The design principle common to Spring template classes is to provide
helper methods to perform common operations and for more sophisticated
usage, delegate the essence of the processing task to user implemented
callback interfaces. The JMS template follows the same design. The classes
offer various convenience methods for the sending of messages, consuming a
message synchronously, and exposing the JMS session and message producer
to the user.
The package org.springframework.jms.support
provides JMSException
translation functionality.
The translation converts the checked JMSException
hierarchy to a mirrored hierarchy of unchecked exceptions. If there are
any provider specific subclasses of the checked
javax.jms.JMSException
, this exception is wrapped
in the unchecked UncategorizedJmsException
.
The package
org.springframework.jms.support.converter
provides a
MessageConverter
abstraction to convert
between Java objects and JMS messages.
The package
org.springframework.jms.support.destination
provides
various strategies for managing JMS destinations, such as providing a
service locator for destinations stored in JNDI.
Finally, the package
org.springframework.jms.connection
provides an
implementation of the ConnectionFactory
suitable
for use in standalone applications. It also contains an implementation of
Spring's PlatformTransactionManager
for JMS
(the cunningly named JmsTransactionManager
). This
allows for seamless integration of JMS as a transactional resource into
Spring's transaction management mechanisms.