MDBを使っての実装
前書きが長くなりました。実際にプログラムを記述しながら、MDBの詳細を説明します。MDBを実装するには以下のメソッドをコーディングする必要があります。
MDBで実装すべきメソッド
- ejbCreateメソッド:
EJB 3.0から記述が不要になりました。以前のバージョンで注意すべきことを説明します。ejbCreateメソッドはEJBコンテナが管理するMDBのライフサイクルに関連するメソッドです。EJBコンテナは管理オブジェクトであるコネクションファクトリとデスティネーションを検索し、コネクションの生成を行います。したがって、MDB自体ではこれらのコーディングは不要となります。実際にはオブジェクト生成時に行いたい処理をコーディングします。特に実行したい処理がなければ当メソッドを再定義する必要はありません。 - ejbRemoveメソッド:
EJB 3.0から記述が不要になりました。ejbRemoveメソッドはEJBコンテナが管理するMDBのライフサイクルに関連するメソッドです。EJBコンテナはコネクションをクローズします。前編でも触れましたが、コネクションをクローズするとそれに関連するセッション、メッセージプロデューサ、メッセージコンシューマもクローズします。したがって、MDB自体ではこれらのコーディングは不要となります。実際にはオブジェクト削除時に行いたい処理をコーディングします。特に実行したい処理がなければ当メソッドを再定義する必要はありません。 - setMessageDrivenContextメソッド:
EJB 3.0から記述が不要になりました。名称通り、MessageDrivenContextオブジェクトを設定します。MessageDrivenContextオブジェクト自体はトランザクション管理のメソッドを持っています。 - onMessageメソッド:
メッセージを処理するロジックをコーディングします(JavaアプリケーションでのonMessageと同様に、デスティネーションがメッセージを配信します。メッセージをデスティネーションに取りに行くことはありません)。EJBコンテナはonMessageメソッドを呼び出す前に、メッセージコンシューマを生成し、デプロイ時にMDBと管理オブジェクトであるコネクションファクトリとデスティネーションを関連付けます。また、メッセージリスナを登録します。その後コーディングしたロジックを実行します。
ライフサイクル
EJB 3.0では、必須な実装がデフォルトコンストラクタとonMessageメソッドだけになったため、特にライフサイクルを意識する必要はありません。EJB 3.0以前では、EJBコンテナは上記メソッドを3、1、4、2の順に呼び出します。業務で使用するような場合、4は繰り返し呼び出されることになり、終了する場合、2が呼び出されることになります。
MDBの実装
新規プロジェクトを作成
NetBeansで[ファイル]-[新規プロジェクト]を選択すると[新規プロジェクト]画面が表示されます。[カテゴリ]欄から[Java EE]を選択します。
[プロジェクト]欄には7つ選択候補が表示されますが[エンタープライズアプリケーション]を選択すると[新規 エンタープライズアプリケーション]画面が表示されます。[プロジェクト名]は任意ですが、ここでは「MDBSample01」と入力します。
新たに[サーバーと設定]画面が表示されます。デフォルトのままでよいと思いますが、念のため説明します。
[サーバー]はドロップダウンリストになっており「GlassFish v2.1」を選択します。[Java EE バージョン]もドロップダウンリストになっており「Java EE 5」を選択します。これ以前を選択するとMDBの実装方法が説明と大きく異なるため「Java EE 5」を選択してください。[EJBモジュールを作成]と[Webアプリケーションモジュールを作成]のチェックボックスにチェックを入れます。[完了]ボタンをクリックするとプロジェクトができます。NetBeansの左ペインの[プロジェクト]タブは図1のようになっているはずです。