2009年12月27日日曜日

WASCE/ActiveMQ/JMS

前回、WASCE を入れて EJB3 を動かしてみた。管理コンソールを見ていると、ActiveMQ が JMS として使えるようなので、ついでにやってみる。 ■ Queue 設定 まず WASCE で Queue の準備をする。 最初にリソースグループを作る
  • 管理画面に入る。
  • Services/"JMS Resources"を開く
  • "Create a new JMS Resource Group"/"For ActiveMQ"を選択
  • "Resource Group Name" に HelloResourceGroup とか適当 な名前を入力し[Next] 押下。
次に Queue を作る
  • [Add Destination] 押下
  • "JMS Destination Type" で Queue が選択されていることを確認して[Next] 押下。
  • "Message Destination Name" に HelloQueue と入力し、[Next] 押下。
[Deploy Now] 押下で JMS Resources 画面に行くので、そこでちゃんと追加されたことが確認できる。(追加したリソースグループの削除は、このJMS Resources 画面じゃなくて、Applications/J2EE Connector 画面かららしい。ちょっと分かりづらいが・・・) ■ クライアントコード この JMS Queue を使うテストコードを書いて、JUnit4 でメソッドを個別実行してみる。
  • Java Project 作成。
  • {WASCE_HOME}/repository 下の 以下のjar を、External Jar としてBuild path に追加。
    • activemq-core-4.1.2.jar
    • backport-util-concurrent-2.2.jar
  • Library を Build path に追加。
    • "Server Runtime"/"IBM WASCE v2.1"
    • JUnit 4
  • 適当なパッケージに クラス JMSTestを作成。
    import java.util.Date;
    import ・・・略
    public class JMSTest {
       static final Hashtable<String, String> env = new Hashtable<String, String>();
       static {
          env.put("java.naming.factory.initial",
                "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
          env.put("java.naming.provider.url", "tcp://localhost:61616");
          env.put("queue.HelloQueue", "HelloQueue");
       }
    
       QueueConnection conn = null;
       QueueSession session = null;
       Queue queue = null;
    
       @Before
       public void setUp() throws Exception {
          Context jndiContext = new InitialContext(env);
          QueueConnectionFactory queueConnectionFactory =
             (QueueConnectionFactory) jndiContext.lookup(
                   "QueueConnectionFactory");
    
          queue = (Queue) jndiContext.lookup("HelloQueue");
          conn = queueConnectionFactory.createQueueConnection();
          session = conn.createQueueSession(false,
                Session.AUTO_ACKNOWLEDGE);
       }
       @After
       public void tearDown() throws Exception {
          if (conn != null)
             conn.close();
       }
       @Test
       public void testSend() throws Exception {
          QueueSender queueSender = session.createSender(queue);
          TextMessage message = session.createTextMessage(
             String.format(
                   "Hello, JMS!: %1$tH:%1$tM:%1$tS", new Date()));
          queueSender.send(message);
       }
       @Test
       public void testReceive() throws Exception {
          QueueReceiver receiver = session.createReceiver(queue);
            conn.start();
    
            TextMessage m = (TextMessage)receiver.receive();
            System.out.println(m.getText());
       }
    }
■ 実行
  • Outline ビューから testSend() を実行。正常に実行されることを確認。
  • Outline ビューから testReceive() を実行。正常に実行され、コンソールにHello, JMS!: 22:48:06みたいな感じで1行出力されることを確認。

0 件のコメント:

コメントを投稿