|
| Home > Apache Geronimo v2.2 > Documentation > Developing > Tutorials > Developing EJB applications > JMS application with Message-Driven Bean |
This application is a simple JMS application where in a user sends information to the administrator for update.
To run this tutorial, as a minimum you will be required to have installed the following prerequisite software.
Details on installing eclipse are provided in the Development environment section. This tutorial is organized in the following sections:
The application development will take you through the following









package webmdb; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import java.util.Properties; import javax.annotation.Resource; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import mdb.AdminMDB; public class UserServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { @Resource(name="DefaultActiveMQConnectionFactory") private ConnectionFactory connectionFactory; @Resource(name="SendReceiveQueue") private Queue queue; static final long serialVersionUID = 1L; public UserServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); if(connectionFactory == null) { out.println("Connection Factory lookup has failed"); return; } if(queue == null) { out.println("Queue lookup has failed"); return; } Connection connection; try{ connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(queue); TextMessage message = session.createTextMessage(); Enumeration arr=request.getParameterNames(); while(arr.hasMoreElements()) { String fields= (String)arr.nextElement(); String paramname[]=request.getParameterValues(fields); String s=null; int i; for (i=0; i<paramname.length;i++) { s=fields+":" + paramname[i]; message.setText(s); producer.send(message); } } } catch(Exception e) { e.printStackTrace(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }



<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Sample Web Application accessing JMS Resources</title> </head> <body> <form action="UserServlet"> <h1>Please enter the updated information</h1> <table> <tr> <td>UserName:</td> <td><input type="text" name="username" size="30"></td> </tr> <tr> <td>UserID:</td> <td><input type="text" name="userid" size="30"></td> </tr> <tr> <td>Old Address:</td> <td><input type="text" name="oldaddress" size="30"></td> </tr> <tr> <td>New Address:</td> <td><input type="text" name="newaddress" size="30"></td> <tr> </table> <input type="submit" value="Submit"> </form> </body> </html>
This will create the producer and user interface required by the application.
In simple terms a Connection Factory is an object which is used by a client to connect to the Service provider. In our case we will be using Active MQ as the provider. Destination is an object which is used by client to provide the target to messages produced and source of the messages to be consumed. In our case the target is going to be a queue. We will use the default connection factory and queue which is already available with Apache Geronimo.







package mdb; //import java.sql.SQLException; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(name="AdminMDB", activationConfig = { @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"), @ActivationConfigProperty(propertyName="destination", propertyValue="SendReceiveQueue") }) public class AdminMDB implements MessageListener{ public AdminMDB() { super(); } @PostConstruct public void initialize() { } @PreDestroy public void cleanup() { } public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { System.out.println(textMessage.getText()+ "\n"); } catch (JMSException e) { e.printStackTrace(); } } }
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns8:web-app xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2" xmlns:ns2="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2" xmlns:ns3="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:ns4="http://geronimo.apache.org/xml/ns/j2ee/ejb/openejb-2.0" xmlns:ns5="http://geronimo.apache.org/xml/ns/j2ee/application-2.0" xmlns:ns6="http://geronimo.apache.org/xml/ns/security-2.0" xmlns:ns7="http://java.sun.com/xml/ns/persistence" xmlns:ns8="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1" xmlns:ns9="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"> <environment> <moduleId> <groupId>default</groupId> <artifactId>WebMDB</artifactId> <version>1.0</version> <type>car</type> </moduleId> <dependencies> <dependency> <groupId>default</groupId> <artifactId>MessageDrivenBean</artifactId> <version>1.0</version> <type>car</type> </dependency> <dependency> <groupId>org.apache.geronimo.configs</groupId> <artifactId>activemq-ra</artifactId> <version>2.1.1</version> <type>car</type> </dependency> </dependencies> </environment> <ns8:context-root>/WebMDB</ns8:context-root> <ns3:resource-ref> <ns3:ref-name>testfactory</ns3:ref-name> <ns3:resource-link>DefaultActiveMQConnectionFactory</ns3:resource-link> </ns3:resource-ref> </ns8:web-app>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.2" xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:pkgen="http://www.openejb.org/xml/ns/pkgen-2.0" xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.2" xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"> <sys:environment> <sys:moduleId> <sys:groupId>default</sys:groupId> <sys:artifactId>MessageDrivenBean</sys:artifactId> <sys:version>1.0</sys:version> <sys:type>car</sys:type> </sys:moduleId> <sys:dependencies> <sys:dependency> <sys:groupId>org.apache.geronimo.configs</sys:groupId> <sys:artifactId>activemq-ra</sys:artifactId> <sys:version>2.1.1</sys:version> <sys:type>car</sys:type> </sys:dependency> </sys:dependencies> </sys:environment> <enterprise-beans> <message-driven> <ejb-name>AdminMDB</ejb-name> <nam:resource-adapter> <nam:resource-link>ActiveMQ RA</nam:resource-link> </nam:resource-adapter> <activation-config> <activation-config-property> <activation-config-property-name> destination </activation-config-property-name> <activation-config-property-value> SendReceiveQueue </activation-config-property-value> </activation-config-property> <activation-config-property> <activation-config-property-name> destinationType </activation-config-property-name> <activation-config-property-value> javax.jms.Queue</activation-config-property-value> </activation-config-property> </activation-config> </message-driven> </enterprise-beans> </openejb-jar>





|
|
Privacy Policy - Copyright © 2003-2011, The Apache Software Foundation, Licensed under ASL 2.0. |