Customer Centre - Thomas Modeneis Creating a EJB3 project with Message Driven Beans (MDBs) Step by Step, Using Rational® Software Architect (RSA) 8 and Websphere 6.1 © 2012 IBM Corporation Introduction In this tutorial, I am going to introduce you with a EJB 3 Project with MDBs. You will learn how to config, deploy and test the project on Websphere 6.1 (WAS) We are going to use Rational Software Architect 8.0.x (RSA) to create the project, the MDBs and the necessary configurations. Creating an Enterprise Application Project into RSA 8.0.x I will assume that you have the RSA 8.0.x is installed and the Websphere AS 6.1 - EJB3 Feature Pack Installed. After the RSA 8 and the Websphere AS 6.1 are installed, it is time to create the Enterprise Application Project (EAR). Open the RSA 8.0.x and go to the Java EE Perspective. Now, open the menu File -> New -> Enterprise Application Project. On the first screen, put the EAR project, “TestJMS” and click on Next. On the next screen, check in the Generate Deployment Descriptor and click on New Module button. Un-Check the Application Client module and Connector Module. We’re going to use only the EJB module and Web module for now. Click on Finish button and the EAR project, as well as the EJB and Web module are going to be created. November 27, 2012 © 2009 IBM Corporation Introduction Open the RSA 8.0.x and go to the Java EE Perspective. Now, open the menu File -> New -> Enterprise Application Project. On the first screen, put the EAR project, “TestJMS” and click on Next. On the next screen, check in the Generate Deployment Descriptor and click on New Module button. Un-Check the Application Client module and Connector Module. We’re going to use only the EJB module and Web module for now. Click on Finish button and the EAR project, as well as the EJB and Web module are going to be created. November 27, 2012 © 2009 IBM Corporation Creating the Message Driven Bean Component RSA 8.0 brings a wizard to create the MDB, so let’s use it: – Right mouse click on the TestJMSEJB -> New -> Message-Driven Bean. On the screen that will come up, fill up the Java Package, Class Name, Destination name, JMS and Destination type. – Click on Finish button and the Message Driven Bean will be created into jms package. – Implement the method onMessage() like below: – public void onMessage(Message message) { – if (message instanceof TextMessage) { – TextMessage text = (TextMessage) message; – try { – System.out.println(); – System.out.println("Invoking MDB onMessage() now."); – System.out.println("Message Object is: " + message); – System.out.println("Text message is: " + text.getText()); – System.out.println(); – – – – – } catch (JMSException e) { e.printStackTrace(); } } } November 27, 2012 © 2009 IBM Corporation Setting up the JMS Provider and the Destination It’s time to setup the configuration from the server side. This setup is made only once and usually it is responsability from EJB Deployer. Certainly, the most famous JMS Provider is the IBM MQ Series, however for this example, we’re going to use a simplest JMS Provider. Websphere Application Server 6.1 have his own JMS Provider, we will use it. Creating the Service Integration BUS (SIB) – Run the Websphere Application Server (you can do that through the Server Perspective, right click on WAS -> Start) and open its Administrative Console (right click on WAS -> Administration -> Run Administrative console). There, go to the MENU Service Integration and click on Buses. – On the buses screen, click on New button – Next, insert the name MDBBus and then click Next and Finish – Back to the Buses screen, click on Save link and then the MDBus will be created and committed. November 27, 2012 © 2009 IBM Corporation Setting up the JMS Provider and the Destination – Now, click on MDBBus link to open a new screen. – We’re going to use the three links on the right side. The first one is the Bus Member. Click on it. – On the next screen, click on Add button. Choose the first option Server. – Click on Next –November choose File store and Next again. 27, 2012 © 2009 IBM Corporation Setting up the JMS Provider and the Destination – On third screen, change the values: Log size: 10, Minimum permanent store size: 20, Maximum permanent store size: 50, – Click on Next button, Finish and Save link. November 27, 2012 © 2009 IBM Corporation Setting up the JMS Provider and the Destination – Now, let’s create the Destionations. Go back to the MDBBus screen and click on Destinations link. – Click on New button – Select Queue and click on Next – Enter: MDBQueue as Identifier. Also, click on Next. – Click on Next again. – Finally, click on Finish. – The SIB (Service Integration Buses) is created. – The next step is to create the JMS Provider. Let’s do it. – Go to the menu Resources -> JMS -> JMS Providers. On the center screen, click on Default messaging provider. November 27, 2012 © 2009 IBM Corporation Setting up the JMS Provider and the Destination – On the Default messaging provider screen, let’s create the Queue connection factory, Queue and the Activation Specification. November 27, 2012 © 2009 IBM Corporation Setting up the JMS Provider and the Destination – Creating the Queue Connection factory – Click on Queue Connection factories link. On the new screen, click on New button. – On the new screen, fill up the following fields: – Name (MDBQueueCF) – JNDI name (jms/messageCF) – Bus name (MDBBus) – Click on OK button – Save link. November 27, 2012 © 2009 IBM Corporation Setting up the JMS Provider and the Destination – Creating the Queue – Click on Queue link and then New button. On the new screen, fill up the following fields: – Name (MDBQueue) – JNDI name (jms/messageQueue) – Bus name (MDBBus) – Queue name (MDBQueue) – Click on OK button – Save link. November 27, 2012 © 2009 IBM Corporation Setting up the JMS Provider and the Destination – Creating the Activation specifications – Click on Activation specifications link – Click on New button. – On the new screen, fill up the following fields. – Name (MDBActivationSpec) – JNDI name (jms/activationSpec) – Destination type (Queue) – Destination JNDI name (jms/messageQueue) – Bus name (MDBBus) – Click on OK button – Save link. – Both SIB and the JMS Provider were setup. Make sure to restart the Websphere server before continue. November 27, 2012 © 2009 IBM Corporation Setting up the Websphere Deployment Descriptor (on EJB Project). – So far, we have created the Message Driven-Bean component, as well as the required configuration into Websphere Application Server. There is a simple setup yet. This setup will be made into Websphere Deployment Descriptor. – Right click on EJB Module (TestJMSEJB) and go to the option Java EE -> Generate Websphere Bindings Deployment Descriptor. After this operation, the file “ibm-ejb-jar-bnd.xml” will be created into ${ejb}/META-INF dir. November 27, 2012 © 2009 IBM Corporation Setting up the Websphere Deployment Descriptor (on EJB Project). – Double click on it to edit it. On the design section: – Click on Add button – Select Message Driven – Insert the name ConsumerBean – Select Message Driven and click on Add button again – Select JCA Adapter – Insert jms/activationSpec into Activation Spec Binding Name – Insert jms/messageQueue into Destination Binding Name. November 27, 2012 © 2009 IBM Corporation Creating the Web Module to be the JMS Client – Now it is time to play around the Web Module we have created early. – Setup the Resources: – Double click on Deployment Descriptor. November 27, 2012 © 2009 IBM Corporation Creating the Web Module to be the JMS Client – On the new screen, go to the References tab. Click on Add button and follow the steps: – Select Resource reference. – Name: jms/messageQueueCF Type: javax.jms.QueueConnectionFactory Authentication: Container click on Ok button. – JNDI name: jms/messageCF. November 27, 2012 © 2009 IBM Corporation Creating the Web Module to be the JMS Client – Repeat the same process, but now using the following values: – Select Resource reference. – Name: jms/messageQueue Type: javax.jms.Queue Authentication: Container click on Ok button. – JNDI name: jms/messageQueue. November 27, 2012 © 2009 IBM Corporation Creating the Servlet – Finally, let’s create the test servlet to send out the JMS message to the JMS Provider. Our Message Driven-Bean will consume this message and print out into the console. – Lets See the servlet’s code below: public class JMSProducerServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Resource(name="jms/messageQueueCF" ) private QueueConnectionFactory qcf; @Resource(name="jms/messageQueue" ) private Queue queue; } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { QueueConnection connection = qcf.createQueueConnection(); QueueSession session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(queue); TextMessage message = session.createTextMessage(); message.setText("#### JMS Example Running #####"); producer.send(message); session.close(); connection.close(); } catch (JMSException e) { e.printStackTrace(); } } November 27, 2012 © 2009 IBM Corporation Running the Servlet To run this code, right click on Servlet and go to Run As -> Run on Server. Select Websphere 6.1 and the code will be performed. Look at the Console view, because when Message Driven Bean consume the message, it will prints out the result on the console, like image below. November 27, 2012 © 2009 IBM Corporation