- 浏览: 375964 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
一半水分子:
你好,我想转载您的文章,需要获取您的许可,请您在看到这条评论时 ...
Centos7 卸载ibus无法进入桌面 -
flylynne:
1、 车辆证书,发票和合格证都要齐全,不能听他们说是分开的,因 ...
技术内容 -
josico:
问一下,如果1替换成 M2替换成 N3替换成 O那其实不要这样 ...
SQL replace的使用 -
xiezhiwei0314:
lomboz 目录我也没有看到
Eclipse SDK安装web开发插件 -
xiezhiwei0314:
我安装好tomact插件但是没有看到web那个目录!在网上查了 ...
Eclipse SDK安装web开发插件
JMS API
JMS源于企业应用对于消息中间件的需求,使应用程序可以通过消息进行异步处理而互不影响。JMS应用程序有四个组成部分:JMS服务提供者、消息管理对象、消息的生产者消费者和消息本身。
l JMS服务提供者实现消息队列和通知,同时实现消息管理的API。JMS已经是J2EE API的一部分,J2EE服务器都提供JMS服务。
l 消息管理对象提供对消息进行操作的API。JMS API中有两个消息管理对象:ConnectionFactory和Destination,根据消息的消费方式的不同ConnectionFactory可以分为QueueConnectionFactory和TopicConnectionFactory,Destination可以分为Queue和Topic。用这两个管理对象可以建立到消息服务的会话。
l 消息的生产者和消费者。它们可以毫不相干,只需要消息的消费者知道如何使用消息即可。根据消息消费者数目的不同,消息的消费者分为两类:subscriber 和receiver,同样消息发送者也分为两类:Publisher和Sender。
l 消息。JMS API规定了五种消息:Message、MapMessage、TextMessage、ByteMessage、StreamMessage和ObjectMessage
消费形式的不同造成JMS有两组平行的API,这就是JMS的PTP(point to point)模型和PUB/SUB(publisher和subscriber、出版和订阅)模型。PTP的消息应用中一个消息只有一个消费者,消费后该消息即不再有效。而PUB/SUB应用中一个消息可以有多个订阅者,而且每个订阅者不一定非要处理该消息。
下面是JMS应用的基本模型:
开发工具是JBuilder和WebLogic。
动手实现
1. 发送和接收消息。需要使用JMS API手动编码实现发送和接收消息的有三个地方:发送消息的Servlet、接收消息的Servlet和发送计算完成消息的MessageDrivenBean。对于发送和接收消息都需要的QueueConnectionFactory、QueueConnection、Queue和QueueSession等对象则利用Servlet和MDB的生命周期方法获得和释放,在Servlet的init方法和MDB的ejbCreate方法中获得资源并创建需要的对象,在Servlet的destroy和MDB的ejbRemove方法中释放资源。
获得资源:
public void init() throws ServletException {
try{
InputStream in = this.getClass().getClass().getClassLoader().
getResourceAsStream("jndi.properties");
Properties p = new Properties();
p.load(in);
ctx = new InitialContext(p);
}catch(Exception ex){
ex.printStackTrace();
}
try{
connectionFactory = (QueueConnectionFactory) ctx.lookup(
connectionFactoryName);
queue = (Queue) ctx.lookup(queueName);
connection = (javax.jms.QueueConnection) ( (QueueConnectionFactory)
connectionFactory).
createQueueConnection();
queueSession = ( (javax.jms.QueueConnection) connection).
createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
queueSender = queueSession.createSender(queue);
}catch(Exception ex){
ex.printStackTrace();
}
}
发送消息:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String taskid = request.getParameter("taskid");
try{
String completedmsg = "任务" taskid "执行完成";
ObjectMessage om = queueSession.createObjectMessage(new CalculateCompleted(userid, taskid, completedmsg));
queueSender.send(om);
}catch(Exception ex){
ex.printStackTrace();
}
}
接收消息。这里对消息在Servlet中作了转存,messages是一个Hashtable对象。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
boolean rflag = true;
try {
messageConsumer = (QueueReceiver) queueSession.createReceiver(queue);
connection.start();
while (rflag) {
Message m = messageConsumer.receiveNoWait();
if (m != null) {
if (m instanceof ObjectMessage) {
ObjectMessage message = (ObjectMessage) m;
MessageBody mb = (MessageBody)message.getObject();
ArrayList a = (ArrayList)messages.get(mb.getUserID());
if(a == null){
a = new ArrayList();
a.add(mb);
messages.put(mb.getUserID(), a);
}else{
a.add(mb);
}
}
else {
rflag = false;
}
}
else {
rflag = false;
}
}
connection.stop();
}
catch (JMSException e) {
e.printStackTrace();
}
}
释放资源:
public void destroy() {
try{
if(connection != null)connection.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
MDB的jebCreate方法和上面init方法的内容一样,ejbRemove和上面destroy方法的内容相同。MDB的计算过程实现在onMessage()方法中,计算完成后发送一条消息,发送消息的过程上面已有,不再赘述。
2. WebLogic的JMS服务配置。这里使用最简单的JMS配置,除了名字和JNDI名其余的均使用缺省值。
a) 启动WebLogic,打开web console
b) 展开左侧的JMS节点,新建一个JMS Server。名字随意。
c) 为刚建立的JMS Server建立两个Queue。JNDI名分别为::jms/calculate和jms/completed。
d) 建立一个ConnectionFacotry。JNDI名:jms/conn_factory
3. 配置MDB。这里除了要指定MDB监听的Queue外,因为MDB需要向另外的Queue发送计算成功的消息,还需要把上面WebLogic中配置的jms/conn_factory作为资源添加到MDB的resource-ref中,把jms/completed作为环境资源添加到MDB的resource-env-resource中。
4. 部署执行。用JBuilder建立一个EAR然后部署,非常简单。如果各位想要测试只需要建立一个简单的客户端应用程序,然后将MDB的onMessage方法简单实现为消息转发就可以了。
总结
JMS是一组很强大的API,不仅可以在一个应用程序中实现异步通信,也常被用来在不同的应用程序间传递数据,同时JMS也支持分布式事务,达到了企业应用的要求
发表评论
-
SQL 语句大全
2020-08-21 12:12 261一、基础 1、说明:创建数据库CREATE DATABA ... -
kafka技术题
2020-08-20 10:06 3591.Kafka 的设计时什么样的呢? Kafka 将消息以 ... -
大数据基础知识
2018-07-13 17:37 0mapreduce工作原理 MapReduce模型主要包含 ... -
题海 JAVA和大数据
2018-07-13 17:36 01、HashMap 源码解读(TreeMap. LinkedH ... -
spark 题目和答案 精典题
2018-07-13 17:03 0Spark Core面试篇01 新增《Spark面试2000 ... -
技术内容
2018-06-07 16:27 4011、HashMap 源码解读(TreeMap. Lin ... -
java面试题及答案(基础题122道,代码题19道)
2017-11-24 10:35 18351。请大概描述一下Vector和ArrayList的区别,H ... -
百度“Java面试题”前200页
2017-11-24 10:17 952基本概念 操作系统中 heap 和 stac ... -
Java 相关知识
2017-10-26 18:05 747内存泄漏(memory leak)? 指由于疏 ... -
简单网络爬虫基础功能
2016-11-09 23:25 605package com.common; //http: ... -
java读取文件夹下所有文件并替换文件每一行中指定的字符串
2016-04-26 00:28 1234import java.io.BufferedReader; ... -
Java多线程面试、笔试方向
2015-04-16 09:17 9421.ThreadLocal类 线程级别的局部变量, ... -
深入ThreadLocal的内部机制
2015-03-15 00:23 640JDK 1.2的版本中就提供java.lang.Thread ... -
单例模式的七种写法
2015-03-06 17:15 738转载请注明出处:http://cantellow.iteye ... -
Java itoa,atoi
2014-10-28 14:49 1615package com.arithmetic; pub ... -
正则表达
2014-10-15 17:25 722Pattern类中的一些 特殊字符。大家可以参考下,以便以 ... -
tomcat_garbage collection_log(垃圾回收日志)参数设置
2014-09-30 15:31 1382@echo off if "%OS%&q ... -
JDK中的URLConnection参数详解
2014-08-12 14:56 622转自:http://www.blogja ... -
java.lang.ClassNotFoundException: org.apache.commons.collections.map.ListOrdered
2014-07-29 10:21 1569java.lang.ClassNotFoundExcept ... -
java Web应用配置log4j日志记录
2014-03-31 07:34 1508仅限学习使用,转自http://www.blogjava. ...
相关推荐
12. **Java EE相关**:虽然不是Java SE的主要内容,但可能会涉及Servlet、JSP、EJB、JMS、JNDI等Java企业级应用技术。 13. **设计模式**:介绍常见的设计模式,如单例模式、工厂模式、装饰者模式、代理模式、观察者...
基于Java通讯开发jms源代码 (jms通讯开发源码) java,net,socket,通讯开发,jms /* * @(#)Message.java 1.60 02/04/09 * * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved. * * SUN ...
《Java开发实战1200例》是一本深入浅出的Java编程教程,它通过1200个实例,全面覆盖了Java语言的基础知识、面向对象编程、异常处理、集合框架、多线程、网络编程、数据库操作、图形用户界面设计、Swing应用、XML处理...
《疯狂java实战演义》是知名Java编程教育专家李刚老师的一部著作,该书深入浅出地介绍了Java编程语言的各个方面,旨在帮助读者从零基础到熟练掌握Java技术。光盘内容通常包括书中提到的实例代码、配套教程以及其他...
《Java开发实战经典》是李兴华老师的一部著作,主要针对Java编程语言进行深入浅出的讲解,旨在帮助读者掌握Java开发的核心技能,并具备实际项目开发的能力。这本书的内容覆盖了Java开发的各个方面,包括基础语法、...
10. **Java EE应用开发**:虽然标题未明确提及,但作为实战指南,可能还会涉及Java企业版(Java EE)的相关内容,如Servlet、JSP、EJB、JMS、JPA等。 通过这本书的学习,读者不仅可以掌握Java编程的基本技能,还能...
文件"基于Spring的JMS编程-1"可能包含了关于如何在Spring环境中配置和使用JMS的详细步骤,包括XML配置、代码示例以及可能的实战项目案例。进一步学习这些内容,你将能够熟练掌握Spring框架下的JMS编程技巧,从而在...
总结,这个"java ee基础使用教程"涵盖了Java EE开发的各个方面,从基础的Servlet和JSP到复杂的EJB和JMS,再到安全和应用服务器的管理。通过郑阿奇的指导,你可以系统地学习并掌握Java EE开发,为自己的职业生涯打下...
《Java开发实战1200例》是一本深入浅出的Java编程教程,它涵盖了Java开发的各个方面,旨在帮助读者从新手快速成长为熟练的Java开发者。本书通过丰富的实例,将理论与实践紧密结合,使得学习过程更为生动且具有针对性...
Java EE项目实战与Java项目源码教程资源是一个深入学习Java企业级应用开发的重要资料集合。这个资源包,名为"java-project-practice-master",显然包含了完整的Java EE项目的源代码,适合于学生、开发者或者对Java...
《Java EE核心框架实战》是一本深度探讨Java企业级应用开发的实践指南,旨在帮助开发者掌握Java EE(以前称为J2EE)的核心技术,并能够运用这些技术构建高效、可扩展的分布式应用程序。这本书以实际案例为引导,通过...
《Java Web 整合开发 完全自学手册》是一本深度探讨...通过本书提供的源代码,读者可以深入理解每个知识点的实际应用,加深对Java Web开发的理解,并提升实战能力。无论是初学者还是有经验的开发者,都能从中受益匪浅。
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用集成的API,主要用于在分布式环境中传递消息,实现应用程序之间的异步通信。...阅读“JMS教程.pdf”将更深入地了解JMS的细节和实践技巧。
PDF文档中可能包含了以下章节:JMS简介、消息模型、消息格式、消息代理的配置与管理、JMS API详解、案例研究和实战演练等内容。通过学习这份教程,读者不仅可以了解JMS规范的理论,还能通过实例学习如何在实际项目中...
Java消息服务(JMS)是Java平台上的一个标准接口,用于在分布式环境中交换异步消息。...这个教程将覆盖以上所有内容,通过学习,开发者将能够熟练地在Java应用中集成和使用JMS与ActiveMQ,实现高效、可靠的消息传递。
Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它允许应用程序创建、发送、接收和读取消息。在分布式系统中,JMS扮演着至关重要的角色,它能够实现组件间的解耦,...
【EJB学习大全】是针对企业级Java应用开发的一个重要主题,主要涵盖了EJB3.0、JPA教程以及实战EJB的相关知识。EJB,全称为Enterprise JavaBeans,是Java平台上的一个核心组件,主要用于构建分布式、面向服务的企业级...
8. **Java EE**:如果教程内容深入到企业级开发,那么可能会涵盖Java的服务器端技术,如Servlet、JSP、JavaServer Faces(JSF)、Java Persistence API(JPA)和Java Message Service(JMS)等。 9. **实战项目**:...
5. **Java EE组件**:包括EJB(Enterprise JavaBeans)、JMS(Java Message Service)和JTA(Java Transaction API)等,它们为Java Web应用提供了企业级服务,如分布式计算、消息传递和事务管理。 6. **Web容器**...
总之,《Java Web开发实战1200例(第2卷)》是一本深入浅出的教程,不仅介绍了Java Web开发的基本概念和技术,还提供了大量实例和技巧,帮助开发者快速上手并解决实际问题。通过学习和实践书中的内容,无论是初学者...