- 浏览: 273826 次
文章分类
最新评论
-
yonghuuser:
< namespace > http://www. ...
使用 xfire 开发 web service 应用 -
悬空90:
牛人 呵呵
JCS 资料 -
悬空90:
谢谢分享 呵呵
JCS 应用 -
kuiye:
用于在客户端页面调用.
DWR util.js 整理(DWR 处理各种form表单Select/option,table等,List,Bean -
bo_hai:
好像不是原创呢!
抽象类与接口的区别
文章来源(IBM中国)
1、介绍
在这一节中,我们将分析两个进行点对点消息接发的程序—— QSender.java 和 QReceiver.java。
我们将在一些小节中分析代码并描述每一小节的功能。
2、QSender:提示输入 JNDI 名称~
这两个示例程序都是命令行程序, 用 System.in 输入、用 System.out 输出。 QSender 类有两个方法:main(String[]) 和 send()。main(String[]) 方法只举例说明了 QSender ,并调用了它的 send() 方法。send() 方法的第一部分提示输入用来发送消息受管理对象的 JNDI 的名称。
- import java.io.*;
- import javax.jms.*;
- import javax.naming.*;
- public class QSender {
- public static void main(String[] args) {
- new QSender().send();
- }
- public void send() {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- try {
- //Prompt for JNDI names
- System.out.println("Enter QueueConnectionFactory name:");
- String factoryName = reader.readLine();
- System.out.println("Enter Queue name:");
- String queueName = reader.readLine();
- . . .
3、QSender查找管理对象
send() 方法的第二部分用前面输入的名字在 JNDI 中查找受管理的对象。通过举例说明 InitialContext 对象访问 JNDI,通过调用lookup(String) 方法并传递要获取的对象的名字来检索受管理的对象。注意, lookup(String) 方法返回的是 Object,所以必须对返回的对象进行类型强制转换。
- . . .
- //Look up administered objects
- InitialContext initContext = new InitialContext();
- QueueConnectionFactory factory =
- (QueueConnectionFactory) initContext.lookup(factoryName);
- Queue queue = (Queue) initContext.lookup(queueName);
- initContext.close();
- . . .
4、QSender:创建 JMS 对象
现在,我们已创建了发送消息所需要的 JMS 对象。注意,我们没有用 new 直接举例说明这些对象。所有对象都是通过调用另一个对象的方法创建的。
首先,用 QueueConnectionFactory 创建 QueueConnection。然后用 QueueConnection 创建一个 QueueSession。
QueueSession 不是经过处理的(false),并且它将使用自动确认 (Session.AUTO_ACKNOWLEDGE)。
最后,创建 QueueSender 将信息发送到从 JNDI 中检索的 Queue 发送消息。
- . . .
- //Create JMS objects
- QueueConnection connection = factory.createQueueConnection();
- QueueSession session =
- connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
- QueueSender sender = session.createSender(queue);
- . . .
5、QSender:发送消息
现在就可以发送消息了。在这一部分中,我们进入一个循环,该循环提示我们要发送的消息的文本。如果用户输入 quit,则退出循环。
否则要在输入的文本中建立一个 TextMessage ,并用 QueueSender 发送消息,然后返回循环的开始部分。
- . . .
- //Send messages
- String messageText = null;
- while (true) {
- System.out.println("Enter message to send or 'quit':");
- messageText = reader.readLine();
- if ("quit".equals(messageText))
- break;
- TextMessage message = session.createTextMessage(messageText);
- sender.send(message);
- }
- . . .
6、QSender:退出
退出循环后,关闭 QueueConnection。关闭 QueueConnection 会自动关闭 QueueSession 和 QueueSender。
- . . .
- //Exit
- System.out.println("Exiting...");
- reader.close();
- connection.close();
- System.out.println("Goodbye!");
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
7、QReceiver提示输入 JNDI 名称并查找受管理的对象
QReceiver 类与 QSender 类非常类似,都有一个 main(String[]) 方法,它只举例说明 QReceiver 并调用了它的主要方法 receive()。
提示输入 JNDI 名字并查找受管理对象的代码与 QSender 中的代码完全一样。
不过,在这个类中有两处不一样的地方:
boolean stop 实例变量被用来指出程序应该退出。
QReceiver 可以实现 MessageListener 接口来异步接收消息。
- import java.io.*;
- import javax.jms.*;
- import javax.naming.*;
- public class QReceiver implements MessageListener {
- private boolean stop = false;
- public static void main(String[] args) {
- new QReceiver().receive();
- }
- public void receive() {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- try {
- //Prompt for JNDI names
- System.out.println("Enter QueueConnectionFactory name:");
- String factoryName = reader.readLine();
- System.out.println("Enter Queue name:");
- String queueName = reader.readLine();
- reader.close();
- //Look up administered objects
- InitialContext initContext = new InitialContext();
- QueueConnectionFactory factory =
- (QueueConnectionFactory) initContext.lookup(factoryName);
- Queue queue = (Queue) initContext.lookup(queueName);
- initContext.close();
- . . .
8、QReceiver:创建 JMS 对象
像在 QSender 中那样创建 QueueConnection 和 QueueSession,然后创建一个 QueueReceiver。
接着,调用 setMessageListener(),传递 QReceiver 的本地实例 this,我们将重调它来实现 MessageListener 接口。
最后,启动 QueueConnection 来接收消息。
- . . .
- //Create JMS objects
- QueueConnection connection = factory.createQueueConnection();
- QueueSession session =
- connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
- QueueReceiver receiver = session.createReceiver(queue);
- receiver.setMessageListener(this);
- connection.start();
- . . .
9、QReceiver:等待 stop 并退出
接着,程序进入一个循环,它会在 stop 变量变为 true 时退出循环。在循环中,线程睡眠一秒钟。一旦退出循环, QueueConnection 就会退出,并且程序也会终止
- . . .
- //Wait for stop
- while (!stop) {
- Thread.sleep(1000);
- }
- //Exit
- System.out.println("Exiting...");
- connection.close();
- System.out.println("Goodbye!");
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
- . . .
10、QReceiver:onMessage(Message) 方法
需要包含 QReceiver 类的 onMessage(Message) 方法,因为 QReceiver 可以实现 MessageListener 接口。
接收消息时,就调用这个方法,并将 Message 作为参数传递。
在这个实现中,我们获得了消息的文本内容,并将它打印到 System.out。然后,检查消息是否等于 stop,如果是,则将 stop 变量设置为 true,这会使 receive() 方法中的循环终止。
- . . .
- public void onMessage(Message message) {
- try {
- String msgText = ((TextMessage) message).getText();
- System.out.println(msgText);
- if ("stop".equals(msgText))
- stop = true;
- } catch (JMSException e) {
- e.printStackTrace();
- stop = true;
- }
- }
- }
11、源码QSender.java 的代码清单
- import java.io.*;
- import javax.jms.*;
- import javax.naming.*;
- public class QSender {
- public static void main(String[] args) {
- new QSender().send();
- }
- public void send() {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- try {
- //Prompt for JNDI names
- System.out.println("Enter QueueConnectionFactory name:");
- String factoryName = reader.readLine();
- System.out.println("Enter Queue name:");
- String queueName = reader.readLine();
- //Look up administered objects
- InitialContext initContext = new InitialContext();
- QueueConnectionFactory factory =
- (QueueConnectionFactory) initContext.lookup(factoryName);
- Queue queue = (Queue) initContext.lookup(queueName);
- initContext.close();
- //Create JMS objects
- QueueConnection connection = factory.createQueueConnection();
- QueueSession session =
- connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
- QueueSender sender = session.createSender(queue);
- //Send messages
- String messageText = null;
- while (true) {
- System.out.println("Enter message to send or 'quit':");
- messageText = reader.readLine();
- if ("quit".equals(messageText))
- break;
- TextMessage message = session.createTextMessage(messageText);
- sender.send(message);
- }
- //Exit
- System.out.println("Exiting...");
- reader.close();
- connection.close();
- System.out.println("Goodbye!");
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
- }
12、源码QReceiver .java 的代码清单
- import java.io.*;
- import javax.jms.*;
- import javax.naming.*;
- public class QReceiver implements MessageListener {
- private boolean stop = false;
- public static void main(String[] args) {
- new QReceiver().receive();
- }
- public void receive() {
- BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
- try {
- //Prompt for JNDI names
- System.out.println("Enter QueueConnectionFactory name:");
- String factoryName = reader.readLine();
- System.out.println("Enter Queue name:");
- String queueName = reader.readLine();
- reader.close();
- //Look up administered objects
- InitialContext initContext = new InitialContext();
- QueueConnectionFactory factory =
- (QueueConnectionFactory) initContext.lookup(factoryName);
- Queue queue = (Queue) initContext.lookup(queueName);
- initContext.close();
- //Create JMS objects
- QueueConnection connection = factory.createQueueConnection();
- QueueSession session =
- connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
- QueueReceiver receiver = session.createReceiver(queue);
- receiver.setMessageListener(this);
- connection.start();
- //Wait for stop
- while (!stop) {
- Thread.sleep(1000);
- }
- //Exit
- System.out.println("Exiting...");
- connection.close();
- System.out.println("Goodbye!");
- } catch (Exception e) {
- e.printStackTrace();
- System.exit(1);
- }
- }
- public void onMessage(Message message) {
- try {
- String msgText = ((TextMessage) message).getText();
- System.out.println(msgText);
- if ("stop".equals(msgText))
- stop = true;
- } catch (JMSException e) {
- e.printStackTrace();
- stop = true;
- }
- }
- }
发表评论
-
JMS参考资料
2007-10-22 10:16 2106文章来源(IBM中国) 参 ... -
Java Message Service Pub/sub 编程
2007-10-22 10:11 1421文章来源(IBM中国) 相 ... -
Java Message Service Pub/sub 接口
2007-10-22 10:05 14021、介绍 (文章来源 IBM中国) 现在让我们来查看 Pub/ ... -
Java Message Service 点对点接口
2007-10-19 15:35 1544文章来源 (IBM 中国) 介 ... -
用共用接口进行客户机编程
2007-10-19 14:47 1408文章来源……IBM 中国 介绍 在这一节中,我们将查看两个进行 ... -
JMS 1.1 中的新内容:共用接口
2007-10-19 14:21 1265介绍 在这一节中,我们将介绍 JMS 客户机编程的每一个重要 ... -
Java Message Service 概述和体系结构
2007-10-19 12:09 1855文章来源……IMB中国 ... -
Java Message Service 介紹
2007-10-19 11:50 1661...
相关推荐
- **点对点API**:用于实现点对点消息传递模式的具体API。 - **发布/订阅API**:用于实现发布/订阅消息传递模式的具体API。 #### 深入理解 - **异构集成**:JMS支持不同系统间的通信,无论这些系统是基于哪种...
点对点编程模型适用于那些需要确切一次处理的应用场景,如订单处理或事务处理。 ### 发布/订阅接口与编程 与点对点模型不同,发布/订阅模型允许消息被多个订阅者接收。在这一模型中,消息生产者并不直接将消息发送...
JMS是Java平台中的一个关键组成部分,主要用于实现异步通信,并且支持消息的传递机制,如点对点(PTP)和发布/订阅(Pub/Sub)模式。 #### 二、JMS的优势 **1. 异构系统集成** JMS支持不同平台和编程语言之间的消息...
点对点短消息发送协议(SMPP)是一种用于在服务提供商和短消息实体之间传输SMS(Short Message Service)数据的应用层协议。Java实现的SMPP开发包源码为我们提供了理解和构建基于Java的短信发送系统的基础。这个开发...
- JMS(Java Message Service)中,观察者模式用于消息发布/订阅模型。 3. **Java编程范例**: - 多线程编程:通过Thread类或Runnable接口创建线程,理解同步机制如synchronized关键字、wait/notify机制。 - ...
它支持点对点(队列)和发布/订阅(主题)两种模式,实现异步解耦和可靠的消息传输。 4. **Java Mail技术**:Java Mail API提供了在Java应用中发送和接收电子邮件的功能。它可以处理SMTP、POP3和IMAP协议,允许...
第8章介绍了异步消息服务技术JMS(Java Message Service)和Java Mail技术,JMS允许应用程序之间通过消息传递进行通信,而Java Mail则是用于电子邮件处理的API。第9章则聚焦于利用WebLogic服务器的EJB(Enterprise ...
Java Message Service (JMS) 是Java平台中用于创建、发送、接收和读取消息的标准API。在Java EE中,JMS常用于实现异步通信,提高系统的响应速度和可扩展性。消息队列是JMS的一种实现,可以缓冲和转发消息,使得不同...
这个“基于SMPP协议的Java点对点短信发送源码包”提供了使用Java编程语言实现SMPP协议的具体示例,帮助开发者构建自己的短信服务系统。 SMPP协议是电信行业中用来处理SMS(Short Message Service)的开放标准,它...
6. **JMS(Java Message Service)**:Java消息服务允许应用程序之间进行异步通信。书中会介绍JMS的基本概念,如消息队列和主题,以及如何在Java EE应用中使用JMS进行解耦和异步处理。 7. **JPA(Java Persistence ...
Java实现的点对点短消息发送协议(SMPP)是一种基于TCP/IP协议栈的应用层协议,主要用于电信行业的短信服务。SMPP(Short Message Peer-to-Peer)为移动运营商和第三方应用提供了一种标准接口,使得应用程序能够直接...
5. **Java EE(Enterprise Edition)**:Java EE是Java平台的企业版,提供了一系列API和服务,如JSP、Servlet、EJB(Enterprise JavaBeans)、JMS(Java Message Service)等,用于开发分布式企业级应用。...
以上只是Java服务器高级编程的一些主要知识点,实际的学习和实践中,还需要对服务器环境配置、日志管理、性能监控、异常处理、故障排查等多个方面有深入的理解和实践经验。"www_sj00_com.txt"和"javaserverprogram02...