JMS通用测试程序

JMS通用测试程序
前段时间,由于工作需要,写了一个JMS的测试程序(B/S),对于指定的Destination,可以完成发生和接受消息,并手动设置message属性.
现备份如下,同时也供大家参考:

包括两个servlet:一个发送,一个接收。
两个设置页面:分别设置发送条件和接收条件。
发送消息的设置页面:sendMessage.jsp

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<script type="text/javascript">
<!--
var textNumber = 1;
function addTextBox(form, afterElement) {
  // Increment the textbox number
  textNumber++;
  // Create the label
  var label = document.createElement("label");
  // Create the textbox
  var textField = document.createElement("input");
  textField.setAttribute("type","text");
  textField.setAttribute("name","txt"+textNumber);
  textField.setAttribute("id","txt"+textNumber);
  // Add the label's text
  label.appendChild(document.createTextNode("Text Box #"+textNumber+": "));
  // Put the textbox inside
  label.appendChild(textField);
  // Add it all to the form
  form.insertBefore(label,afterElement);
  return false;
}
function removeTextBox(form) {
  if (textNumber > 1) { // If there's more than one text box
    // Remove the last one added
    form.removeChild(document.getElementById("txt"+textNumber).parentNode);
    textNumber--;
  }
}

function insertRow(isTable){
 index = isTable.rows.length;
 nextRow = isTable.insertRow(index);
 isText = nextRow.insertCell(0);
 txtArea = nextRow.insertCell(1);
 isText2 = nextRow.insertCell(2);
 txtArea2 = nextRow.insertCell(3);
 index++;
 index = index.toString();

 txtStrName = "property name "+index;
 txtStrValue = "property value "+index;

 txtNameStrPname = "pname";
 txtNameStrPvalue = "pvalue";

 
 isText.innerHTML = txtStrName;
 txtArea.innerHTML = "<input type=text name="+txtNameStrPname+">";
 isText2.innerHTML = txtStrValue;
 txtArea2.innerHTML = "<input type=text name="+txtNameStrPvalue+">";
}

//-->
</script>

<form name="form1" method="post" action="../MessageSenderServlet">
<table width="93%" border="1" cellspacing="0" cellpadding="0">
 <tr>
  <td width="18%">content</td>
  <td width="82%"><textarea name="message" cols="100" rows="11">
 
  </textarea></td>
 </tr>
 <tr>
  <td>queueConnectionFactory</td>
  <td width="756"><input name=qcf type="text"
   value="jms/Ntelagent/RequestQCF" size="38">jms/Ntelagent/RequestQCF
  </td>
 </tr>
 <tr>
  <td>destination</td>
  <td width="756"><input name=queue type="text" value="jms/Ntelagent/RequestQ"
   size="38">jms/Ntelagent/RequestQ</td>
 </tr>
 <tr>
  <td>set property<input type=button value="Insert row"
   οnclick="insertRow(dynTable)"></td>
  <td width="756">
  <table id='dynTable' width="100%" border="0" cellspacing="0"
   cellpadding="0">
   <tr>
    <td>property name</td>
    <td><input name="pname" type="text" id="pname1" value="clientid"></td>
    <td>property value</td>
    <td><input name="pvalue" type="text" id="pvalue1" value="my pvalue1">
    </td>
   </tr>
   <tr>
    <td>property name</td>
    <td><input name="pname" type="text" id="pname2" value="requestid"></td>
    <td>property value</td>
    <td><input name="pvalue" type="text" id="pvalue2"
     value="my pvalue8888"></td>
   </tr>
   <tr>
    <td>property name</td>
    <td><input name="pname" type="text" id="pname3" value="trx"></td>
    <td>property value</td>
    <td><input name="pvalue" type="text" id="pvalue3" value="lookup"></td>
   </tr>
   <tr>
    <td>property name</td>
    <td><input name="pname" type="text" id="pname4" value="region"></td>
    <td>property value</td>
    <td><input name="pvalue" type="text" id="pvalue4" value="$region"></td>
   </tr>
   <tr>
    <td>property name</td>
    <td><input name="pname" type="text" id="pname5" value="state"></td>
    <td>property value</td>
    <td><input name="pvalue" type="text" id="pvalue5" value="$state"></td>
   </tr>
   <tr>
    <td>property name</td>
    <td><input name="pname" type="text" id="pname6" value="center"></td>
    <td>property value</td>
    <td><input name="pvalue" type="text" id="pvalue6" value="$center"></td>
   </tr>
  </table>
  </td>
 </tr>
 <tr>
  <td colspan="2"><input name="send" type="submit" value="Send"></td>
 </tr>
</table>
</form>
</body>
</html>

发送message的servlet: MessageSenderServlet.jsp
package co.servlet;

import java.io.IOException;

import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * @version  1.0
 * @author
 */
public class MessageSenderServlet extends HttpServlet {

 /**
 * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 */
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException {
  this.doPost(req, resp);

 }

 /**
 * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 */
 public void doPost(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException {
  ServletOutputStream out = resp.getOutputStream();  
  try {

   String qcfJndiName = req.getParameter("qcf");     //queueConnectionFactory
   String qJndiName = req.getParameter("queue");     //queueJndiName
   if (qcfJndiName == null || qcfJndiName.trim().length() == 0)
   {
    qcfJndiName = "jms/MyMDBConnectionFactory";
   }
   if (qJndiName == null || qJndiName.trim().length() == 0)
   {
    qJndiName = "jms/MyMDBQueue";
   }   
   
   InitialContext context = new InitialContext();
   QueueConnectionFactory qConnectionFactory = (QueueConnectionFactory) context.lookup(qcfJndiName);
   Queue queue = (Queue) context.lookup(qJndiName);
   QueueConnection qConnection =
    qConnectionFactory.createQueueConnection();
   QueueSession qSession =
    qConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
   QueueSender sender = qSession.createSender(queue);
   TextMessage message = qSession.createTextMessage();
   String msg = req.getParameter("message");
   String msgid = "msg" + System.currentTimeMillis();  
   
   String messageToSend = msg;

   String[] names = req.getParameterValues("pname");
   String[] values = req.getParameterValues("pvalue");
   
      
   if (messageToSend == null) {
    messageToSend = "Default Message";
   }

   message.setText(messageToSend);
   
   for (int i = 0; i < names.length; i++)
   {
    message.setStringProperty(names[i],values[i]);
   }
   
   if (msgid != null && !msgid.equals(""))
   {
    message.setStringProperty("BIS_MSG_ID", msgid);
    message.setJMSMessageID(msgid);
    message.setJMSCorrelationID(msgid);
   }
   out.println("<P>Sending message</P>");
   out.println("<P><textarea cols=100 rows=30>" + messageToSend + "</textarea></P>");
   sender.send(message);
   out.println("<hr>");
   out.println("<br>"+ "selector: BIS_MSG_ID='" + msgid + "'<br>");
   out.println("<hr>");
   sender.close();
   qSession.close();
   qConnection.close();

  } catch (NamingException ne) {
   out.println(ne.toString());
   ne.printStackTrace(System.out);
  } catch (JMSException e) {
   out.println(e.toString());
   e.printStackTrace(System.out);
   Exception linked = e.getLinkedException();
   linked.printStackTrace(System.out);
  }
  catch (Exception e)
  {
   out.println(e.toString());
  }

 }

}

接收消息用的设置页面: setReceiver.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body>
<form name="form1" method="post" action="../MessageReceiverServlet">
<table width="100%" border="1" cellspacing="0" cellpadding="0">
 <tr>
  <td>receive message</td>
 </tr>
 <tr>
  <td>queueConnectionFactory:<input name="qcf" type="text" value="jms/Ntelagent/RequestQCF" size="20" >jms/Ntelagent/ResponseQCF</td>
 </tr>
 </tr>
  <tr>
  <td>distination:<input name="distination" type="text" value="jms/Ntelagent/RequestQ" size="20" >jms/Ntelagent/ResponseQ</td>
 </tr>
 <tr>
  <td>selector:<input name="selector" type="text" value="trx='lookup'" size="20" ></td>
 </tr>
 <tr>
  <td><input type="submit" name="Submit" value="Submit">
        </td>
 </tr>
</table>
</form>
</body>
</html>

用于接收消息的servlet: MessageReceiverServlet.jsp
package co.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @version  1.0
 * @author
 */
public class MessageReceiverServlet extends HttpServlet {

 /**
 * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 */
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException {
   this.doPost(req,resp);

 }

 /**
 * @see javax.servlet.http.HttpServlet#void (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 */
 public void doPost(HttpServletRequest req, HttpServletResponse resp)
  throws ServletException, IOException {
   try {
    ServletOutputStream out = resp.getOutputStream();
    InitialContext context = new InitialContext();

    String qcfJndiName = req.getParameter("qcf");
    String distinationjndi = req.getParameter("distination");
    String selector = req.getParameter("selector");
    String tempInfo = "qcfJndiName = " + qcfJndiName + ", distination = " + distinationjndi + ", selector = " + selector;
    out.println(tempInfo + "<br>");
    QueueConnectionFactory qConnectionFactory =
     (QueueConnectionFactory) context.lookup(qcfJndiName);
    Queue queue = (Queue) context.lookup(distinationjndi);
    QueueConnection qConnection =
     qConnectionFactory.createQueueConnection();
    QueueSession qSession =
     qConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);

    QueueReceiver receiver;
    if (selector != null && selector.trim().length() > 0)
    {
     receiver = qSession.createReceiver(queue,selector);
    }
    else
    {
     receiver = qSession.createReceiver(queue);
    }   
    
    qConnection.start();
    TextMessage message = (TextMessage) receiver.receive(1);
    
    if (message != null)
    {
     System.out.println("receive message: " +message.getText());
     out.println("<br>" + "message is <br><textarea cols=100 rows=30>" + message.getText());
     out.println("</textarea><hr>");
     Enumeration names = message.getPropertyNames();
     while (names.hasMoreElements())
     {
      String name = (String)names.nextElement();
      String value = (String)message.getStringProperty(name);
      out.println("<br>protertyName:" + name + "value:" + value);
     }
    }
    else
    {
     out.println("<br> There is no message in the queue");
    }    

    qSession.close();
    qConnection.close();

   } catch (NamingException ne) {
    System.out.println("--in NameingException!");   
    ne.printStackTrace(System.out);
   } catch (JMSException e) {
    System.out.println("--in JMSException!");
    e.printStackTrace(System.out);
    Exception linked = e.getLinkedException();
    linked.printStackTrace(System.out);
   }
   catch (Exception e)
   {
    System.out.println("--in Exception!");
    e.printStackTrace();
   }

 }

}

要运新该测试程序,需要在J2ee容器中配置好
1: JMS Connection factories:
2: JMS Distination

以上程序在WSAD5.1调试通过.

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1247771

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值