2009年12月28日月曜日

WASCE/ActiveMQ/MDB

前回、WASCE で JMS(ActiveMQ)の動作を確認した。今度は、その勢いで MDB をやってみる。 ■ hello-mdb
  • [New]/[EJB Project]でEJBプロジェクトの作成を開始
    • プロジェクト名を hello-mdb とか適当に指定。
    • 以下を確認
      Target runtimeIBM WASCE v2.1
      EJB Module version3.0
      ConfigurationDefault Configuration for ~
    • Geronimo Deployment Plan のページまで進む
    • groupId 等を適当に入力。ここでは以下のようにした
      groupIdnet.yasuabe.studies.wasce
      artifactIdhello-mdb
      version1.0
      Artifact Typeejb
  • こんな感じで Message Driven Bean を書く
    package sample;
    
    import ・・・略
    
    @MessageDriven(name = "MDB1", activationConfig = {
          @ActivationConfigProperty(
                propertyName = "destinationType", 
                propertyValue = "javax.jms.Queue"),
          @ActivationConfigProperty(
                propertyName = "destination", 
                propertyValue = "HelloQueue") })
    public class MDB1 implements MessageListener {
       public void onMessage(Message message) {
          try {
             System.out.println(((TextMessage) message).getText());
          } catch (JMSException ex) {
             throw new RuntimeException(ex);
          }
       }
    }
  • こんな感じで openejb-jar.xml を編集する
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <ejb:openejb-jar
       xmlns:app="http://geronimo.apache.org/xml/ns/j2ee/application-2.0"
       ・・・略
       xmlns:web="http://geronimo.apache.org/xml/ns/j2ee/web-2.0.1">
       <dep:environment>
          <dep:moduleId>
             <dep:groupId>net.yasuabe.studies.wasce</dep:groupId>
             <dep:artifactId>hello-mdb</dep:artifactId>
             <dep:version>1.0</dep:version>
             <dep:type>ejb</dep:type>
          </dep:moduleId>
          <dep:dependencies>
             <dep:dependency>
                <dep:groupId>console.jms</dep:groupId>
                <dep:artifactId>HelloResourceGroup</dep:artifactId>
                <dep:version>1.0</dep:version>
                <dep:type>rar</dep:type>
             </dep:dependency>
          </dep:dependencies>
       </dep:environment>
       <ejb:enterprise-beans>
          <ejb:message-driven>
             <ejb:ejb-name>MDB1</ejb:ejb-name>
             <name:resource-adapter>
                <name:resource-link>HelloResourceGroup</name:resource-link>
             </name:resource-adapter>
          </ejb:message-driven>
       </ejb:enterprise-beans>
    </ejb:openejb-jar>
■ デプロイ
  • Eclipse で [Export]/[EJB JAR File]を実行して適当な場所に jar を作る
  • WASCE の管理コンソールで"Applications"/[Deploy New]
  • Archive でjar を指定して[Install]実行
  • The application was successfully deployed (または redeployed)と表示されることを確認
■ 確認
  • 前回作った JMSTest の testSend() を文言だけ書き換えて、Outline ビューから個別実行
    @Test
    public void testSend() throws Exception {
       QueueSender queueSender = session.createSender(queue);
       TextMessage message = session.createTextMessage(
          String.format("Hello, MDB!: %1$tH:%1$tM:%1$tS", new Date()));
       queueSender.send(message);
    }
  • コンソールにHello, MDB!: 05:07:29といったメッセージが表示されるのを確認
■ 所感
  • openejb-jar を正しく書くのがちょっと難しくてけっこう試行錯誤した。
  • アノテーションだけで済むだろうと何となく楽観してたら、かなりXML作業があって面倒くさい。
  • 後、Geronimo が不便+不慣れで、とにかく手間がかかって気が滅入る。アンインストールしたつもりでもファイルが残っていて、再デプロイがコケたりするので、何度も手作業で{WASCE_HOME}以下のファイルを掃除したりする羽目になる。ネット上の情報も余り多くないし、かなり扱いにくい・・・。

0 件のコメント:

コメントを投稿