《JMS简明教程(PDF格式)》第22章


或者当被接收到的消息是当前事务的一部分或者还没有在会话中确认时,删除一个永久订阅 
是错误的。
6。12 恢复和重发
非永久订阅者的未确认消息应当能够在非永久订阅者生存时被恢复。当非永久订阅者终 
止时,等待它的消息很可能被丢弃而不管是否被确认。
只有永久订阅可以可靠地恢复未确认消息。
向转发模式是PERSISTNET 的主题发送消息不会改变恢复和重发的模式。为了保证转发, 
TopicSubscriber 应当设置一个永久订阅。
6。13 管理订阅
理想情况下,发布者和订阅者都是在它们被创建时由提供商动态注册。从客户端视角来 
看,总是这样的。从管理员的角度看,可能需要其他任务来支持发布者和订阅者的创建。
为消息存储分配的资源的数量和资源过量的结果在JMS 中没有定义。
6。14 TopicRequestor
JMS 提供了TopicRequestor 帮助类来简化服务请求。
TopicRequestor 构造器需要传入 TopicSession 和目的地主题。它为响应创建了一个 
TemporaryTopic ,并提供了发送请求消息的request()方法然后等待回复。
这是最基本的请求/ 响应抽象,它可以满足大多数的用途。JMS 提供者和客户端可以自 
由地创建多种专业版本。
6。15 可靠性
当主题的所有消息必须被接收时,应当使用永久订阅。JMS 保证在永久订阅者不活动时 
48 / 66
…………………………………………………………Page 49……………………………………………………………
保留发布的消息,并在订阅者活动后将消息转发给它。
非永久订阅者只应当用于可以接受丢失的情况。
表6? Pub/Sub 可靠性
如何发布 非永久订阅 永久订阅
NON_PERSISTENT 最多一次(如果不活动则丢 最多一次
失)
PERSISTENT 一次只有一个(如果不活动则 一次只有一个
丢失)
7 JMS 异常
7。1 概述
本章对JMS 异常处理做了概述并定义了标准的JMS 异常。
7。2 JMSException
JMS 定义了JMSException 作为JMS 方法抛出的异常的根类。JMSException 是一个受检查 
异常,捕捉它就可以处理所有JMS 相关的异常。JMSException 提供了下面的信息:
z 提供商特有的描述错误的字符串——这个字符串是标准的 java 异常消息,可用 
getMessage()获得这个消息。
z 提供商特有的字符串型错误代码。
z 对另一个异常的引用——一个 JMS 异常通常是由底层问题引起。如果合适,底层 
异常可以被关联到JMS 异常。
JMS 方法在它们的标识符中只包含JMSException 。JMS 方法可以抛出任意的标准JMS 异 
常,以及JMS 供应商特有的异常。JMS 方法的javadoc 只给出了必需的异常情况。
7。3 标准异常
除了JMSException 外,JMS 定义了几个其他异常,它们标准化了基本错误原因的报告。
只有几种情况必须抛出指定的JMS 异常。这些情况在异常描述中用单词“必须”标出。 
这些情况都是唯一的,在这些情况下客户端逻辑应当根据特定的问题抛出特定的JMS 异常。
在其他情况下,强烈建议JMS 提供商尽可能使用标准的异常。JMS 提供商如果需要也可 
以从这些异常中提取供应商特有的异常。
JMS 定义了下面的标准异常:
z IllegalStateException:当在不合法或不合适的时间,或提供商没有处于处理请求操 
作的合适状态,则抛出这个异常。例如,如果 Session。mit()在非事务会话中被 
调用,则必须抛出这个异常。当调用与域不匹配的方法时,例如调用 
TopicSession。CreateQueueBrowser() ,必须抛出这个异常。
z JMSSecurityException :当提供商拒绝客户端提交的用户名/密码时必须抛出这个异 
49 / 66
…………………………………………………………Page 50……………………………………………………………
常。它也可以用于安全限制阻止方法完成的情况。
z InvalidClientException:当客户端企图设置连接的客户端标识,但提供商拒绝了这个 
标识的值时,就必须抛出这个异常。
z InvalidDestinationException:当提供商不能识别给定的目的地或目的地不再有效时, 
必须抛出这个异常。
z InvalidSelectorException:当 JMS 客户端企图用无效的语法向提供商提供消息选择 
器时,必须抛出这个异常。
z MessageEOFException:当正在读取StreamMessage 或ByteMessage 时到达了不期望 
的流结尾,则必须抛出这个异常。
z MessageRormatException:当JMS 客户端企图使用消息不支持的数据类型或企图将 
消息的数据读作错误的类型时,必须抛出这个异常。当消息属性值发生同样的类型 
错误时也必须抛出这个异常。例如,如果 StreamMessage。writeObject()被给了不支 
持的类或如果 StreamMessage。readShort()用于读取布尔值,则必须抛出这个异常。 
如果提供商被给了不能接受的类型,则也必须抛出这个异常。注意,一个特殊的情 
况是当企图读取不正确格式的 String 数据作为数值型值时,必须抛出 
java。lang。NumberFormatException 。
z MessageNotReadableException:当JMS 客户端企图读一个只可写的消息时必须抛出 
这个异常。
z MessageNotWriteableException:当JMS 客户端企图写一个只可读的消息时必须抛 
出这个异常。
z ResourceAllocationException:当提供商不能定位方法请求的资源时必须抛出这个异 
常。例如,当由于JMS 提供商资源缺失而导致调用createTopicConnection 失败时应 
当抛出这个异常。
z TransactionProgressException :当由于事务处于处理中而导致操作无效时抛出这个 
异常。例如,当会话时分布式事务的一部分时调用 Session。mit()应当抛出这个 
异常。
z TransactionRolledBackException :当调用Session。mit 导致当前事务回滚时必须抛 
出这个异常。
8 JMS 应用服务器工具
8。1 概述
本章描述用于并发处理订阅消息的JMS 工具。也定义了JMS 提供商如何支持JTS 可感知 
的会话。这些工具主要由JMS 提供商使用。
如果JMS 客户端使用JTS 可感知工具来进行客户端编程,则它可能是不可移植的,因为 
不要求JMS 提供商支持这些接口。
在本章中描述的工具是JMS 的一个特殊类别。它们是可选的,可能只有部分JMS 提供 
商对它们提供支持。
50 / 66
…………………………………………………………Page 51……………………………………………………………
8。2 并发处理订阅的消息
JMS 提供了一个特殊的工具用于创建Mes
小说推荐
返回首页返回目录