The Message-Driven Bean Class
The code for the
SimpleMessageBeanclass illustrates the requirements of a message-driven bean class:
- It must implement the
MessageDrivenBeanandMessageListenerinterfaces.- The class must be defined as
public.- The class cannot be defined as
abstractorfinal.- It must implement one
onMessagemethod.- It must implement one
ejbCreatemethod and oneejbRemovemethod.- It must contain a public constructor with no arguments.
- It must not define the
finalizemethod.Unlike session and entity beans, message-driven beans do not have the remote or local interfaces that define client access. Client components do not locate message-driven beans and invoke methods on them. Although message-driven beans do not have business methods, they may contain helper methods that are invoked internally by the
onMessagemethod.The onMessage Method
When the queue receives a message, the EJB container invokes the
onMessagemethod of the message-driven bean.The
onMessagemethod is called by the bean's container when a message has arrived for the bean to service. This method contains the business logic that handles the processing of the message. It is the message-driven bean's responsibility to parse the message and perform the necessary business logic.The
onMessagemethod has a single argument: the incoming message.The message-driven bean class defines one
onMessagemethod, whose signature must follow these rules:
- The method must be declared as
publicand must not be declared asfinalorstatic.- The return type must be
void.- The method must have a single argument of type
javax.jms.Message.- The
throwsclause must not define any application exceptions.- The
onMessagemethod must be invoked in the scope of a transaction that is determined by the transaction attribute specified in the deployment descriptor.In the
SimpleMessageBeanclass, theonMessagemethod casts the incoming message to aTextMessageand displays the text:public void onMessage(Message inMessage) { TextMessage msg = null; try { if (inMessage instanceof TextMessage) { msg = (TextMessage) inMessage; logger.info("MESSAGE BEAN: Message received: " + msg.getText()); } else { logger.warning("Message of wrong type: " + inMessage.getClass().getName()); } } catch (JMSException e) { e.printStackTrace(); mdc.setRollbackOnly(); } catch (Throwable te) { te.printStackTrace(); } }The ejbCreate and ejbRemove Methods
The signatures of these methods have the following requirements:
In the
SimpleMessageBeanclass, theejbCreateandejbRemovemethods are empty.