新闻正文
在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.解包一个StreamMessageStreamMessage中的元素必须按照被写入的顺序读出:
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]