|
| |
 |
JMS(Publisher/Subscriber)編 |
 |
◆JMSとは? |
| JMSはJava Message Serviceの略です。メッセージを送ったり受け取ったりするためのAPIです。J2EEの一部の機能として提供されています。メッセージの送受信の方法にはPoint-to-PointとPublish-Subscribeの2種類あります。ここではPublish-Subscribeを使用します。 |
| ◆Publish-Subscribe(Pub/Sub)とは? |
| 送り側はトピックに対してメッセージを送信します。そのメッセージはそのトピックをサブスクライブ(購読)しているすべてのアプリケーションが受信できます。サブスクライブしているすべてのアプリケーションの受信が終わるとその時点でトピックからそのメッセージは削除されます。 |
| ◆ここでの環境 |
| OS |
Windows 2000 |
| J2SE SDK |
1.3.1_01 |
| J2EE SDK |
1.3_01 |
|
|
|
| ◆環境変数 |
| %JAVA_HOME% |
C:\jdk1.3.1_01 |
| %J2EE_HOME% |
C:\j2sdkee1.3 |
| %PATH% |
%JAVA_HOME%bin;%J2EE_HOME%\bin を含める |
| %CLASSPATH% |
.;%J2EE_HOME%\lib\j2ee.jar;%J2EE_HOME%\lib\locale
を含める |
|
| ◆Javaソースコード(メッセージの送り側/Publisher) |
| HelloWorldJmsPublisher.java(ここからダウンロード) |
import javax.naming.*;
import javax.jms.*;
public class HelloWorldJmsPublisher {
public final static String JMS_FACTORY="TopicConnectionFactory";
public final static String TOPIC="MyTopic";
public static void main(String[] args) {
try {
TopicConnectionFactory topicConnectionFactory;
TopicConnection topicConnection;
TopicSession topicSession;
TopicPublisher topicPublisher;
Topic topic;
TextMessage msg;
// JNDI InitialContextを作成します
InitialContext ctx = new InitialContext();
// Connection FactoryとTopicをLook upします
topicConnectionFactory = (TopicConnectionFactory) ctx.lookup(JMS_FACTORY);
topic = (Topic)ctx.lookup(TOPIC);
// コネクションを作成
topicConnection = topicConnectionFactory.createTopicConnection();
// セッションを作成
topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
// トピックパブリッシャーを作成
topicPublisher = topicSession.createPublisher(topic);
// メッセージを作成
msg = topicSession.createTextMessage();
msg.setText("Hell World");
// メッセージを送信
topicPublisher.publish(msg);
// 接続を閉じます
topicPublisher.close();
topicSession.close();
topicConnection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} |
|
|
| |
| ◆Javaソースコード(メッセージの受け取り側/Subscriber) |
| HelloWorldJmsSubscriber.java(ここからダウンロード) |
import javax.naming.*;
import javax.jms.*;
public class HelloWorldJmsSubscriber {
public final static String JMS_FACTORY="TopicConnectionFactory";
public final static String TOPIC="MyTopic";
public static void main(String[] args) {
try {
TopicConnectionFactory topicConnectionFactory;
TopicConnection topicConnection;
TopicSession topicSession;
TopicSubscriber topicSubscriber;
Topic topic;
TextMessage msg;
// JNDI InitialContextを作成します
InitialContext ctx = new InitialContext();
// Connection FactoryとTopicをLook upします
topicConnectionFactory = (TopicConnectionFactory)ctx.lookup(JMS_FACTORY);
topic = (Topic)ctx.lookup(TOPIC);
// コネクションを作成
topicConnection = topicConnectionFactory.createTopicConnection();
// セッションを作成
topicSession = topicConnection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);
// トピックサブスクライバを作成
topicSubscriber = topicSession.createSubscriber(topic);
// メッセージの配送をスタート
topicConnection.start();
// メッセージの受信
msg = (TextMessage) topicSubscriber.receive();
System.out.println(msg.getText());
// 接続を閉じます
topicSubscriber.close();
topicSession.close();
topicConnection.close();
} catch ( Exception e ) {
e.printStackTrace();
}
}
} |
|
|
| |
| ◆コンパイル |
| コマンドプロンプト |
| C:\作業フォルダ\JavaHello>javac
HelloWorldJmsPublisher.java HelloWorldJmsSubscriber.java
C:\作業フォルダ\JavaHello> |
|
| ◆J2EEサーバーの起動(JMSプロバイダーの起動) |
| JMSプロバイダーはJ2EEサーバーの一部の機能として起動します。J2EEサーバーの起動はj2ee
-verboseというコマンドでできます。 |
| コマンドプロンプト |
C:\作業フォルダ\JavaHello>j2ee
-verbose
・・・・・・・・・・
・・・・・・・・・・
Starting web service at port: 8000
Starting secure web service at port: 7000
J2EE SDK/1.3
Starting web service at port: 9191
J2EE SDK/1.3
J2EE server startup complete. |
|
| ◆トピックの作成 |
| 次に使用するトピックを作成します。j2eeadminコマンドで作成できます。 |
| コマンドプロンプト |
C:\作業フォルダ\JavaHello>j2eeadmin
-addJmsDestination MyTopic topic
C:\作業フォルダ\JavaHello> |
|
| ◆メッセージの送信 |
| HelloWorldJmsPublisherを起動してメッセージをトピックに対して送信してみましょう! |
| コマンドプロンプト |
C:\作業フォルダ\JavaHello>java
HelloWorldJmsPublisher
Java(TM) Message Service 1.0.2 Reference Implementation
(build b14) C:\作業フォルダ\JavaHello> |
|
| ◆メッセージの受信 |
| 新たな窓でコマンドプロンプト(MS-DOSプロンプト)を起動して、HelloWorldJmsSubscriberを動かしてみましょう!どうなるでしょうか? |
| コマンドプロンプト |
C:\作業フォルダ\JavaHello>java
HelloWorldJmsSubscriber
Java(TM) Message Service 1.0.2 Reference Implementation
(build b14)
|
|
| カーソルが点滅しているだけです。Pub/Subの場合はサブスクライブしてないとメッセージを受信できないからです。これでサブスクライブしている状態になったのでもう一度メッセージをトピックに送ってみましょう。 |
| ◆もう一度メッセージの送信 |
| コマンドプロンプト |
C:\作業フォルダ\JavaHello>java
HelloWorldJmsPublisher
Java(TM) Message Service 1.0.2 Reference Implementation
(build b14) C:\作業フォルダ\JavaHello> |
|
| 送れました。さて、HelloWorldJmsSubscriberを動かしている窓を見てみましょう!おおおおお! |
| コマンドプロンプト |
C:\作業フォルダ\JavaHello>java
HelloWorldJmsSubscriber
Java(TM) Message Service 1.0.2 Reference Implementation
(build b14)
Hell World C:\作業フォルダ\JavaHello>
|
|
| おおおお!メッセージが着ているぞ!!なお、複数の窓でHelloWorldJmsSubscriberを動かした状態でメッセージをトピックに送るとすべてのHelloWorldJmsSubscriberにメッセージが届きます。これでPub/Subの動きがだいたいわかると思います。おおおお! |
| |
■関連 JMS(Point-to-Point)編 |
■書籍
Java関連の書籍
EJB関連の書籍 |
|
| |
|
|
| ツールの部屋
- Java関連の書籍 - デザインパターン - 情報交換掲示板
- HOME |