JMS/ Sample Codes

■サーバ側の処理: トピックの登録

--addJmsDestination.bat--
call j2eeadmin -addJmsDestination Favorite topic
--/addJmsDestination.bat--

■クライアント側の処理: メッセージのSubscribe(購読予約)

// コネクション生成オブジェクトの取得
TopicConnectionFactory conFactory = (TopicConnectionFactory)
# P2Pの場合は QueueConnectionFactory
jndi.lookup("TopicConnectionFactory");

// JMSサーバとのコネクションを生成
connection = conFactory.createTopicConnection();
# コネクションオブジェクトは、
 JMSクライアントとJMSサーバとの仮想的なコネクションを表すオブジェクトで、
 実際はTCP/IPソケットのコネクションに相当する。

# セッションは、
 メッセージの順番やトランザクションを管理する単位となるもので、
 1コネクションに対して複数のセッションを確立できる。

// 受信処理用セッションの生成
subSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
// コネクション生成オブジェクトの取得
TopicConnectionFactory conFactory = (TopicConnectionFactory)
jndi.lookup("TopicConnectionFactory");

# JMSでは複数スレッドが1セッションオブジェクトを操作指定はいけない。
 →送信処理と受信処理ではスレッドが異なるため、
  別のセッションオブジェクトを生成する必要がある。

// トピックの取得
// "Favorite"はJMSサーバへの登録名と同じにする。
Topic chatTopic = (Topic)
jndi.lookup("Favorite");
// Subscriberオブジェクトの生成
subscriber = subSession.createSubscriber(chatTopic);

# サブスクライバオブジェクトは、
 JMSサーバからのメッセージをリスナオブジェクトに渡すのが仕事。

// 送信処理用セッションの生成
pubSession = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);

// Publisherオブジェクトの生成
publisher = pubSession.createPublisher(chatTopic);

// コネクションの開始
connection.start();

// チャット文字列の送信
TextMessage message = pubSession.createTextMessage();
message.setText(msg);
publisher.publish(message);

# メッセージを受信するとリスナ・オブジェクトのonMessageメソッドが呼ばれる。
public void onMessage(Message message) {
 // メッセージを表示
 TextMessage textMessage = (TextMessage)message;
 try {
  System.out.println(""RCV > "" + textMessage.getText());
 } catch(JMSException ex) {
  ex.printStackTrace();
 }
}

ref:
http://www.smg.co.jp/seminar/JavaNetwork/NP_lecture06.html

tag : JMS

2009-04-16 22:27 : __j2ee__jms : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud