Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Right click on WebJMS project and create a new servlet.





  2. Name the servlet as UserServlet and package as webjms. This is the producer in the application.





  3. Select Next and later Finish.





  4. Add the following code to UserServlet.java


    Code Block
    titleUserServlet.java
    borderStylesolid
    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.

...