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 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.
...