連載
» 2010年01月08日 00時00分 公開

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

[相原淳, 山野信行, 上川伸彦,株式会社ビーブレイクシステムズ]

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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。