Message-driven beans currently process only JMS messages, but in the future they may be used to process other kinds of messages.
The most visible difference between message-driven beans and session and entity beans is that clients do not access message-driven beans through interfaces.
When a message arrives, the container calls the message-driven bean's onMessage
method to process the message. The onMessage
method normally casts the message to one of the five JMS message types and handles it in accordance with the application's business logic. The onMessage
method may call helper methods, or it may invoke a session or entity bean to process the information in the message or to store it in a database.
A message may be delivered to a message-driven bean within a transaction context, so that all operations within the onMessage
method are part of a single transaction. If message processing is rolled back, the message will be redelivered.
Session beans and entity beans allow you to send JMS messages and to receive them synchronously, but not asynchronously. To avoid tying up server resources, you may prefer not to use blocking synchronous receives in a server-side component. To receive messages asynchronously, use a message-driven bean.