CodeZine(コードジン)

特集ページ一覧

今からでも遅くない JMSを学ぼう!(後編)
Message-Driven Beanの世界へ

MDBを使いアプリどうしを非同期通信します

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2010/04/15 14:00

ダウンロード サンプルコード (2.9 KB)

目次

送信側の実装

 今回は説明を簡単にするために、送信側はJavaアプリケーションで実装します。MDBSample02という名前で新規にプロジェクトを作ります。Javaアプリケーションは前編で作成したPtpSenderを改良すればすぐに作成できます。リスト3が送信側のImoshochuCatalogSenderのメッセージ送信メソッドのsendMeigaraメソッドです。

リスト3.ImoshochuCatalogSender#sendMeigara
001:    public void sendMeigara() {
002:        QueueConnectionFactory myConnectionFactory = null;
003:        Queue myQueue = null;
004:        Connection myConnection = null;
005:        Session mySession = null;
006:        MessageProducer messageProducer = null;
007:        ObjectMessage objectMessage = null;
008:        ImoshochuCatalogItem catalog = null;
009:        try {
010:            // コネクションファクトリとデスティネーションの取得(アノテーションは使用せず)
011:            Context c = new InitialContext();
012:            myConnectionFactory = (QueueConnectionFactory)c.lookup("jms/MDBSampleConnectionFactory");
013:            myQueue = (Queue)c.lookup("jms/MDBSampleQueue");
014:
015:            myConnection = myConnectionFactory.createQueueConnection();
016:            mySession = myConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
017:            // MessageProducerとTextMessageはSessionオブジェクトから生成される
018:            messageProducer = mySession.createProducer(myQueue);
019:            objectMessage = mySession.createObjectMessage();
020:
021:            catalog = new ImoshochuCatalogItem();
022:            catalog.setName("がんご焼酎屋");
023:            catalog.setNameKana("がんごしょうちゅうや");
024:            catalog.setDosu(25);
025:            catalog.setKoji("白");
026:            catalog.setSweetPotatoName("ジョイホワイト");
027:            catalog.setManufacturer("大石酒造");
028:            catalog.setVolume(1.8f);
029:            catalog.setPrice(2630);
030:
031:            objectMessage.setObject(catalog);
032:            messageProducer.send(objectMessage);
033:
034:        } catch (JMSException e) {
035:            e.printStackTrace();
036:        } catch (NamingException ne) {
037:            ne.printStackTrace();
038:        } finally {
039:            try {
040:                if (myConnection != null) {
041:                    myConnection.close();
042:                }
043:            } catch (Exception e) {
044:                e.printStackTrace();
045:                myConnection = null;
046:            }
047:            try {
048:                if (mySession != null) {
049:                    mySession.close();
050:                }
051:            } catch (Exception e) {
052:                e.printStackTrace();
053:                mySession = null;
054:            }
055:            try {
056:                if (messageProducer != null) {
057:                    messageProducer.close();
058:                }
059:            } catch (Exception e) {
060:                e.printStackTrace();
061:                messageProducer = null;
062:            }
063:        }
064:    }

 リスト3を説明します。MDBを見た後ではコーディングが非常に冗長に感じます。前編のPtpSenderとの大きな違いはメッセージタイプがTextMessageではなくObjectMessageであることです(7行目)。残りはImoshochuCatalogItemオブジェクトのフィールドに値を設定し、そのオブジェクトをObjectMessageのsetObjectメソッドで設定しているところくらいです。

 ImoshochuCatalogItemクラスはフィールド変数のgetter/setterメソッドを持った単なるJava Beansクラスであるため説明は割愛します。サンプルコードで確認してください。1点だけ注意しなければならないのは、ObjectMessageに設定するオブジェクトはSerializableでなければならないことです。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Java Message Service再入門

著者プロフィール

  • 川久保 智晴(カワクボ トモハル)

    haruプログラミング教室(https://haru-idea.jp/)主宰。 COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScript...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5