Message-driven EJBs are components that are managed by an EJB container like other EJBs, but they are invoked asynchronously by clients using JMS messages rather than method calls. In terms of their runtime lifecycle and container management, message-driven beans are closest in nature to stateless session beans. They are invoked indirectly and asynchronously, so they don’t maintain conversational state on behalf of clients, and they can be pooled by the container to handle incoming messages.
From the client’s perspective, a message-driven bean is seen as simply another JMS destination with which to exchange messages. Clients do not even know that an EJB container is involved—they simply perform the usual steps to establish a session with the JMS queue or topic and exchange messages with it. We only touch on these JMS-specific details here—for more details, see Chapter 11.
Message-driven EJBs are the simplest to implement since they
require only a bean implementation class. The only client interaction
with them is through JMS messages, so there’s no need for client
interfaces or home interfaces. A message-driven bean must implement
interface from the EJB API as well as the
MessageListener interface from JMS. The
bean’s lifecycle is managed by the EJB container, including its
association with a JMS destination. While a simple, standalone JMS
MessageListener needs to be programmatically associated with its message destination, the EJB ...