THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- Right click on WebJMS project and create a new servlet.
- Name the servlet as UserServlet and package as webjms. This is the producer in the application.
- Select Next and later Finish.
- Add the following code to UserServlet.java
Code Block borderStyle solid title UserServlet.java borderStyle solid package webjms; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration; import javax.annotation.Resource; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class for Servlet: UserServlet * */ public class UserServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { @Resource(name="jms/TestConnectionFactory") private ConnectionFactory connectionFactory; @Resource(name="jms/TestQueue") private Queue queue; static final long serialVersionUID = 1L; /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#HttpServlet() */ public UserServlet() { super(); } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ 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 = null; 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); for (int i=0; i<paramname.length;i++) { String s=null; s=fields+":" + paramname[i]; message.setText(s); producer.send(message); } } out.println("Your request has been sent to administrator."); //Send a non-text control message indicating end of messages. producer.send(session.createMessage()); } catch (JMSException e) { e.printStackTrace(); } finally { if(connection != null) { try { connection.close(); } catch (JMSException e1) { } } } } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
Lets try to understand the code- @Resource(name="jms/TestConnectionFactory")- This is a resource injection wherein connection factory has been injected.
- @Resource(name="jms/TestQueue")- a queue previously created has been injected. Resource injection is useful in the sense that we need not include the entries in a deployment descriptor.
- Servlets follow a request response model wherein a request is send to servlet and a response is generated. The function protected void doGet(....,....) follows a request response model.
- PrintWriter out = response.getWriter()- This statement returns a PrintWriter object which is used to send HTML content to client page.
- connection = connectionFactory.createConnection()- Creates a connection to jms/TestConnectionFactory
- Session session = connection.createSession(..,..)- A session is a context for producing and consuming messages. Use this statement we create a new session.
- MessageProducer producer = session.createProducer(queue)- A client uses message producer to send messages to a destination. Queue name is passed to createProducer method provided by session object.
- TextMessage message = session.createTextMessage()- A TextMessage is used to send a message of java.lang.String type.
- Similarly create a second servlet AdminServlet. This is the consumer in the application.
Add the following code to AdminServlet.javaCode Block borderStyle solidtitle AdminServlet.java borderStyle solid package webjms; import java.io.IOException; import java.io.PrintWriter; import javax.annotation.Resource; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.Queue; import javax.jms.Session; import javax.jms.TextMessage; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class for Servlet: AdminServlet * */ public class AdminServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { @Resource(name="jms/TestConnectionFactory") private ConnectionFactory connectionFactory; @Resource(name="jms/TestQueue") private Queue queue; /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#HttpServlet() */ public AdminServlet() { super(); } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ 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 = null; try { connection = connectionFactory.createConnection(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageConsumer consumer = session.createConsumer(queue); connection.start(); out.println("The following information has been received for updation\n"); while(true) { Message m = consumer.receive(); if (m instanceof TextMessage) { TextMessage message = (TextMessage) m; out.println(message.getText()); } else { break; } } } catch (JMSException e) { e.printStackTrace(); } finally { if(connection != null) { try { connection.close(); } catch (JMSException e1) { } } } } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
- Right Click on WebContent and create a jsp.
- Name the jsp as index.jsp. Select Next.
- Select Finish.
Add the following code to index.jsp
This will create the producer, consumer and user interface required by the application.Code Block borderStyle solidtitle index.jsp borderStyle solid <%@ 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="/WebJMS/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>
...
Modify the deployment plan as shown below
Code Block | borderStyle | solid|||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.2" xmlns:nam="http://geronimo.apache.org/xml/ns/naming-1.2" xmlns:sec="http://geronimo.apache.org/xml/ns/security-1.1" xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"> <sys:environment> <sys:moduleId> <sys:groupId>default</sys:groupId> <sys:artifactId>WebJMS</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</sys:version> <sys:type>car</sys:type> </sys:dependency> </sys:dependencies> </sys:environment> <context-root>/WebJMS</context-root> <nam:resource-ref> <nam:ref-name>jms/TestConnectionFactory</nam:ref-name> <nam:pattern> <nam:groupId>org.apache.geronimo.configs</nam:groupId> <nam:artifactId>activemq-ra</nam:artifactId> <nam:version>2.1</nam:version> <nam:name>DefaultActiveMQConnectionFactory</nam:name> </nam:pattern> </nam:resource-ref> <nam:resource-env-ref> <nam:ref-name>jms/TestQueue</nam:ref-name> <nam:pattern> <nam:groupId>org.apache.geronimo.configs</nam:groupId> <nam:artifactId>activemq-ra</nam:artifactId> <nam:version>2.1</nam:version> <nam:name>SendReceiveQueue</nam:name> </nam:pattern> </nam:resource-env-ref> </web-app> |
...