Introduction
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.
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.
|