友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

JMS简明教程(PDF格式)-第15章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




返回要获取对象的拷贝。  



4  JMS 公共工具  



4。1  概述  



    本章描述了在PTP 和Pub/Sub 域间共享的JMS 工具。  



4。2  受管理的对象  



    JMS  受管理的对象是那些包含JMS 配置信息的对象,这些配置信息由JMS  管理员创建 

然后由客户端使用。它们实际管理企业中的JMS 应用。  

    尽管受管理对象的接口不显式的依赖JNDI ,但JMS 为了JMS 客户端通过JNDI 查找的方 

便而设置了这个方便性。  

    管理员可以将受管理对象放到命名空间的任何位置。JMS 没有定义命名策略。  

                                                                 30 / 66  

  


…………………………………………………………Page 31……………………………………………………………

                                      



    区分JMS 和管理提供了几个好处:  

    z  它对客户端隐藏了提供商特有的配置信息。  

    z  他将JMS 可管理的信息抽象成容易被通用管理控制台组织和管理的java 对象。  

    z   由于有JNDI 提供商提供所有流行的命名服务,那么这意味着JMS 提供商可以转发 

       一个受管理对象的实现,这些对象可以运行在任何地方。  

    受管理对象不能持有任何远程资源。它的lookup 不应当使用远程资源,除了有JNDI  自 

己使用的资源以外。  

    客户端应当把受管理的对象看作是本地 java             对象。查找它们不应有任何隐藏边际影响 

或使用大量的本地资源。  

    JMS 定义了两个手管理对象,Destination 和ConnectionFactory 。  

    期望JMS  提供商为管理员提供创建和在JNDI  命名空间中配置受管理对象的工具。JMS 

提供商提供的手管理对象的实现应当是既javax。naming。Referencealbe 又java。io。Serializable 的, 

以便它们能够被存储在所有的JNDI 命名上下文中。另外,建议这些实现遵循JavaBean 的设 

计模式。  



4。2。1 Destination  



    JMS 没有定义标准的地址语法。尽管考虑到了,但在现存的地址语义有很大差别的企业 

消息产品间寻求一个单一的语法是不可能的。因此,JMS  定义了 Destination 对象来封装提 

供商特有的地址作为替代方案。  

    由于 Destination  是一个受管理对象,因此它可以包含除了地址外的提供商特有的配置 

信息。  

    JMS 也支持客户端使用提供商特有的地址名称。参加节4。4。4  “创建Destination 对象” 

了解更详细的信息。  

    Destination 支持并发使用。  



4。2。2 ConnectionFactory  



    ConnectionFactory 封装了一系列连接配置参数,这些参数由管理员定义。客户端使用它 

来创建和JMS 提供商的连接。  

    ConnectionFactory 对象支持并发使用。  



4。3  Connection  



    JMS Connection 是一个客户端到JMS 提供商间的活动连接。它通常分配在Java 虚拟机 

外部的提供商的资源。  

    Connection 对象支持并发使用。  

    Connection 用作几个目的:  

    z  它封装了一个与 JMS  提供商的连接。他通常代表一个在提供商服务域和客户端间 

       的打开的TCP/IP Socket 。  

    z  在客户端授权时创建它。  

    z  它可以指定一个唯一的客户端标识。  



                                                                    31 / 66  

  


…………………………………………………………Page 32……………………………………………………………

                                      



    z  它创建Session 对象。  

    z  它提供ConnectionMetaData 。  

    z  它支持可选的ExceptionListener。  

    由于在创建Connection 时设置授权和通讯,因此Connection 相对是重量级的JMS 对象。 

大多数客户端使用一个连接来执行所有的消息动作。其他更先进的应用可以使用多个 

Connection 。JMS 使用多个连接不是架构方面的原因(除了当客户端作为两个不同提供商间 

的网关时);但是可能有操作方面的原因。  



4。3。1 授权  



    当创建连接时,客户端可以指定它的信任状如用户名/密码。  

    如果没有指定信任状,那么使用当前线程的信任状。这一点上,JDK 没有定义线程缺省 

信任状的概念。但是在不久的将来可能会定义。目前,可以使用 JMS                       客户端运行使用的用 

户标识。  



4。3。2 客户端标识  



    设置客户端标识的最好方式是将它配置在一个客户端特有的 ConnectionFactory                  中,然 

后透明的将它赋给它创建的连接。另一个方法就是客户端可以用提供商特有的值来设置连接 

的客户端标识。显式地设置连接的客户端标识的工具不是一个用于覆盖已经被配置的标识的 

机制。它只是用于管理员没有配置标识的情况。如果标识已经存在,那么企图更改它必须抛 

出IllegalStateException。  

    如果客户端显式地设置标识,那么它必须在创建连接后和在连接上发生其他动作之前立 

即设置。如果在这个时刻后再设置,则设置客户端标识就是程序性错误,将抛出 

IllegalStateException。  

    客户端标识的目的是将连接和它的对象与由提供商按客户端维护的状态关联起来。按照 

定义,被客户端标识标识的客户端状态在一个时刻只能由一个客户端“在用”。JMS  提供商 

必须防止并发执行的客户端来使用它。  

    阻止方式可以是当企图这样使用时抛出各种 JMSException              的形式;也可以阻塞后续的 

客户端;或者是其他的解决方案。JMS 提供商必须保证这种共享单个客户端状态的企图不能 

引起消息的丢失或重复处理。  

    由JMS 标识的唯一的单个客户端状态要支持长期订阅。  



4。3。3 Connection 设置  



    JMS  客户端通常创建一个 Connection,一个或多个Session  和大量的 MessageProducer 

和MessageConsumer。当Connection 被创建时,它处于stopped 模式。意思是没有消息可以 

转发给它。  

    通常会让昂Connection 处于停止模式直到设置完成。设置完成后调用Connection。start() 

方法,且消息开始到达 Connection       的消费者。这种设置约定减小了客户端还在设置它自己 

时就有异步消息转发的问题。  

    Connection 可以立即启动然后再进行设置。这样,客户端必须做好它们在设置过程中处 



                                                                   32 / 66  

  


…………………………………………………………Page 33……………………………………………………………

                                  



理异步消息转发的准备。  

   MessageProducer 可以在Connection 是停止时发送消息。  

   要注意,客户端必须在连接启动后它才能转发消息。JMS 提供商必须保证这种情况。  



4。3。4 中止消息的转发  



   连接对接收到的消息的转发可以使用 stop()方法被临时停止。可以使用 start()方法重新 

启动它。当连接被停止时,禁止向所有连接的 MessageConsumer 进行转发:同步接收被阻 

塞,消息不被转发到MessageListener。  

   停止连接对发送消息没有影响。停止一个已经停止的连接和启动一个已经启动的连接被 

忽略。  

   在消息的转发被停止后才能返回 stop  方法。这意味着停止后,不会调用任何消息监听 

器,并且所有的等待接收消息的控制线程在连接重新启动前不会返回消息。用于已停止连接 

的的接收计时器仍然有效,因此接收可能会超时并返回一个空消息。  

   如果stop 方法被调用时消息监听器(MessageListener)仍在运行,则必须在所有的监听器 

都返回后才能停止。
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!