Sun ONE ロゴ      前へ      目次      索引      次へ     
Sun ONE Message Queue 開発者ガイド



第 2 章   クイックスタートチュートリアル


この章では、MQ 環境における JMS クライアントプログラミングの概要を簡単に紹介します。具体的には、HelloWorldMessage という簡単なサンプルアプリケーションの作成からコンパイル、実行までの手順をチュートリアル方式で説明します。

この章で説明する手順は次のとおりです。

  • 環境設定

  • ブローカの起動およびテスト

  • 簡単なクライアントアプリケーションの開発

  • クライアントアプリケーションのコンパイルおよび実行

このチュートリアルの目的は、デフォルト設定の MQ メッセージサーバを実行することです。MQ メッセージサーバの設定手順については、第 5 章「SOAP メッセージの操作」を参照してください。



環境設定



JMS クライアントのコンパイルおよび実行時には、多くの環境変数を使用します。この節では、これらの環境変数の設定方法を説明します。


MQ 関連の環境変数を設定するには

  1. 必要に応じて、IMQ_HOME 環境変数を設定します (Windows プラットフォームのみ)。

    IMQ_HOME 環境変数は、JMS クライアントのコンパイルおよび実行時に使用します。Windows プラットフォームでは、MQ インストーラが IMQ_HOME を設定します。

    インストール時に設定されるディレクトリおよび環境変数は次のとおりです。




    プラットフォーム

    設定

    Solaris  

    インストールディレクトリなし

    IMQ_HOME 環境変数は使用しない  

    Solaris :
    Sun ONE Application Server, EE
     

    Sun ONE Application Server、Evaluation Edition (EE) の場合、デフォルトのインストールディレクトリは Application Server installation directory/imq

    IMQ_HOME 環境変数はソフトウェアでは使用されない。MQ ドキュメント内で、ルートインストールディレクトリを参照するために使用される  

    Windows  

    デフォルトのインストールディレクトリは、
    C:¥Program Files¥Sun Microsystems¥Message Queue 3.0¥

    インストーラは、IMQ_HOME 環境変数の値として MQ インストールディレクトリを設定する  

    Linux  

    デフォルトのインストールディレクトリは /opt/imq

    IMQ_HOME 環境変数はソフトウェアでは使用されない。MQ ドキュメント内で、ルートインストールディレクトリを参照するために使用される  

  2. JAVA_HOME 環境変数を設定します。

    JAVA_HOME 環境変数の値として、J2SE SDK (Java 2 Standard Edition ソフトウェア開発キット) のインストール先ディレクトリを指定します。

  3. サンプルアプリケーションが格納されているディレクトリに移動します。




    プラットフォーム

    設定

    Solaris  

    /usr/demo/imq/jms
     

    Solaris :
    Sun ONE Application Server, EE
     


    IMQ_HOME/demo/jms
     

    Windows  

    IMQ_HOME/demo/jms
     

    Linux  

    IMQ_HOME/demo/jms
     

    この章で使用するサンプルアプリケーションは、このディレクトリ内にあります。

  4. CLASSPATH 環境変数を設定します。

    CLASSPATH を設定して、現在のディレクトリおよび IMQ_HOME/lib ディレクトリ (Solaris の場合は /usr/share/lib/imq) 内の jar ファイル (jms.jarimq.jar jndi.jar) を取り込みます。これらはクライアントのコンパイルおよび実行時に必要になります。



    JDK 1.4 には、JNDI の jar ファイルと JSSE の jar ファイル (安全なコネクションに必要) が付属しています。これらの jar ファイルを CLASSPATH で取り込む必要があるのは、JDK 1.3 または 1.2 を使ってアプリケーションを開発する場合のみです。






    プラットフォーム

    設定と詳細

    Solaris (csh)  

    % cd /usr/demo/imq/jms
    % setenv CLASSPATH .:
        /usr/share/lib/imq/jms.jar:
        /usr/share/lib/imq/imq.jar:
        /usr/share/lib/imq/jndi.jar

     

    Solaris :
    Sun ONE Application Server, EE
     

    % cd $IMQ_HOME/demo/jms
    % setenv CLASSPATH .:
        $IMQ_HOME/lib/jms.jar:
        $IMQ_HOME/lib/imq.jar:
        $IMQ_HOME/lib/jndi.jar

     

    Windows  

    C:¥>cd %IMQ_HOME%¥demo¥jms
    C:¥Program Files¥Sun Microsystems¥
    Message Queue 3.0¥demo> set CLASSPATH=.;
        %IMQ_HOME%¥lib¥jms.jar;
        %IMQ_HOME%¥lib¥imq.jar;
        %IMQ_HOME%¥lib¥jndi.jar

     

    Linux
    (csh)
     

    % cd $IMQ_HOME/demo/jms
    % setenv CLASSPATH .:
        $IMQ_HOME/lib/jms.jar:
        $IMQ_HOME/lib/imq.jar:
        $IMQ_HOME/lib/jndi.jar

     



MQ メッセージサーバの起動およびテスト

このチュートリアルでは、現時点でまだ MQ メッセージサーバを実行していないものとして説明を進めます。メッセージサーバは、メッセージの転送と配信を行う 1 つまたは複数のソフトウェアコンポーネント、すなわちブローカによって構成されます。

UNIX の起動プロセスまたは Windows サービスとしてすでにブローカを実行している場合、次の手順「ブローカをテストするには」は省略できます。


ブローカを起動するには

  1. 端末ウィンドウを使って、IMQ_HOME/bin ディレクトリ (Solaris の場合は /usr/bin) に移動します。

  2. 次のようにして、ブローカコマンド (imqbrokerd) を実行します。

    -tty オプションを指定すると、ログファイルとそこに記録されたすべてのメッセージが端末コンソールに表示されます。




    プラットフォーム

    起動コマンド

    Solaris  

    % usr/bin/imqbrokerd -tty
     

    Solaris :
    Sun ONE Application Server, EE
     


    % IMQ_HOME/bin/imqbrokerd -tty

     

    Windows  

    C:¥Program Files¥Sun Microsystems¥
    Message Queue 3.0¥bin> imqbrokerd -tty

     

    Linux  

    % IMQ_HOME/bin/imqbrokerd -tty
     

ブローカが起動し、いくつかのメッセージに続いて「imqbroker@host:7676 ready.」というメッセージが表示されます。このメッセージは、ブローカをクライアントで使用する準備ができたことを表します。


ブローカをテストするには

ブローカが起動したかどうかを簡単にチェックしたい場合は、MQ コマンドユーティリティ (imqcmd) を使ってブローカ情報を表示します。

  1. 別の端末ウィンドウを開いて、IMQ_HOME/bin ディレクトリ (Solaris の場合は /usr/bin) に移動します。

  2. 次の引数を指定して、imqcmd を実行します。




    プラットフォーム

    設定と詳細

    Solaris  

    % /usr/bin/imqcmd query bkr -u admin -p admin
     

    Solaris :
    Sun ONE Application Server, EE
     

    % IMQ_HOME/bin/imqcmd query bkr -u admin -p admin
     

    Windows  

    C:¥Program Files¥Sun Microsystems¥
    Sun One Message Queue 3.0¥bin>
        imqcmd query bkr -u admin -p admin

     

    Linux  

    % IMQ_HOME/bin/imqcmd query bkr -u admin -p admin
     

次のような出力が得られます。


指定されたブローカを照会中:

-------------------------

ホスト           プライマリポート

-------------------------

localhost      7676





インスタンス名
imqbroker
クラスタ URL

クラスタブローカリスト (有効)
localhost/111.222.333.444:7676 (imqbroker)
クラスタブローカリスト (設定済み)

クラスタマスターブローカ

システム内のメッセージの最大サイズ
0 (無制限)
システム内のメッセージの最大数
0 (無制限)
システム内の現在のメッセージのサイズ (バイト単位) 0
システム内の現在のメッセージ数
0
プライマリポート
7676
ログレベル
INFO
ログロールオーバー 間隔 (秒単位)
604800
ログロールオーバーサイズ (バイト単位)
0 (無制限)
最大メッセージサイズ
70m
自動キュー作成
true
自動トピック作成
true
自動的に作成されたキュー配信ポリシー
シングル


ブローカの照会に成功しました。




簡単なクライアントアプリケーションの開発



この節では、キューの送信先にメッセージを送信したあと、このメッセージをキューから取得する、「Hello World」という簡単なアプリケーションの作成手順を紹介します。このアプリケーションは、IMQ_HOME/demo/jms (Solaris の場合 /usr/demo/imq/jms) にあります。

次の手順では、クライアントでメッセージの送受信を行うための Java プログラミング言語コードに注目します。


サンプルアプリケーション HelloWorldMessage を作成するには

  1. JMS API のインタフェースおよび MQ 実装クラスをインポートします。

    javax.jms パッケージには、JMS クライアントの開発に必要な JMS インタフェースがすべて定義されています。

    import javax.jms.*;

  2. MQ QueueConnectionFactory 管理対象オブジェクトをインスタンス化します。

    QueueConnectionFactory オブジェクトにより、MQ メッセージサーバへの QueueConnection コネクションを作成するために使用する MQ 固有の設定プロパティすべてがカプセル化されます。

    QueueConnectionFactory myQConnFactory =
       new com.sun.messaging.QueueConnectionFactory();

    ConnectionFactory 管理対象オブジェクトへのアクセスには、JNDI 検索も利用できます (「ConnectionFactory オブジェクトの検索」を参照)。この方法により、クライアントコードが JMS プロバイダに依存しなくなります。また、メッセージングシステムを集中管理できるようになります。

  3. MQ メッセージサーバへのコネクションを作成します。

    QueueConnection は、ポイントツーポイントプログラミングドメイン内の MQ メッセージサーバへのアクティブなコネクションです。

    QueueConnection myQConn =
       myQConnFactory.createQueueConnection();

  4. コネクション内にセッションを作成します。

    QueueSession オブジェクトは、メッセージのプロデュースおよびコンシュームに使用されるシングルスレッドコンテキストです。クライアントは、このオブジェクトを利用して、キュー送信先のメッセージのプロデューサとコンシューマを作成します。

    QueueSession myQSess = myQConn.createQueueSession(false,
       Session.AUTO_ACKNOWLEDGE);

    ここで作成された myQSess オブジェクトは未処理です。このオブジェクトは、メッセージがコンシューマによってコンシュームされた時点で、これを自動的に通知します。

  5. MQ メッセージサーバ内のキュー送信先に対応する MQ queue 管理対象オブジェクトをインスタンス化します。

    送信先管理対象オブジェクトは、プロバイダ固有の送信先の命名構文および動作をカプセル化します。次のコードは、「world」という物理的なキュー送信先の queue 管理対象オブジェクトをインスタンス化します。

    Queue myQueue = new.com.sun.messaging.Queue("world");

    送信先管理対象オブジェクトへのアクセスには、JNDI 検索も利用できます (「Destination オブジェクトの検索」を参照)。この方法により、クライアントコードが JMS プロバイダに依存しなくなります。また、メッセージングシステムを集中管理できるようになります。

  6. QueueSender メッセージプロデューサを作成します。

    このメッセージプロデューサは myQueue に関連付けられており、キュー送信先「world」にメッセージを送信する際使用されます。

    QueueSender myQueueSender = myQSess.createSender(myQueue);

  7. メッセージを作成し、キューに送信します。

    QueueSession オブジェクトを使って TextMessage オブジェクトを作成し、このオブジェクトにメッセージのデータを表す文字列を追加します。さらに、QueueSender オブジェクトを使って、キュー送信先「world」にメッセージを送信します。

    TextMessage myTextMsg = myQSess.createTextMessage();
    myTextMsg.setText("Hello World");
    System.out.println("Sending Message:" + myTextMsg.getText());
    myQueueSender.send(myTextMsg);

  8. QueueReceiver メッセージコンシューマを作成します。

    このメッセージコンシューマは myQueue に関連付けられており、キュー送信先「world」からメッセージを受信する際使用されます。

    QueueReceiver myQueueReceiver =
       myQSess.createReceiver(myQueue);

  9. 手順 3 で作成した QueueConnection を起動します。

    クライアントによってコンシュームされるメッセージは、すでに起動しているコネクションでしか配信できません。これに対して、クライアントによってプロデュースされたメッセージは、コネクションを起動しなくても送信先に配信できます (手順 7 を参照)。

    myQConn.start();

  10. キューからメッセージを受信します。

    QueueReceiver オブジェクトを使って、キュー送信先「world」からメッセージを受信します。次のコードは、メッセージの同期コンシュームの例です (「メッセージのコンシューム : 同期と非同期」を参照)。非同期コンシュームの例については、表 2-1 を参照してください。

    Message msg = myQueueReceiver.receive();

  11. メッセージのコンテンツを取得します。

    メッセージが正常に受信された場合は、そのコンテンツを取得できます。

    if (msg instanceof TextMessage) {
       TextMessage txtMsg = (TextMessage) msg;
       System.out.println("Read Message:" + txtMsg.getText());
    }

  12. セッションとコネクションリソースを終了します。

    myQSess.close();
    myQConn.close();



クライアントアプリケーションのコンパイルおよび実行

MQ 環境で JMS クライアントをコンパイルして実行するには、Java2 SDK Standard Edition v1.4 の使用をお勧めします (ただし、バージョン 1.3 および 1.2 もサポートしています)。推奨 SDK は次の Web サイトからダウンロードできます。

http://java.sun.com/j2se/1.4

手順 4 で説明したように、CLASSPATH 環境変数が jms.jar ファイルと imq.jar ファイルをポイントするように設定してから、クライアントアプリケーションのコンパイルまたは実行を開始してください。

次の手順では、「簡単なクライアントアプリケーションの開発」で作成した HelloWorldMessage アプリケーションを使用します。このアプリケーションは、MQ 3.0 のサンプルアプリケーションディレクトリに格納されています。

IMQ_HOME/demo/jms (Solaris では /usr/demo/imq/jms)


HelloWorldMessage アプリケーションをコンパイルして実行するには

  1. アプリケーションを含むディレクトリを現在のディレクトリにします。

    Solaris の MQ 3.0 サンプルアプリケーションディレクトリは、ユーザが書き込みできないため、HelloWrodMessage アプリケーションを書き込み可能なディレクトリにコピーして、そのディレクトリを現在のディレクトリにします。

  2. 次のようにして、HelloWorldMessage アプリケーションをコンパイルします。




    プラットフォーム

    設定と詳細

    Solaris (csh) の場合  

    % $JAVA_HOME/bin/javac HelloWorldMessage.java
     

    Windows の場合  

    C:¥Program Files¥Sun Microsystems¥Message Queue 3.0¥
    demo¥jms>%JAVA_HOME%¥bin¥javac HelloWorldMessage.java

     

    Linux (csh) の場合  

    % $JAVA_HOME/bin/javac HelloWorldMessage.java
     

    これで、現在のディレクトリ内に HelloWorldMessage.class ファイルが作成されます。

  3. 次のようにして、HelloWorldMessage アプリケーションを実行します。

    HelloWorldMessage アプリケーションを実行したときに表示される出力内容は、examples/jms ディレクトリに格納されています。




    プラットフォーム

    設定と詳細

    Solaris (csh) の場合  

    % $JAVA_HOME¥bin¥java HelloWorldMessage
     

    Windows の場合  

    C:¥Program Files¥Sun Microsystems¥Message Queue 3.0¥
    demo¥jms>%JAVA_HOME%¥bin¥java HelloWorldMessage

     

    Linux (csh) の場合  

    % $JAVA_HOME¥bin¥java HelloWorldMessage
     

    HelloWorldMessage を実行したときに表示される出力内容は次のとおりです。

    Sending Message:Hello World

    Read Message:Hello World



サンプルアプリケーションコード

MQ 3.0 には、サンプルアプリケーションとして、JMS メッセージングアプリケーションと JAXM メッセージングのサンプルが付属しています。詳細については、「SOAP メッセージの操作」を参照してください。


JMS のサンプル

HelloWorldMessage のサンプルのコードは、その他のサンプルアプリケーションのコードとともに、次の場所に格納されています。

IMQ_HOME/demo/jms (Solaris では /usr/demo/imq/jms)

このディレクトリには、各サンプルアプリケーションの概要と実行方法を示した README ファイルも格納されています。サンプルには、JMS サンプルプログラムと MQ のサンプルアプリケーションがあります。これらのサンプルについては、次の 2 つの表を参照してください。

表 2-1 は JMS サンプルプログラムの概要です。


表 2-1    JMS サンプルプログラム 

サンプルアプリケーション名

説明

SenderToQueue  

キューを使ってテキストメッセージを送信する  

SynchQueueReceiver  

キューを使って同期方式でテキストメッセージを受信する  

SynchTopicExample  

テキストメッセージをパブリッシュし、トピックを使って同期方式で受信する  

AsyncQueueReceiver  

メッセージリスナーを使って複数のメッセージを非同期方式で受信する  

AsynchTopicExample  

トピックに対して 5 つのテキストメッセージをパブリッシュし、メッセージリスナーを使って非同期方式で取得する  

MessageFormats  

サポートされている 5 つのメッセージ形式でメッセージの書き込みおよび読み取りを行う  

MessageConversion  

メッセージ形式によっては、あるデータタイプでメッセージを書き込み、別のデータタイプで読み取ることができることを示す  

ObjectMessages  

オブジェクトが参照によって渡されるのではなくメッセージにコピーされることを示す  

BytesMessages  

長さが不定のバイトメッセージを書き込んで読み取る方法を示す  

MessageHeadersTopic  

JMS メッセージヘッダーフィールドの使用方法を示す  

TopicSelectors  

メッセージのプロパティをメッセージセレクタとして使用する方法を示す  

DurableSubscriberExample  

サブスクライバが非アクティブな状態で、トピックに対してパブリッシュされたメッセージを確保するような持続的サブスクライバの作成方法を示す  

AckEquivExample  

処理が完了するまでメッセージの通知を行わないように設定する方法を示す  

TransactedExample  

電子商取引アプリケーションのシミュレーションにより、トランザクションの使用方法を示す  

RequestReplyQueue  

JMS 要求/応答機能の使用方法を示す  

表 2-2 は MQ のサンプルアプリケーションの概要です。


表 2-2    MQ のサンプルアプリケーション 

サンプルアプリケーション名

説明

HelloWorldMessage  

「Hello World」メッセージの送受信を行う  

XMLMessageExample  

ファイルから XML 文書を読み取り、キューに送信する。その後、XML 文書の内容に従ってキュー内のメッセージを処理し、変換して DOM オブジェクトを生成する  

SimpleChat  

MQ を使って簡単な GUI チャットアプリケーションを作成する方法を示す  

SimpleJNDIClient  

管理者によって作成され、オブジェクトストアに配置された管理対象オブジェクトに、JNDI 検索を使ってクライアントからアクセスする方法を示す (『MQ 管理者ガイド』の管理コンソールのチュートリアルを参照)  


JAXM のサンプル

SOAP メッセージの送受信の方法を示すサンプルも多数用意されています。これらのサンプルの格納場所は次のとおりです。

IMQ_HOME/demo/jaxm (Solaris では /usr/demo/imq/jaxm)

このディレクトリには、各サンプルアプリケーションの概要と実行方法を示した README ファイルも格納されています。これらのサンプルアプリケーションについては、表 2-3 を参照してください。


表 2-3    SOAP メッセージングサンプルアプリケーション

サンプルアプリケーション名

説明

SendSOAPMessage  

SOAP メッセージを送信するスタンドアロンクライアント  

SOAPEchoServlet  

SOAP メッセージをエコーするサーブレット  

SendSOAPMessageWithJMS  

SOAP メッセージを構築し、JMS メッセージとしてラップし、このメッセージをトピックに対してパブリッシュするスタンドアロンクライアント  

ReceiveSOAPMessageWithJMS  

JMS でラップされた SOAP メッセージを受信するトピックに登録していて、このメッセージを SOAP メッセージに変換する JMS メッセージリスナー  

SOAPtoJMSServlet  

SOAP メッセージを受信し、JMS メッセージとしてラップし、トピックに対してパブリッシュするサーブレット  


前へ      目次      索引      次へ     
Copyright © 2002 Sun Microsystems, Inc. All rights reserved.

最終更新日 2002 年 6 月 19 日