SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Java Message Service再入門

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード サンプルコード (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でなければならないことです。

次のページ
MDBを使って非同期通信を確認

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Java Message Service再入門連載記事一覧
この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5018 2010/04/15 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング