新闻正文

JMS消息类型

来源:JAVA天堂  JAVA学习者  2007-6-15 02:48:01 网友评论 0 条 字体:[ ] ~我要投稿!
在JMS1.1规范中规定了5种JMS消息类型,这篇文章给出如何创建和解包每种消息类型的片段代码。

1.创建一个TextMessage

这个例子里,股票报价信息被发送成一个TextMessage类型的消息,消息中搭载了一个可以被客户端读取的字符串数

据,下面的代码示范了如何去创建一个这样的消息:



String stockData; /* 股票信息是一个字符串 */
TextMessage message;
message = session.createTextMessage();
/* 设置股票信息到消息体 */
message.setText(stockData);


2.解包一个TextMessage

去解包一个TextMessage类型的消息,客户端可以使用Message.getText方法:



String stockInfo;
stockInfo = message.getText();



3.创建一个BytesMessage

股票信息可能是一个服务器端知道如何去构建、客户端知道如何去解释的二进制格式的股票报价,象这样的消息可以

这样被构造:



byte[] stockData; /* 股票信息是一个字节数组 */
BytesMessage message;
message = session.createBytesMessage();
message.writeBytes(stockData);


4.解包一个BytesMessage
当接收到一个ByteMessage时,可以使用下面的方式来解包:



byte[] stockInfo;
int length;
length = message.readBytes(stockData);

消息体被拷贝到字节数组,客户端程序可以读取这个树组来解释数据。


5.创建一个MapMessage

每种股票信息可能会包括多种(name/value)成对出现的map,可以使用MapMessage,例如它包括下面的信息:
• 股票名 - a String
• 当前值 - a double
• 时间 - a long
• 最后更改 - a double
• 股票信息 - a String

去构造这个MapMessage,客户端可以使用MapMessage的各种set方法(setString, setLong, and so forth)去关联相关

信息。



String stockName; /* 股票名 */
double stockValue; /* 当前值 */
long stockTime; /* 时间 */
double stockDiff; /* 最后更改*/
String stockInfo; /* 股票信息 */
MapMessage message;
message = session.createMapMessage();

...其他代码

message.setString("Name", "CN-JAVA");
message.setDouble("Value", stockValue);
message.setLong("Time", stockTime);
message.setDouble("Diff", stockDiff);
message.setString("Info", "Recent server announcement causes market
interest");


6.解包一个MapMessage

去解包一个MapMessage,客户端程序可以使用MapMessage的各种get方法来得到MapMessage元素名对应的值,下面给出

了这一个示例:



String stockName; /* 股票名 */
double stockValue; /* 当前值 */
long stockTime; /* 时间 */
double stockDiff; /* 最后更改*/
String stockInfo; /* 股票信息 */

stockName = message.getString("Name");
stockDiff = message.getDouble("Diff");
stockValue = message.getDouble("Value");
stockTime = message.getLong("Time");

如果你想得到整个元素的列表,可以使用MapMessage.getMapNames方法来获得。

7.创建一个StreamMessage

和MapMessage相似,一个应用程序可以按序列发送多个字段到一个消息中,这些字段都是原始类型的,要做这些,你

可以使用一个StreamMessage,在这里可以将java原始类型分配给股票报价信息的每一个条目中:
• 股票名 - a String
• 当前值 - a double
• 时间 - a long
• 最后更改 - a double
• 股票信息 - a String




String stockName; /* 股票名 */
double stockValue; /* 当前值 */
long stockTime; /* 时间 */
double stockDiff; /* 最后更改*/
String stockInfo; /* 股票信息 */
StreamMessage message;

message = session.createStreamMessage();


下面的元素将被按顺序写到StreamMessage,注意他们没有象在MapMessage中的命名




message.writeString(stockName);
message.writeDouble(stockValue);
message.writeLong(stockTime);
message.writeDouble(stockDiff);
message.writeString(stockInfo);



8.解包一个StreamMessage

StreamMessage中的元素必须按照被写入的顺序读出:




String stockName; /* 股票名 */
double stockValue; /* 当前值 */
long stockTime; /* 时间 */
double stockDiff; /* 最后更改*/
String stockInfo; /* 股票信息 */

stockName = message.readString();
stockValue = message.readDouble();
stockTime = message.readLong();
stockDiff = message.readDouble();
stockInfo = message.readString();


9.创建一个ObjectMessage

被发送出的股票的信息可能来源于一个指定的StockObject Java对象,这个对象可以在一个ObjectMessage里作为消息

体被发出。ObjectMessage被用来发送Java对象。

这些值的设置方法由StockObject执行。例如,StockObject可以有一些设置各种数据值的方法,一个使用StockObject

的应用看起来象这样:



String stockName; /* 股票名 */
double stockValue; /* 当前值 */
long stockTime; /* 时间 */
double stockDiff; /* 最后更改*/
String stockInfo; /* 股票信息 */

StockObject stockObject = new StockObject();
stockObject.setName(stockName);
stockObject.setValue(stockValue);
stockObject.setTime(stockTime);
stockObject.setDiff(stockDiff);
stockObject.setInfo(stockInfo);

ObjectMessage message;
message = session.createObjectMessage();
message.setObject(stockObject);



10.解包ObjectMessage

去解包ObjectMessage,使用ObjectMessage.getObject得到对象,一但对象被取出来,客户端程序使用Java造型语句将

对象还原成原始对象。



StockObject stockObject;

stockObject = (StockObject)message.getObject();

String stockName; /* 股票名 */
double stockValue; /* 当前值 */
long stockTime; /* 时间 */
double stockDiff; /* 最后更改*/
String stockInfo; /* 股票信息 */

stockName = stockObject.getName();
stockValue = stockObject.getValue();
stockTime = stockObject.getTime();
stockDiff = stockObject.getDiff();
stockInfo = stockObject.getInfo();




收藏到ViVi   收藏此页到365Key
上一篇:如何在JBOSS Server上发布EJB
下一篇:EJB的继承和多态 [www.theserverside.com]
用户名:新注册) 密码: 匿名评论 [所有评论]
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
本栏搜索
  • Google
   网站首页 -  网站地图 -  技术学习 -  网站投稿 -  帮助中心
Copyright 2003-2008 www.javah.net All Rights Reserved
2008 如果你喜欢本站 请收藏本站 并推荐给你的朋友一起分享