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

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

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




    z  TextMessage——消息体包含的是 java。lang。String 。这个消息类型是基于一个假设: 

       String 消息被广泛的使用。这是因为XML 很可能变成一个代表JMS 消息内容的流行 

       机制。  

    z  ObjectMessage——消息包含了可序列化的 Java  对象。如果需要java  对象的集合, 

       那么可以使用在JDK1。2  中提供的集合类。  

    z  BytesMessage——消息包含了一个未解释的字节流。这个消息类型用于按字面编码 

       的消息体去匹配一个存在的消息格式。在许多情况下,它可能用于一种其他未定义 

       的消息类型。尽管 JMS  允许消息属性使用字节消息,但通常不会使用,因为这样 

       可能影响消息的格式。  



3。11。1 清除消息体  



    Message 的clearBody 方法重设消息体的值为’空’ 的初始化消息值,这个值由消息类型的 

由Session 提供的创建方法设置。清除消息体不会清除它的属性条目。  



3。11。2 只读消息体  



    当消息被接收时,它的消息体是只读的。如果企图改变消息体,那么必须抛出 

MessageNotWriteableException。如果消息体随后被清除,那么消息体的状态和新创建消息时 

的空消息体的状态一样。  



                                                                 28 / 66  

  


…………………………………………………………Page 29……………………………………………………………

                                                



3。11。3 由StreamMessage 和MapMessage 提供的转换  



     StreamMessage 和MapMessage 都支持相同的原始数据类型集合。  

     这些类型可以被显式地使用类型对应的方法来读写。它们也可以都作为对象被读写。例 

如,调用MapMessage。setInt(“foo”;6)等价于MapMessage。setObject(“foo”;new Integer(6))。提 

供两种形式是因为显式的方式对静态的编程更方便,但对象形式在编译时不知道类型时是需 

要的。  

     StreamMessage 和MapMessage 都支持下面的转换表。  

     标记为大写的必须支持。其他的必须抛出 MessageFormatException。如果传入数值的 

valueOf   方法的 String        是无效的,那么 String                  到数值的转换必须抛出 

java。lang。NumberFormatException 。  

     StreamMessage 和MapMessage 必须实现String 到布尔的转换,那和在Java 语言中定义 

的Boolean 的valueOf(String)转换一样。  

     企图读取 null       值作为 java      的原始类型必须看作用 null                值调用原始类型对应的 

valueOf(String)方法。由于char 不支持String 转换,因此企图读取null 值作为char 必须抛出 

NullPointerException。  

     用名字获取还没有被设值的MapMessage 字段按照null 值处理。  

     如果 StreamMessage      好哦 BytesMessage      的读方法抛出 MessageFormatException            或 

NumberFormatException,那么不能增加读指针所在的位置。随后的读必须能够通过重读数 

据作为不同的类型而从异常中恢复。  

     用行类型写的值可能被读作列类型。  

                       表3�7 用于StreamMessage 和MapMessage 的转换  



          boolean  byte  short  char          int   long     float  double  String  Byte'' 



boolean      ×                                                                 ×           



  byte                ×       ×               ×       ×                        ×           



  short                       ×               ×       ×                        ×           



  char                                 ×                                       ×           



   int                                        ×       ×                        ×           



  long                                                ×                        ×           



  float                                                       ×        ×       ×           



 double                                                                ×       ×           



 String      ×        ×       ×               ×       ×       ×        ×       ×           



 byte''                                                                                 ×  



3。11。4 用于非JMS 客户端的消息  



     很多企业消息系统支持自定义的 Stream 和/或 map 本地消息类型。尽管客户端可以使 

用BytesMessage 来构造这种形式的本地消息,但JMS 为StreamMessage 和MapMessage 类 

型提供了更加方便的API 。  

     例如,当客户端使用支持本地消息的JMS 提供商,且它希望发送既能被JMS 客户端又 

能被本地客户端读取的map 消息时,它是由MapMessage。当消息被发送时,提供商将它转 

换成本地格式。本地客户端然后就可以接收它。如果 JMS                                提供商接收它,那么提供商将它 



                                                                                      29 / 66  

  


…………………………………………………………Page 30……………………………………………………………

                                    



转换回MapMessage。  

    即使实现使用新定义的消息的新 JMS           应用时,应用可以选择使用 StreamMessage        和 

MapMessage 来保证非JMS 客户端能够读取消息。  

    如果JMS 客户端发送StreamMessage 或MapMessage,那么它必须被接收JMS 提供商转 

换成一个等价的StreamMessage 或MapMessage。当在JMS 客户端间传递时,消息必须保持 

它全部的格式。例如,作为MapMessage 发生的消息不能作为BytesMessage 消息被接收。  

    如果 JMS  提供商接收一个由本地客户端创建的消息,那么提供商应当将它尽力转换成 

 “最佳的”JMS 消息类型。例如,如果是本地流消息,那么它应当被转换成StreamMessage 。 

如果转换不了,那么提供商总能够将它转换成BytesMessage。  



3。12  JMS Message 接口的提供商实现  



    JMS 提供了一系列消息接口,这些接口定义了JMS 消息模型。它没有提供这些接口的实 

现。  

    每个 JMS  提供商提供它自己的会话的消息创建方法的实现。这可以让提供商来使用满 

足它需要的消息实现。  

    提供商必须能够从客户端接收不是它自己的消息实现。提供商可以不高效的处理外来消 

息实现,但它必须处理。  

    当提供商处理外来消息实现时需要注意下面的例外情况。如果外来消息实现包含 

JMSReplyTo 头字段,这个字段设置了外来地址实现,那么不要求提供商处理或保存这个头字 

段的值。  

    JMS 消息接口提供了写/set 方法来设置消息体内和消息属性内的对象的值。所有的这些 

方法必须复制它们输入的对象,然后放进消息中。输入对象的值可以是null,当获取时返回 

null 。一个例外是 BytesMessage  不支持空流的概念,因此企图向他写 null             则必须抛出 

java。lang。NullPointerException 。  

    JMS 消息接口提供读/get 方法来访问消息体和消息属性内的对象。所有的这些方法必须 

返回要获取对象的拷贝。  



4  JMS 公共工具  



4。1  概述  



    本章描述了在PTP 和Pub/Sub 域间共�
返回目录 上一页 下一页 回到顶部 赞(1) 踩(1)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!