JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > JMS(Point-to-Point)編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2002/02/03  田中宏和
JMS(PTP)編
◆JMSとは?
JMSJava Message Serviceの略です。メッセージを送ったり受け取ったりするためのAPIです。J2EEの一部の機能として提供されています。メッセージの送受信の方法にはPoint-to-PointPublish-Subscribeの2種類あります。ここではPoint-to-Pointを使用します。
◆Point-to-Point(PTP)とは?
送り側はキューに対してメッセージを送信して、受け取り側はそのキューからメッセージを取り出します。取り出されたメッセージはその時点でキューからはなくなるので、送り側が送ったメッセージはただ一つの受け取り側に届きます。
◆ここでの環境
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ソースコード(メッセージの送り側/Producer)
HelloWorldJmsProducer.java(ここからダウンロード)
import javax.naming.*;
import javax.jms.*;

public class HelloWorldJmsProducer {
  public final static String JMS_FACTORY="QueueConnectionFactory";
  public final static String QUEUE="MyQueue";

  public static void main(String args[]) {
    try {
      QueueConnectionFactory queueConnectionFactory;
      QueueConnection queueConnection;
      QueueSession queueSession;
      QueueSender queueSender;
      Queue queue;
      TextMessage msg;

      // JNDI InitialContextを作成します
      InitialContext ctx = new InitialContext();
      // Connection FactoryとQueueをLook upします
      queueConnectionFactory  = (QueueConnectionFactory)ctx.lookup(JMS_FACTORY);
      queue = (Queue) ctx.lookup(QUEUE);

      // コネクションを作成
      queueConnection = queueConnectionFactory.createQueueConnection();
      // セッションを作成
      queueSession = queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
      // キューセンダーを作成
      queueSender   = queueSession.createSender(queue);
      // メッセージを作成
      msg     = queueSession.createTextMessage();
      msg.setText("Hello World");
      // メッセージの配送をスタート
      queueConnection.start();
      // メッセージを送信
      queueSender  .send(msg);
      // 接続を切断
      queueSender.close();
      queueSession.close();
      queueConnection.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
 
 
◆Javaソースコード(メッセージの受け取り側/Consumer)
HelloWorldJmsConsumer.java(ここからダウンロード)
import javax.jms.*;
import javax.naming.*;

public class HelloWorldJmsConsumer {
  public final static String JMS_FACTORY="QueueConnectionFactory";
  public final static String QUEUE="MyQueue";

  public static void main(String[] args) {
    try {
      QueueConnectionFactory queueConnectionFactory;
      QueueConnection queueConnection;
      QueueSession queueSession;
      QueueReceiver queueReceiver;
      Queue queue;
      TextMessage msg;

      // JNDI InitialContextを作成します
      InitialContext ctx = new InitialContext();
      // Connection FactoryとQueueをLook upします
      queueConnectionFactory  = (QueueConnectionFactory)ctx.lookup(JMS_FACTORY);
      queue = (Queue) ctx.lookup(QUEUE);

      // コネクションを作成
      queueConnection = queueConnectionFactory.createQueueConnection();
      // セッションを作成
      queueSession = queueConnection.createQueueSession(false,Session.AUTO_ACKNOWLEDGE);
      // キューレシーバーを作成
      queueReceiver = queueSession.createReceiver(queue);
      // メッセージの配送をスタート
      queueConnection.start();
      // メッセージの受信
      while (true) {
        Message m = queueReceiver.receive(1);
        if (m != null) {
          if (m instanceof TextMessage) {
            msg = (TextMessage) m;
            System.out.println(msg.getText());
          } else {
            break;
          }
        }
      }
      // 接続を切断
      queueReceiver.close();
      queueSession.close();
      queueConnection.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
 
 
◆コンパイル
コマンドプロンプト
C:\作業フォルダ\JavaHello>javac HelloWorldJmsProducer.java HelloWorldJmsConsumer.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 MyQueue queue
C:\作業フォルダ\JavaHello>
◆メッセージの送信
HelloWorldJmsProducerを起動してメッセージをキューに対して送信してみましょう!
コマンドプロンプト
C:\作業フォルダ\JavaHello>java HelloWorldJmsProducer
Java(TM) Message Service 1.0.2 Reference Implementation (build b14)

C:\作業フォルダ\JavaHello>

◆メッセージの受信
新たな窓でコマンドプロンプト(MS-DOSプロンプト)を起動して、HelloWorldJmsConsumerを動かしてみましょう!キューには上で送信したメッセージが一つ入っているはずです。
コマンドプロンプト
C:\作業フォルダ\JavaHello>Java HelloWorldJmsConsumer
Java(TM) Message Service 1.0.2 Reference Implementation (build b14)
Hello World

 

おおおお!表示されましたね!
◆もう一度メッセージの送信
このHelloWorldJmsConsumerはメッセージをキューから受け取り続けるようになっているので、もう一度、HelloWorldJmsProducerを動かしてメッセージをキューに送ってみましょう!
コマンドプロンプト
C:\作業フォルダ\JavaHello>java HelloWorldJmsProducer
Java(TM) Message Service 1.0.2 Reference Implementation (build b14)

C:\作業フォルダ\JavaHello>

送れました。さて、HelloWorldJmsConsumerを動かしている窓を見てみましょう!
コマンドプロンプト
C:\作業フォルダ\JavaHello>Java HelloWorldJmsConsumer
Java(TM) Message Service 1.0.2 Reference Implementation (build b14)
Hello World
Hello World

 

おおおおお!メッセージが着てるぞ!!
 
■関連
JMS(Publisher/Subscriber)編
■書籍
Java関連の書籍
EJB関連の書籍

 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME