获得消息: J2EE 1.4 中的消息

在本文中,我将概述支持 1.4 版 J2EE 规范引入的消息所需的改变。我将特别分析 JMS 1.1 的需求以及使用时的新限制、与消息目标有关的新概念、以及 EJB 规范 2.1 版本为消息驱动 bean 所带来的显著变化。这些内容对于这些开发人员和管理人员特别有用:他们熟悉 J2EE 1.3 中的消息、并且希望编写新的应用程序或者将现有消息应用程序移植到兼容 J2EE 1.4 的应用服务器上。

JMS 1.1

兼容 J2EE 的应用服务器现在需要支持 1.1 版的 Java 消息服务(Java Message Server,JMS)规范,这也许是新版本 J2EE 规范中最明显的改变。JMS 1.1 完全向后兼容 J2EE 1.3 规范所要求的 JMS 1.1,所以应当不需要改变现有的应用程序。JMS 1.1 引入了统一消息域,在 Bobby Woolf 的 这篇文章 中对它做了详细的讨论。值得强调的是,除非需要向后兼容性,否则没有理由用老的队列和主题接口编写新的 JMS 应用程序。新的应用程序应当只使用新的统一接口,如清单 1 中的例子所示。

清单 1. 展示统一 JMS 接口的例子

InitialContext context = new InitialContext();
ConnectionFactory factory =
(ConnectionFactory) context.lookup("java:comp/env/jms/cf");
Destination source =
(Destination) context.lookup("java:comp/env/jms/source");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(source);
Message message = consumer.receive();
connection.close();

正如 Bobby 在他的文章中所说的,统一接口不仅简化了消息编程模型,它们还使应用程序可以用一个事务 Session 接收来自队列的消息,并向主题发送消息(或者相反)。这意味着可以在同一个事务工作单元中进行发送和接收,而无需借助于 bean 或者容器管理的事务。

J2EE 对 JMS 使用的限制

像以前版本的 J2EE 规范一样,1.4 版对 JMS 的使用有一些限制。我将在本节分析这些限制。

限制的接口

尽管许多开发人员可能不知道,但是 J2EE 规范对于 J2EE 应用程序如何使用 JMS API 总是有一些限制。例如,以下接口用于 JMS 提供者与应用服务器之间的集成(它们是在 JMS 规范中描述的 Application Server Facilities 的一部分),因而不能被应用程序使用:

javax.jms.ServerSession

javax.jms.ServerSessionPool

javax.jms.ConnectionConsumer

All javax.jms.XA interfaces

限制的方法

对于那些“应用程序组件在阻止创建线程的容器中不能执行”的方法,J2EE 1.3 规范给出了让人困惑的声明。EJB 容器不允许应用程序创建线程,但是一个 Web 容器 可以 允许应用程序这样做。结果,在 J2EE 1.3 中,根据所使用的 Web 容器,可以调用或者不可以调用这些方法。幸运的是,J2EE 1.4 规范删除了这些令人困惑的说法,只是说明下列方法只能被运行在客户容器中的应用程序所使用——换句话说,它们不会在 Web 或者 EJB 容器中调用:

javax.jms.ServerSession method setMessageListener()
javax.jms.ServerSession method getMessageListener()
javax.jms.Session method run()
javax.jms.QueueConnection method createConnectionConsumer()
javax.jms.TopicConnection method createConnectionConsumer()
javax.jms.TopicConnection method createDurableConnectionConsumer()
javax.jms.MessageConsumer method getMessageListener()
javax.jms.MessageConsumer method setMessageListener()
javax.jms.Connection method setExceptionListener()
javax.jms.Connection method stop()
javax.jms.Connection method setClientID()

时间: 2024-11-03 21:42:47

获得消息: J2EE 1.4 中的消息的相关文章

在VC++中利用消息制作启动封面

1.用Appwizard创建一个空的SDI工程Splash: 2.导入用作启动封面的图片: (1)在创建的新工程Splash中,选择ResourceView面板打开资源编辑器.右击"Splash resources",在打开的快捷菜单中选择"Insert"命令,选择其中的"Bitmap"选项,然后单击"Import"按钮,准备导入用做启动封面的BMP图形文件. (2)在ResourceView面板中,右击刚导入的"I

VB与VC混合编程中处理消息的方法

现在越来越多的人采用VB与VC的混合编程:用VB快速开发出漂亮的界面以及外围处理程序,再用VC编写底层的各种操作,例如内存的操作.IO端口的操作等,VC中还可以嵌入汇编语言进行更底层的操作. 一般的做法是将VC程序编译成DLL,在VB中用Declare语句声明DLL中的函数,例如: Declare Function SendCommand Lib ″c:\program files\devstudio\wjfprojects\Hr0506dllMnsr\debug\Hr0506dllMnsr.d

探索ASP.NET AJAX中的消息传输模式(二)

在上一篇<探索AJAX中的消息传输模式(一) >一文中,我主要介绍了普通字符串(Plain-text string)和XML格式的传输模式,然而在实际的开发应用中,这两种方法基本上可以足够应付我们的需求 了,不过在对于复杂的对象传输的时候,采用上面所介绍的这两种传输模式有点显得不理想.于此,本文 将结合<探索AJAX中的消息传输模式(一) >再介绍一种轻量级的数据交换格式JSON(JavaScript Object Notation) ,这是一种JavaScrpt自己的一种用来描述

探索ASP.NET AJAX中的消息传输模式(一)

在我们使用AJAX的应用中,消息传输有那些方式呢?纯文本.带HTML的文本.XML.JSON?还有??? 在许多情况下,纯文本的消息传输就足够了.例如,要传输一个用户名,用户密码,或是用户联系方法 (PHONE,EMAIL,MSN)等,通常都是以文本的形式传输的.又比如复杂点的数据信息,表格.对象或者是? ??,这样我们可以使用XML或是JSON来格式化数据后进行传输. 有这样一个AJAX的应用场合,提供一系列的标签连接,让用户任意选择,浏览器向服务器发送请求查 询得到想要的数据信息.下面就以这

深度解析VC中的消息(下)

前面,我们分析了消息的基本理论和基本的函数及用法,接下来,我们将进一步讨论消息传递在MFC中的实现. MFC消息的处理实现方式 初看MFC中的各种消息,以及在头脑中根深蒂固的C++的影响,我们可能很自然的就会想到利用C++的三大特性之一:虚拟机制来实现消息的传递,但是经过分析,我们看到事情并不是想我们想象的那样,在MFC中消息是通过一种所谓的消息映射机制来处理的. 为什么呢?在潘爱民老师翻译的<Visual C++技术内幕>(第4版)中给出了详细的原因说明,我再简要的说一遍.在CWnd类中大约

深度解析VC中的消息(中)

队列消息和非队列消息 从消息的发送途径来看,消息可以分成2种:队列消息和非队列消息.消息队列由可以分成系统消息队列和线程消息队列.系统消息队列由Windows维护,线程消息队列则由每个GUI线程自己进行维护,为避免给non-GUI现成创建消息队列,所有线程产生时并没有消息队列,仅当线程第一次调用GDI函数数系统给线程创建一个消息队列.队列消息送到系统消息队列,然后到线程消息队列:非队列消息直接送给目的窗口过程. 对于队列消息,最常见的是鼠标和键盘触发的消息,例如WM_MOUSERMOVE,WM_

深度解析VC中的消息(上)

消息是指什么? 消息系统对于一个win32程序来说十分重要,它是一个程序运行的动力源泉.一个消息,是系统定义的一个32位的值,他唯一的定义了一个事件,向Windows发出一个通知,告诉应用程序某个事情发生了.例如,单击鼠标.改变窗口尺寸.按下键盘上的一个键都会使Windows发送一个消息给应用程序. 消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息.例如,对于单击鼠标所产生的消息来说,这个记录中包含了单击鼠标时的坐标.这个记录类型叫做MSG,MSG含有来自windo

在C#应用程序与DLL交互中使用消息

C#是一种类似 Java 的完全面向对象的高级编程语言,其处理过程采用事件驱动方式,但在实际的使用过程中,有时候通过调用系统原有的消息处理起来会更简单,特别是在处理与DLL文件的交互时,实践证明的确是非常方便的. 在C#中使用自定义消息 在C#中使用自定义消息非常简单,只需要下面几个简单的步骤就可以了: 1.定义消息 定义消息的方法与在VC中定义消息有一点点不同,比如在VC中申明一个自定义消息是这样的: #define WM_TEST WM_USER + 101 而在C#中消息需要定义成 Win

微信公众帐号开发教程(十) 解析接口中的消息创建时间CreateTime

从微信公众平台的消息接口指南中可以看出,每种类型的消息定义中,都包含有CreateTime参数,它表示 消息的创建时间,如下图所示: 开发教程(十) 解析接口中的消息创建时间CreateTime-create time"> 上图是消息接口指南中4.1-文本消息的定义.注意CreateTime的描述:消息创建时间(整型),重点在于 这是一个整型的时间,而不是我们大家所熟悉的类似于"yyyy-MM-dd HH:mm:ss"的标准格式时间. 本文主要想介绍的就是微信消息接口中