按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
9。4 JMS 消息类型
有五个 JMS 消息类型。本节提供了如何创建和解包每种消息类型的例子。在每个例子
中,在消息中的数据都是与股票报价相关的数据。任何情况下,创建消息真正内容的代码都
是可以忽略的。
9。4。1 创建TextMessage
在这个例子中,股票报价信息作为 TextMessgae 被发送。TextMessage 携带了可以被客
户端作为文本字符串读取的消息。
下面的代码解释了如何创建这样的消息:
String stockData; /* Stock information as a string */
TextMessage message;
message = session。createTextMessage();
/* Set the stockData string to the message body */
message。setText(stockData);
9。4。2 解包TextMessage
为了解包TextMessage ,客户端使用Message。getText 方法。
String stockInfo; /* String to hold stock info */
stockInfo = message。getText();
9。4。3 创建BytesMessage
股票报价信息可以以字节格式发送,服务器知道如何构造它,客户端知道如何作为股票
报价来解析和展现它。它作为BytesMessage 被发送。
这样的消息可以按下面的方式来构造:
byte'' stockData; /* Stock information as a byte array */
BytesMessage message;
message = session。createBytesMessage();
message。writeBytes(stockData);
9。4。4 解包BytesMessage
当收到BytesMessage 时,可以按照以下方式来解包:
byte'' stockInfo; /* Byte array to hold stock information */
int length;
length = message。readBytes(stockData);
消息体被复制到字节数组。客户端程序然后可以开始读和解析数据。
61 / 66
…………………………………………………………Page 62……………………………………………………………
9。4。5 创建MapMessage
由服务器发送的每个股票消息都可以是不同股票报价名字/ 值对的映射,使用
MapMessage。例如,它可以包含以下条目:
z 股票订价名称——String
z 当前的值——double
z 订价时间——long
z 最后更新——double
z 股票信息——String
为了构造MapMessage,客户端程序使用不同的与MapMessage 关联的set 方法(setString,
setLong 等等),并在MapMessage 中设置命名的值。
String stockName; /* Name of the stock */
double stockValue; /* Current value of the stock */
long stockTime; /* Time the stock quote was updated */
double stockDiff; /* the +/hange in the stock quote*/
String stockInfo; /* Other information on this stock */
MapMessage message;
message = session。createMapMessage();
注意,下面的设置可以按任何顺序进行:
/* First parameter is the name of the map element;
* second is the value
*/
message。setString(〃Name〃; 〃SUNW〃);
message。setDouble(〃Value〃; stockValue);
message。setLong(〃Time〃; stockTime);
message。setDouble(〃Diff〃; stockDiff);
message。setString(〃Info〃; 〃Recent server announcement causes market
interest〃);
9。4。6 解包MapMessage
为了解包MapMessage,客户端程序使用不同的与MapMessage 相关的get 方法来获取
MapMessage 各元素的值。在下面的例子中,客户端程序希望得到某些MapMessage 元素。
String stockName; /*Name of the stock */
double stockValue; /* Current value of the stock */
long stockTime; /* Time of the stock update */
double stockDiff; /* +/hange in the stock */
String stockInfo; /* Information on this stock */
通过使用 get 方法和提供期望的值的名字从消息中取出的数据。可以按任意顺序从
MapMessage 中得到它的元素。
stockName = message。getString(〃Name〃);
stockDiff = message。getDouble(〃Diff〃);
stockValue = message。getDouble(〃Value〃);
62 / 66
…………………………………………………………Page 63……………………………………………………………
stockTime = message。getLong(〃Time〃);
如果客户端需要得到 MapMessage 的元素列表,那么它可以使用
MapMessage。getMapNames 方法。
9。4。7 创建StreamMessage
与MapMessage 类似,应用可以发送由按序写入消息的不同字段组成的消息,每个字段
都是原始数据类型。使用StreamMessage 来实现。下面的原始类型赋给股票报价消息的每一
项。
z 股票订价名称——String
z 当前的值——double
z 订价时间——long
z 最后更新——double
z 股票信息——String
客户端可能只对某些消息字段感兴趣,但在使用StreamMessage 的情况下,客户端必须
按顺序读并暗地抛弃每个字段。
在下面的例子中,已经设置了下面字段的值:
String stockName; /* Name of the stock */
double stockValue; /* Current value of the stock */
long stockTime; /* Time of the stock update */
double stockDiff; /* +/hange in the stock quote */
String stockInfo; /* Information on this stock*/
StreamMessage message;
/* Create message */
message = session。createStreamMessage();
下面的元素必须按照它们被读取的顺序写入StreamMessage 。注意,它们不是单独命名
的属性,和MapMessage 中一样。
/* Set data for message */
message。writeString(stockName);
message。writeDouble(stockValue);
message。writeLong(stockTime);
message。writeDouble(stockDiff);
message。writeString(stockInfo);
9。4。8 解包StreamMessage
StreamMessage 的元素必须按照写入的顺序被读取。
String stockName; /* Name of the stock quote */
double stockValue; /* Current value of the stock */
long stockTime; /* Time of the stock update */
double stockDiff; /* +/hange in the stock quote */
String stockInfo; /* Information on this stock */
stockName = message。readString();
63 / 66
…………………………………………………………Page 64……………………………………………………………
stockValue = message。readDouble();
stockTime = message。readLong();
stockDiff = message。readDouble();
stockInfo = message。readString();
9。4。9 创建ObjectMessage
股票信息可以以特殊的 StockObject 对象的形式被发送。这个对象然后作为
ObjectMessage 的消息体被发送。ObjectMessage 可以用于发送java 对象。
使用那些StockObject 实现中互不重复的方法来设置这些值。例如,StockObject 可以有
设置不同数据值的方法。使用StockObject 的应用可能看起来类似如下代码:
String stockName; /* Name of the stock quote */
double stockValue; /* Current value of the stock */
long stockTime; /* Time of the stock update */
double stockDiff; /* +/hange in the stock quote */
String stockInfo; /* Information on this stock */
/* Create a StockObject */
StockObject stockObject = new StockObject();
/* Establish the values for the StockObject */
stockObject。setName(stockName);
stockObject。setValue(stockValue);
stockObject。setTime(stockTime);
stockObject。setDiff(stockDiff);
stockObject。setInfo(stockInfo);
为了创建ObjectMessage,将StockObject 传入消息,你将按下面的方式来实现:
/* Create an ObjectMessage */
ObjectMessage message;
message = session。createObjectMessage();
/* Set the body of the message to the StockObject */
message。setObject(stockObject);
9。4。10 解包ObjectMessage
为了解包ObjectMessage,使用ObjectMessage。getObject 方法来得到对象。一旦对象被
取出,客户端应用使用与对象类型匹配的方法从对象中