The Message-Driven Bean Class - The Java EE 5 Tutorial (original) (raw)
2. Using the Tutorial Examples
3. Getting Started with Web Applications
5. JavaServer Pages Technology
7. JavaServer Pages Standard Tag Library
10. JavaServer Faces Technology
11. Using JavaServer Faces Technology in JSP Pages
12. Developing with JavaServer Faces Technology
13. Creating Custom UI Components
14. Configuring JavaServer Faces Applications
15. Internationalizing and Localizing Web Applications
16. Building Web Services with JAX-WS
17. Binding between XML Schema and Java Classes
19. SOAP with Attachments API for Java
21. Getting Started with Enterprise Beans
23. A Message-Driven Bean Example
simplemessage Example Application Overview
The simplemessage Application Client
Packaging, Deploying, and Running the simplemessage Example
Creating the Administered Objects for the simplemessage Example
Building, Deploying, and Running the simplemessage Application Using NetBeans IDE
Building, Deploying, and Running the simplemessage Application Using Ant
Removing the Administered Objects for the simplemessage Example
Creating Deployment Descriptors for Message-Driven Beans
24. Introduction to the Java Persistence API
25. Persistence in the Web Tier
26. Persistence in the EJB Tier
27. The Java Persistence Query Language
28. Introduction to Security in the Java EE Platform
29. Securing Java EE Applications
31. The Java Message Service API
32. Java EE Examples Using the JMS API
36. The Coffee Break Application
37. The Duke's Bank Application
The Message-Driven Bean Class
The code for the SimpleMessageBean class illustrates the requirements of a message-driven bean class:
- It must be annotated with the @MessageDriven annotation if it does not use a deployment descriptor.
- The class must be defined as public.
- The class cannot be defined as abstract or final.
- It must contain a public constructor with no arguments.
- It must not define the finalize method.
It is recommended, but not required, that a message-driven bean class implement the message listener interface for the message type it supports. A bean that supports the JMS API implements the javax.jms.MessageListener interface.
Unlike session beans and entities, 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 onMessage method.
For the Application Server, the @MessageDriven annotation typically contains a mappedName element that specifies the JNDI name of the destination from which the bean will consume messages. For complex message-driven beans there can also be an activationconfig element containing @ActivationConfigPropertyannotations used by the bean. See A Java EE Application That Uses the JMS API with a Session Bean for an example.
A message-driven bean can also inject a MessageDrivenContext resource. Commonly you use this resource to call the setRollbackOnly method to handle exceptions for a bean that uses container-managed transactions.
Therefore, the first few lines of the SimpleMessageBean class look like this:
@MessageDriven(mappedName="jms/Queue") public class SimpleMessageBean implements MessageListener { @Resource private MessageDrivenContext mdc; ...
The onMessage Method
When the queue receives a message, the EJB container invokes the message listener method or methods. For a bean that uses JMS, this is theonMessage method of the MessageListener interface.
A message listener method must follow these rules:
- The method must be declared as public.
- The method must not be declared as final or static.
The onMessage method 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 onMessage method has a single argument: the incoming message.
The signature of the onMessage method must follow these rules:
- The return type must be void.
- The method must have a single argument of type javax.jms.Message.
In the SimpleMessageBean class, the onMessage method casts the incoming message to aTextMessage and 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();
}
}
Copyright © 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices