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


有消息服务。
提供商专有属性的目的是为提供商本地客户端提供特殊功能。他们不应当用于JMS 。
23 / 66
…………………………………………………………Page 24……………………………………………………………
3。6 消息确认
当客户端指定JMS 消费者的消息要显式地被确认时,所有的JMS 消息使用acknowledge 
方法来确认消息。
如果客户端使用自动确认,那么忽略对确认方法的调用。
参见4。4。11 章节“消息确认”了解更详细的信息。
3。7 Message 接口
Message 接口是所有 JMS 消息的根接口。它定义了 JMS 消息头字段、属性工具和 
acknowledge 方法。
3。8 消息选择
许多消息应用需要过滤和分类它们生产的消息。
在消息被发送到单个接收者的情况下,通过将标准放入消息中并在接收客户端丢弃它不 
感兴趣的消息来实现。
当消息被广播到许多客户端时,将选择标准放入消息头中是非常有用的,这样 JMS 提 
供商就可以知道这些标准。这样提供商就可以处理更多的过滤和路由工作,否则就需要应用 
来做这些工作。
JMS 提供了让客户端将消息选择代理给JMS 提供商的功能。这简化了客户端的工作,也 
可以让JMS 提供商减少时间和带宽,否则它们将会将客户端不需要的消息发送给客户端。
客户端使用消息属性将应用专有的选择标准附加到消息中。客户端用消息选择器表达式 
来指定消息选择标准。
3。8。1 消息选择器
JMS 消息选择器让客户端通过消息头指定它感兴趣的消息。只有头和属性匹配了选择器 
的消息才会被转发。“不转发”的语义随着使用的MessageConsumer 的不同而有所不同。参 
见5。8 章节“QueueReceiver ”和6。11 章节“TopicSubscriber ”了解更详细的信息。
消息选择器不能引用消息体内的值。
当消息头字段和属性值与它们在选择器中对应的标识符匹配时,如果选择器计算值为 
true ,那么消息选择器匹配了一个消息。
3。8。1。1 消息选择器语法
消息选择器是一个String,它的语法是SQL92 条件表达式语法的子集。(注:参见X/Open
CAE 规范数据管理:结构化查询语言(SQL ),版本2,ISBN:1?5912?51? 1996 年3 月)
如果消息选择器的值是空串,那么值被看作是null,表示消息消费者没有消息选择器。
消息选择器的计算顺序是从左到右。圆括号可以改变这个顺序。
预定义的选择器文法和操作符名字用大写字符出现在这里;但是它们是大小写敏感的。
24 / 66
…………………………………………………………Page 25……………………………………………………………
选择器可以包含:
z 文法
字符串用单引号括起来,在字符串内出现的单引号使用两个单引号表示(即用 
单引号做转义符);例如’literal’和’literal’’s’ 。类似java 的String 文法,它们使用 
Unicode 字符编码。
精确数值文法是没有小数点的数值,例如 57,?57,+62 ;支持Java 的 long 
取值范围。精确数值文法使用java 的Integer 文法语法。
近似数值文法是科学计数法,例如7E3 和?7。9E2,或带小数的数值,例如7。, 
?5。7 和+6。2 ;支持double 的取值范围。近似数值文法使用java 浮点数文法语 
法。
布尔文法是TRUE 和FALSE。
z 标识符
标识符是无限长的字符串,它必须以 java 标识符开始字符开头;下述的所有 
字符必须是java 的标识符局部字符(part character )。标识符开头字符可以是 
方法Character。isJavaIdentifierStart 返回true 的任何字符。包括’_’和’’ 。标识符 
局部字符是方法Character。isJavaIdentifierPart 返回true 的任何字符。
标识符不能是NULL,TRUE 或FALSE。
标识符不能是NOT,AND ,OR,BETWEEN,LIKE,IN,IS 或ESCAPE。
标识符可以是头字段引用或属性引用。消息选择器中的属性值类型与用于设置 
属性的类型一致。如果引用了消息中不存在的属性,那么它的值是 NULL。在 
选择器重NULL 值的计算在节3。8。1。2 “Null 值”描述。
应用到属性get 方法的转换不应用到那些消息选择器表达式使用的属性。例如, 
假 定 你 为 一 个 属 性 设 置 了 字 符 串 值 , 如 下 : 
myMessage。setStringProperty(“NumberOfOrders”;”2”);那么下面的在消息选择器 
中的表达式计算值将是 false ,因为字符串不能用在数学表达式 
中:”NumverOfOrders 》 1”
标识符是大小写敏感的。
消息头字段引用仅限于 JMSDeliveryMode ,JMSPriority ,JMSMessageID , 
JMSTimestamp ,JMSCorrelationID 和JMSType 。JMSMessageID ,JMSCorrelationID 
和JMSType 值可以是null,且如果是null 则被看作是NULL 值。
任何以“JMSX ”开头的名字是JMS 定义的属性名。
任何以“JMS_ ”开头的名字是提供商专有的属性名。
任何不以“JMS ”开头的名字是应用专有的属性名。
z 空格和Java 定义的一样:空格,水平tab ,格式填充符(form feed )和行结束符。
z 表达式:
选择器是条件表达式;选择器计算为true 则匹配,计算为false 获未知则不匹 
配。
算术表达式由算术表达式,算术运算符,值是数值的标识符和数值文法组成。
条件表达式由条件表达式,比较运算符,逻辑运算符,值是布尔的标识符和布 
尔文法组成。
z 用于改变表达式计算的顺序。
z 逻辑运算符的顺序优先级:NOT,AND ,OR
z 比较运算符:=,》,》=,
小说推荐
返回首页返回目录