23.07.2013 Views

O'Reilly - Java Message Service

O'Reilly - Java Message Service

O'Reilly - Java Message Service

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Java</strong> <strong>Message</strong> <strong>Service</strong><br />

When the TopicSubscriber receives a message from its topic, it invokes the on<strong>Message</strong>( )<br />

method of its <strong>Message</strong>Listener objects. The Chat class itself implements the<br />

<strong>Message</strong>Listener interface and implements the on<strong>Message</strong>( ) method:<br />

public class Chat implements javax.jms.<strong>Message</strong>Listener{<br />

...<br />

public void on<strong>Message</strong>(<strong>Message</strong> message){<br />

try{<br />

Text<strong>Message</strong> text<strong>Message</strong> = (Text<strong>Message</strong>)message;<br />

String text = text<strong>Message</strong>.getText( );<br />

System.out.println(text);<br />

} catch (JMSException jmse){jmse.printStackTrace( );}<br />

}<br />

...<br />

}<br />

The Chat class is a <strong>Message</strong>Listener type, and therefore registers itself with the<br />

TopicSubscriber in its constructor:<br />

TopicSubscriber subscriber = subSession.createSubscriber(chatTopic);<br />

subscriber.set<strong>Message</strong>Listener(this);<br />

When the message server pushes a message to the TopicSubscriber, the TopicSubscriber<br />

invokes the Chat object's on<strong>Message</strong>( ) method.<br />

2.1.2.9 The <strong>Message</strong><br />

It's fairly easy to confuse the <strong>Java</strong> <strong>Message</strong> <strong>Service</strong> with its use of a<br />

<strong>Java</strong> event model. JMS is an API for asynchronous distributed<br />

enterprise messaging that spans processes and machines across a<br />

network. The <strong>Java</strong> event model is used to synchronously deliver<br />

events by invoking methods on one or more objects in the same<br />

process that have registered as listeners. The JMS pub/sub model uses<br />

the <strong>Java</strong> event model so that a TopicSubscriber can notify its<br />

<strong>Message</strong>Listener object in the same process that a message has<br />

arrived from the message server.<br />

In the chat example, the Text<strong>Message</strong> class is used to encapsulate the messages we send<br />

and receive. A Text<strong>Message</strong> contains a java.lang.String as its body and is the most<br />

commonly used message type. The on<strong>Message</strong>( ) method receives Text<strong>Message</strong> objects<br />

from the TopicSubscriber. Likewise, the write<strong>Message</strong>( ) method creates and publishes<br />

Text<strong>Message</strong> objects using the TopicPublisher:<br />

public void on<strong>Message</strong>(<strong>Message</strong> message){<br />

try{<br />

Text<strong>Message</strong> text<strong>Message</strong> = (Text<strong>Message</strong>)message;<br />

String text = text<strong>Message</strong>.getText( );<br />

System.out.println(text);<br />

} catch (JMSException jmse){jmse.printStackTrace( );}<br />

}<br />

protected void write<strong>Message</strong>(String text) throws JMSException{<br />

Text<strong>Message</strong> message = pubSession.createText<strong>Message</strong>( );<br />

message.setText(username+" : "+text);<br />

publisher.publish(message);<br />

}<br />

30

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!