Guideline: Designing Message-Driven Beans
This guideline discusses how to design message-driven beans for a J2EE application.
Related Elements
Main Description


This guideline focuses on designing message-driven beans. Additional guidance on message-driven beans, such as how to identify and model them, is provided by Guideline: Message-Driven Bean. General guidance on EJBs is provided by Guideline: Enterprise JavaBean (EJB)

Note that since message-driven beans are invoked indirectly via messages, rather than directly via interface operations, their design entails elaborating message format and describing behavior in response to messages, and not elaborating interface operations.


One limitation of using messaging is that the producer of a message and the consumer (the message-driven bean) cannot participate in the same transaction. The producer can use a transaction to place the message on the queue, and the message-driven bean can use a separate transaction to commit the results of consuming the message, but these must always be separate transactions.

Message-driven beans can use bean-managed or container-managed transactions. Generally container-managed transactions are simpler, and so are the preferred approach. See Guideline: Designing Enterprise JavaBeans (EJBs) for more guidance.

Message Order

Each message-driven bean is an active class that may have multiple instances. Since each message-driven bean instance runs concurrently, the processing of a message received by one instance may complete before or after a message processed by another instance.

This means that messages can be consumed in a different order than in which they were produced. The design of message-driven beans must take this possibility into account.