The message-driven bean (MDB) is an asynchronous listener. Its callers are systems that say, “Check out this message; do whatever you want with it” and don’t have the decency to wait around for a response. In fact, clients of an MDB have no idea that the messages they send may be processed by an EJB at all. Messages are sent directly to some messaging system (it doesn’t matter which), where they are routed via a standard inflow mechanism to the EJB subsystem and, eventually, a backing MDB instance (Figure 8-1).
Figure 8-1. Message-driven bean listening on events via a messaging subsystem
The key to the generic plumbing shown in the figure is the Java Connector Architecture (JCA; http://jcp.org/en/jsr/detail?id=322), which provides an abstraction for the delivery of any message type. This means that EJB message-driven beans may act as a listener for events sent from any system for which there is a valid JCA inflow adaptor.
The message-driven bean was introduced in EJB 2.0 to support the processing of asynchronous messages from a Java Message Service (JMS; http://java.sun.com/products/jms/) provider. EJB 2.1 expanded the definition of the message-driven bean so that it can support any messaging system, not just JMS, via the facilities provided by JCA. EJB 3.x does not really expand on the feature set of earlier specification versions, but it does simplify ...