SHOEISHA iD

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

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

Java Message Service再入門

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

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

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

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

MDBの骨格をNetBeansで作成

 NetBeansの左ペインの[プロジェクト]タブを選択し、[MDBSample01-ejb]を右クリックし[新規]-[メッセージ駆動型Bean]を選択すると図2のように[新規 メッセージ駆動型Bean]画面が表示されます。

 [EJB名]は任意の名称を付けることが可能ですが、ここでは「ImoshochuMessageDriven」と入力します。

 パッケージ名も任意の名称で構いませんが、実際に使用するシステムではドメイン名を逆さにした名称を頭に付けたパッケージ名を入力します。筆者はkawakubo.jpというドメイン名を持っているため、「jp.kawakubo」を入力しました。さらにシステム名や業務名が分かるように「jp.kawakubo.imoshop」などパッケージを細分化し、ドメイン内で一意になるように命名する方が管理しやすくなります。

 [プロジェクトの送信先名]を入力します。実際にはキューのJNDI名を入力します。この後作成する「jms/MDBSampleQueue」と入力します。前編で使用した「jms/SampleQueue」は使用できません。お気づきかとは思いますが、送信側と受信側が通信できるのはキューが一意であるためです。前編ではPtpSenderとPtpReceiverはJNDIで同じキューを検索、生成することで通信することが可能になっていたのです。

 [完了]ボタンをクリックするとリスト1のように[EJB名]にBeanが付いたMDBのひな型が作成されます。

図2.新規 メッセージ駆動型Bean画面
図2.新規 メッセージ駆動型Bean画面
リスト1.NetBeansで作成した直後のImoshochuMessageDrivenBeanクラス
001:package jp.kawakubo;
002:
003:import javax.ejb.ActivationConfigProperty;
004:import javax.ejb.MessageDriven;
005:import javax.jms.Message;
006:import javax.jms.MessageListener;
007:
008:/**
009: *
010: * @author tomoharu
011: */
012:@MessageDriven(mappedName = "jms/MDBSampleQueue", activationConfig =  {
013:        @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
014:        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
015:    })
016:public class ImoshochuMessageDrivenBean implements MessageListener {
017:    
018:    public ImoshochuMessageDrivenBean() {
019:    }
020:
021:    public void onMessage(Message message) {
022:    }
023:    
024:}

 EJB 3.0より前のバージョンではMessageDrivenBeanインターフェースを実装する必要がありましたが、EJB 3.0では@MessageDrivenアノテーションで記述するようになりました。12行目から15行目を指定するとコネクション、セッションがImoshochuMessageDrivenBeanの生成時に作成されます。順に説明します。

 12行目は使用するキューをJNDI名で指定します。この後(前編の復習になりますが)、GlassFish管理コンソールでコネクションファクトリとともに作成方法を説明します。この指定により前編で説明したJDNIのAPIを使用してのコネクションファクトリやキューの検索、生成を行ったがコーディングなしに実行可能となります。

 13行目は、コネクションファクトリからコネクションを生成する箇所に相当します。メッセージの通知にSession.AUTO_ACKNOWLEDGEを使用することに相当する指定をしています。

 14行目は、デスティネーションのタイプを指定しており、「javax.jms.Queue」を使用することを宣言しています。

実装前の準備、キューの生成

 前編でコネクションファクトリとデスティネーション(PTPではキュー)は管理オブジェクトと呼ばれ、管理ツールでの設定が必要であることを説明しました。先述の通り、通信するアプリケーション毎に一意のキューを用意する必要があるため、復習を兼ねてキューの生成方法を説明します。

 まず、NetBeansの左ペインの[サービス]タブを選択し、[サーバー]-[GlassFish v2.1]を開きます。[GlassFish v2.1]を右クリックし[管理コンソールを表示]を選択すると、ブラウザが起動し管理コンソール認証画面が表示されます。デフォルトのままであれば、[ユーザー名]は「admin」、パスワードは「adminadmin」です。パスワードを変更している場合はその値を入力してください。

 [ログイン]ボタンをクリックすると管理コンソール画面が開きます。左ペインで[リソース]-[JMSリソース]を開くと、[接続ファクトリ]と[送信先リソース]が表示されます。[送信先リソース]を選択すると送信先の一覧が表示され、その上部にある[新規]ボタンをクリックすると図3のように[新しい送信先リソース]が表示され、画面の通り入力します。

 [JNDI名]にはMDBの骨格を作る際に指定した[プロジェクトの送信先名]と同じ名称を入力します。この場合「jms/MDBSampleQueue」を入力します。

 [物理送信先名]には「default_JMS_host」を入力します。

 [リソースタイプ]はドロップダウンリストから「javax.jms.Queue」を選択します。

 [了解]ボタンをクリックするとキューが生成されます。

図3.キューの生成方法
図3.キューの生成方法

実装前の準備、コネクションファクトリの生成

 コネクションファクトリも前回と同様なので説明を割愛します。図4のように設定し[了解]ボタンをクリックするとコネクションファクトリが生成されます。

図4.コネクションファクトリの生成方法
図4.コネクションファクトリの生成方法

次のページ

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング