📄 beanmsg.java
字号:
package goodTrans;
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.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BeanMsg extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
InitialContext context;
try {
context = new InitialContext();
//从最初的上下文中
//查找队列连接工厂
QueueConnectionFactory qcf =
(QueueConnectionFactory) context.lookup("QCF");
//从队列连接工厂
//创建新的队列连接
QueueConnection conn;
conn = qcf.createQueueConnection();
// 在创建了QueueConnection之后 , 就进行启动 , 这样它就可以用于处理传入的消息 。 //开始连接
conn.start();
// 现在 , 可以用QueueConnection来创建QueueSession对象 。 在创建了QueueSession对象之后 , 就必须指定该会话是否要进行处理 , 以及它应该如何应答任何接收到的消息 。 在本文中 , 我们将不处理会话 , 消息应答也将由基础JMS提供者自动进行处理 。 //从队列连接中创建新的队列会话
//该会话不应该进行处理
//而应该使用自动会话应答
QueueSession session =
conn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
//在发送和接收任何消息之前 , 您必须从JNDI中检索Queue对象 , 获得消息将发送到哪儿以及从何处读取的详细资料 。 为达此目的 , 可以按照类似的方式使用QueueConnectionFactory来查找上下文对象 。 同样 , 您可以选择传送到查找的对象的名称 , 如同您在下面将配置的一样 。 //查找用于发送和接收
//来自最初上下文中的消息
Queue q = (Queue) context.lookup("Q");
//在找到该Queue对象之后 , 就可以在创建QueueSender对象时进行使用 , 它可用于向队列发送消息 。 QueueSender对象是从现有的QueueSession对象中创建的 : //使用队列会话创建新的队列发送者。
//该发送者应该创建成能把消息发送到
//队列
QueueSender sender = session.createSender(q);
//在创建了QueueSender对象之后 , 现在 , 您就可以创建和发送消息了 。 和QueueSenders类似 , 可以使用Session对象来创建JMS消息 。 在本文中 , 您将创建一个TextMessage消息 , 其消息数据可以用您选择的某些文本进行初始化 。 //使用该队列会话创建一个文本消息
//将此消息的数据初始化为
//您选择的某个字符串
TextMessage sentMessage =
session.createTextMessage("My first JMS message.");
//使用该队列发送者发送sentMessage对象
sender.send(sentMessage);
//在将TextMessage发送到队列之后 , 现在 , 您需要把它再次读取回来 。 您可以使用QueueReceiver对象 ( 其创建方式和前面的QueueSender对象大致相同 ) 来完成 。 // Create a new queue receiver using the queue session.
//该队列应该创建成能从
//队列q接收消息
// QueueReceiver receiver = session.createReceiver(q);
//现在 , 您可以使用QueueReceiver对象从队列中读取消息了 。 JMS提供了三种读取消息的方式 。 调用receive() 将使代码保持等待 , 直到队列中有可以读取的消息为止 。 调用receive(n) 将使代码保持等待可以读取的消息长达n毫秒 。 顾名思义 , 调用receiveNoWait() 将使代码立即返回 , 而不管队列中是否有可以读取的消息 。 在这种情况下 , 由于消息刚发送到队列中 , 我们就能够肯定可以读取一个消息 , 所以将使用receiveNoWait方法 。 //使用队列接收者来接收
//先前发送的消息
// Message receivedMessage = receiver.receive();
//为了验证接收到的消息和所发送的是相同的消息 , 可以把该消息输出到System.out 。 //把接收到的消息输出到System.out中
// System.out.println(receivedMessage);
//保存已更新的源代码 , 现在 , 就可以准备对该点对点应用程序进行测试了 。
System.out.println("have finished");
} catch (NamingException e) {
} catch (JMSException e) {
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -