Guidelines: Designing Message-Driven Beans
Topics
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 Guidelines:
Message-Driven Beans. General guidance on EJBs is provided by Guidelines:
Enterprise JavaBeans (EJBs).
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 Guidelines:
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.
|