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のひな型が作成されます。
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」を選択します。
[了解]ボタンをクリックするとキューが生成されます。
実装前の準備、コネクションファクトリの生成
コネクションファクトリも前回と同様なので説明を割愛します。図4のように設定し[了解]ボタンをクリックするとコネクションファクトリが生成されます。