友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
JMS简明教程(PDF格式)-第5部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
java 原始类型必须看作是调用原始类型的valueOf(String)转换方法来转换null 值。
设置为行总的类型,读作列中的类型。
表3�2 属性值转换
boolean byte short int long float double String
boolean × ×
byte × × × × ×
short × × × ×
int × × ×
long × ×
float × × ×
double × ×
String × × × × × × × ×
21 / 66
…………………………………………………………Page 22……………………………………………………………
3。5。5 属性值作为对象
除了特定类型的属性有set/get 方法外,JMS 提供了setObjectProperty/getObjectProperty
方法。这两个方法支持设置使用对象化的原始类型的属性。它们用于在运行时来决定属性类
型而不是在编译时决定。它们支持同样的属性值转换。
setObjectProperty 方法接受Boolean,Byte,Short,Integer,Long,Float,Double 和String
的值。企图使用其他的类必须抛出MessageFormatException。
getObjectProperty 方法只返回null,Boolean,Byte,Short,Integer,Long,Float,Double
和String 的值。如果指定的属性名不存在则返回null。
3。5。6 属性迭代
没有定义属性值的排序。为了通过消息的属性值来迭代,那么使用 getPropertyNames
来取得所有的属性名,然后使用不同的属性get 方法来取出它们的值。
方法getPropertyNames 没有返回JMS 标准头字段的名字。
3。5。7 清除消息属性的值
通过clearProperties 方法来删除消息的属性。这会使消息有一个空的属性集。然后可以
创建和读取新的属性条目。
清除消息的属性条目不会清理消息体的值。
一旦私有属性条目被添加到消息中,则JMS 没有提供删除它的途径。
3。5。8 不存在的属性
按名字获取一个还没有被赋值的属性值则按照属性被赋了null 值来处理。
3。5。9 JMS 定义的属性
JMS 保留了“JMSX ”作为JMS 属性名的前缀。这些属性都在表3�3 中。新的JMS 定义
的属性可能在后续版本中增加。
除非说明否则支持这些属性是可选的。ConnectionMetaData。getJMSXPropertyNames()方
法返回所有连接支持的JMSX 属性的名字。
无论连接是否支持JMSX 属性,它们都可以在消息选择器中使用。如果消息中没有这些
属性,那么它们与其他缺席属性一样看待。
在特定消息中,存在JMS 定义的属性,它们是由JMS 提供商根据如何控制属性的使用
来设置的。根据管理或其它规则,可以在某些消息中包含它们在其他消息中忽略它们。
表3�3 JMS 定义的属性
名字 类型 设置者 用法
JMSXUserID String 发送时提供商设置 发送消息的用户标识
JMSXAppID String 发送时提供商设置 发送消息的应用标识
22 / 66
…………………………………………………………Page 23……………………………………………………………
JMSXDeliveryCount int 发送时提供商设置 转发消息重试次数;
第一次是1,第二次
是2,…
JMSXGroupID String 客户端 消息所在消息组的标
识
JMSXGroupSeq int 客户端 组内消息的序号;第
一个消息是1,第二
个是2,…
JMSXProducerTXID String 发送时提供商设置 产生消息的事务的事
务标识
JMSXConsumerTXID String 接收时提供商设置 消费消息的事务的事
务标识
JMSXRcvTimestamp long 接收时提供商设置 JMS 转发消息到消费
者的时间
JMSXState int 提供商 假定存在一个消息仓
库,它存储了每个消
息的单独拷贝,且这
些消息从原始消息被
发送时开始。
每个拷贝的状态有:1
(等待),2 (准备),
3 (到期)或4 (保留)。
由于状态与生产者和
消费者无关,所以它
不是由它们来提供。
它只和在仓库中查找
消息相关,因此JMS
没有提供这种API 。
消息生产者和消费者都可以获取由提供商在发送时设置的JMSX 属性。在接收时由提供
商设置的JSMX 属性只能由消费者获取。
如果客户端希望对消息进行分组,那么JMSXGroupID 和JMSXGroupSeq 是标准的属性。
所有的提供商必须支持他们。
如果要使用JMSX 属性,则必须用上表中定义的名字。
除非特殊说明,否则JMSX 属性的值和语义是未下定义的。
3。5。10 提供商专有的属性
JMS 为提供商专有的属性保留了“JMS_ ”属性名前缀。每个提供商定义
了他们自己的值。JMS 提供商使用这个机制来让JMS 客户端可以获取它的所
有消息服务。
提供商专有属性的目的是为提供商本地客户端提供特殊功能。他们不应当用于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�85912�151�9 1996 年3 月)
如果消息选择器的值是空串,那么值被看作是null,表示消息消费者没有消息选择器。
消息选择器的计算顺序是从左到右。圆括号可以改变这个顺序。
预定义的选择器文法和操作符名字用大写字符出现在这里;但是它们是大小写敏感的。
24 / 66
…………………………………………………………Page 25……………………………………………………………
选择器可以包含:
z 文法
字符串用单引号括起来,在字符串内出现的单引号使用两个单引号表示(即用
单引号做转义符);例如’literal’和’literal’’s’ 。类似java 的String 文法,它们使用
Unicode 字符编码。
精确数值文法是没有小数点的数值,例如 57,�957,+62 ;支持Java 的 long
取值范围。精确数值文法使用java 的Integer 文法语法。
近似数值文法是科学计数法,例如7E3 和�57。9E2,或带小数的数值,例如7。,
�95。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 比较运算符:=,》,》=,
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!