16boke - 一路博客

JMS异常

7.1 概述

本章对JMS异常处理做了概述并定义了标准的JMS异常。

7.2 JMSException

JMS定义了JMSException作为JMS方法抛出的异常的根类。JMSException是一个受检查异常,捕捉它就可以处理所有JMS相关的异常。JMSException提供了下面的信息:

• 提供商特有的描述错误的字符串——这个字符串是标准的java异常消息,可用getMessage()获得这个消息。

• 提供商特有的字符串型错误代码。

• 对另一个异常的引用———一个JMS异常通常是由底层问题引起。如果合适,底层异常可以被关联到JMS异常。

JMS方法在它们的标识符中只包含JMSException。JMS方法可以抛出任意的标准JMS异常,以及JMS供应商特有的异常。JMS方法的javadoc只给出了必需的异常情况。

7.3 标准异常

除了JMSException外,JMS定义了几个其他异常,它们标准化了基本错误原因的报告。

只有几种情况必须抛出指定的JMS异常。这些情况在异常描述中用单词“必须”标出。这些情况都是唯一的,在这些情况下客户端逻辑应当根据特定的问题抛出特定的JMS异常。

在其他情况下,强烈建议JMS提供商尽可能使用标准的异常。JMS提供商如果需要也可以从这些异常中提取供应商特有的异常。

JMS定义了下面的标准异常:

• IllegalStateException:当在不合法或不合适的时间,或提供商没有处于处理请求操作的合适状态,则抛出这个异常。例如,如果Session.commit()在非事务会话中被 调用,则必须抛出这个异常。当调用与域不匹配的方法时,例如调用TopicSession.CreateQueueBrowser(),必须抛出这个异常。

• JMSSecurityException:当提供商拒绝客户端提交的用户名/密码时必须抛出这个异常。它也可以用于安全限制阻止方法完成的情况。

• InvalidClientException:当客户端企图设置连接的客户端标识,但提供商拒绝了这个标识的值时,就必须抛出这个异常。

• InvalidDestinationException:当提供商不能识别给定的目的地或目的地不再有效时,必须抛出这个异常。

• InvalidSelectorException:当JMS客户端企图用无效的语法向提供商提供消息选择器时,必须抛出这个异常。

• MessageEOFException:当正在读取StreamMessage或ByteMessage时到达了不期望的流结尾,则必须抛出这个异常。

• MessageRormatException:当JMS客户端企图使用消息不支持的数据类型或企图将消息的数据读作错误的类型时,必须抛出这个异常。当消息属性值发生同样的类型错误时也必须抛出这个异常。例如,如果StreamMessage.writeObject()被给了不支持的类或如果StreamMessage.readShort()用于读取布尔值,则必须抛出这个异常。如果提供商被给了不能接受的类型,则也必须抛出这个异常。注意,一个特殊的情况是当企图读取不正确格式的String数据作为数值型值时,必须抛出java.lang.NumberFormatException。

• MessageNotReadableException:当JMS客户端企图读一个只可写的消息时必须抛出这个异常。

• MessageNotWriteableException:当JMS客户端企图写一个只可读的消息时必须抛出这个异常。

• ResourceAllocationException:当提供商不能定位方法请求的资源时必须抛出这个异常。例如,当由于JMS提供商资源缺失而导致调用createTopicConnection失败时应当抛出这个异常。

• TransactionProgressException:当由于事务处于处理中而导致操作无效时抛出这个异常。例如,当会话时分布式事务的一部分时调用Session.commit()应当抛出这个异常。

• TransactionRolledBackException:当调用Session.commit导致当前事务回滚时必须抛出这个异常。