検索
連載

非同期処理と疎結合ができる「メッセージング」の常識企業システムの常識をJBossで身につける(5)(3/4 ページ)

企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎!

PC用表示 関連情報
Share
Tweet
LINE
Hatena

JBoss Messagingのサーバが実行されているかを確認

 JBoss Messagingのサーバが実行されているかを確認するために、jboss-messaging-1.4.5.GAに付属しているサンプルを実行してみましょう。

1:C:\jboss-4.2.3.GA\bin\run.batを実行しサーバを立ち上げる

図14 jboss-4.2.3.GAの実行
図14 jboss-4.2.3.GAの実行

2:先ほどの2.と同様に、C:\jboss-messaging-1.4.5.GA\examples\queue\build.xmlを実行

図15 build.xmlの実行
図15 build.xmlの実行

3:「SUCCESS!」となれば、成功

図16 「SUCCESS!」が表示
図16 「SUCCESS!」が表示

 以上で、サンプルを実行する環境が整いました。

JBoss Messagingは、こうやって実装する!

 今度は、実際に動作させる簡単なサンプルを作成してみましょう。

package sample;
 
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
 
/**
 * testQueueトピックからテキストメッセージを受信する
 */
public class SampleReceiver {
    public static void main(String[] args) {
 
        Context context = null;
        Connection conn = null;
 
        try {
            // JNDIイニシャルコンテキストを取得します。
            context = new InitialContext();
 
            // 接続ファクトリを取得します。
            ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
 
            // 接続を作成します。
            conn = connectionFactory.createConnection();
 
            // 宛先をルックアップします。
            Queue queue = (Queue) context.lookup("/queue/testQueue");
 
            // セッションを作成します。
            Session session = conn.createSession(false,
                    Session.AUTO_ACKNOWLEDGE);
 
            // メッセージ受信
            MessageConsumer msgConsumer = session.createConsumer(queue);
            conn.start();
            TextMessage msg = (TextMessage) msgConsumer.receive();
            if (msg == null) {
                System.out.println("受信NG");
            } else {
                System.out.println("受信OK: [" + msg.getText() + "]");
            }
            System.out.println("受信終了");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (context != null) {
                try {
                    context.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}
SampleReceiver.java
package sample;
 
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;
 
/**
 * testQueueトピックへテキストメッセージを送信する
 */
public class SampleSender {
    public static void main(String[] args) {
 
        Context context = null;
        Connection conn = null;
 
        try {
            // JNDIイニシャルコンテキストを取得します。
            context = new InitialContext();
 
            // 接続ファクトリを取得します。
            ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
 
            // 接続を作成します。
            conn = connectionFactory.createConnection();
 
            // 宛先をルックアップします。
            Queue queue = (Queue) context.lookup("/queue/testQueue");
 
            // セッションを作成します。
            Session session = conn.createSession(false,
                    Session.AUTO_ACKNOWLEDGE);
 
            // メッセージ送信
            MessageProducer msgProducer = session.createProducer(queue);
            msgProducer.send(session.createTextMessage("Hello World!!!"));
 
            System.out.println(queue.getQueueName() + ":送信完了");
 
        } catch (Exception e) {
            e.printStackTrace();
         finally {
            if (context != null) {
                try {
                    context.close();
                } 
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
            try {
                if (conn != null) {
                    conn.close();
                }
            }
            catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}
SampleSender.java
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
jndi.properties

 次ページでは、先ほどの図5と照らし合わせてソースコードを説明します。さらに、JBoss Messagingのメッセージングをサンプルで体感してみましょう。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る