EJBの作成
前述のとおり、LombozではEJBの開発にXDocletを使用します。XDoclet(http://xdoclet.sourceforge.net/)は、コード生成エンジンであり、ユーザーがXDoclet用の特殊なJavaDocタグをコード中に記述することにより、さまざまなファイルを自動生成します。EJBの開発においては、ホーム/リモートインターフェイス、デプロイメントディスクリプタを自動生成します。
Lombozでは、XDoclet用のタグを含んだクラスをウィザードにより生成します。また、XDocletを使用するためのbuild.xmlなどを自動生成し、Eclipseのメニュー上からXDocletを呼び出せるようにします。
以下の図に開発に必要となるファイルとLombozとXDocletの関係を示します。
つまり、Lombozを使用したEJB開発では、次のような利点があります。
- ホーム/リモートインターフェイスなど、複数のコードに分散していたソースコードを1つにまとめることができ、開発の効率化とコードの大幅な削減が可能になる
- 管理すべきファイルが1つになったことにより、メンテナンスの手間を大幅に削減すると同時に、EJB本体、インターフェイス、デプロイメントディスクリプタ間の不整合が生じることがない
- アプリケーションサーバごとに異なるデプロイメントディスクリプタも自動的に生成されるので、開発者は、アプリケーションサーバごとの違いを意識する必要がない
- XDoclet用のタグやbuild.xmlに関する詳しい知識がなくても、XDocletを使用してEJBを開発することができる
それでは実際に、上記の図の流れに従いEJBを作成する手順を実践してみましょう。今回は、例として、メールアドレスと名前を管理するためのEJBを作成します。まずはJ2EEプロジェクトの作成から始めます。
■J2EEプロジェクトの作成
Lombozプラグインのメニューを使用して、J2EEプロジェクトを作成します。「ファイル」→「新規」→「Lomboz J2EE Project」を選択し、表示されるダイアログで「プロジェクト名」を入力します。今回は「j2eePrj」と入力しました。
「次へ」をクリックし、Javaビルド設定を定義します。「ソース・フォルダ」と「デフォルト出力フォルダ」を指定します。今回は「j2eePrj/src」と「j2eePrj/bin」を指定しました。「次へ」をクリックし、J2EEモジュールを定義します。「Ejb Modules」タブをクリックし、「Add」ボタンをクリック、表示されるダイアログでモジュール名を入力します。今回は「mlEJB」と入力しました。
モジュールは、EJBの配布単位であるjarファイルに1対1でマッピングされます。今回の作業では、最終的にmlEJB.jarファイルが生成されることになります。
「Targeted Servers」タブをクリックし、「Type:」で「JBOSS 3.0」を選択し、「Add」ボタンをクリックします。「終了」をクリックすると、j2eePrjが作成されます。
画面中のフォルダ「src」と「2srcj」の内容は次のようになります。
src | EJBのソースを格納 |
---|---|
2srcj | JSPのサーブレットファイルを格納(今回は使用しません) |
なお、プロジェクトが作成された際に、以下のライブラリが自動的に取り込まれます。
- JDK_TOOLS
- JBOSS308/bin/run.jar
- JBOSS308/bin/shutdown.jar
- JBOSS308/client/jboss-j2ee.jar
- JBOSS308/server/default/lib/javax.servelt.jar
これらの自動的に取り込まれるjarは、「ウィンドウ」→「設定」→「Lomboz」→「Server Definitions」→「Classpath」タブの「Server Libraries」で指定できます。
mlEJB/META-INFには、以下のような設定ファイルや、XDocletを使用するためのAnt定義ファイルなどが生成されます。
beans.xml | このモジュールで扱うEJBのリスト。初期状態は空 |
---|---|
build.properties | Ant定義ファイルから参照される。デプロイ先が記述されている |
build.xml | Ant定義ファイル。Lombozから呼び出される |
ejb-jar.xml | デプロイメントディスクリプタ。初期状態は空 |
ejbGenerate.xml | Ant定義ファイルで、build.xmlから呼び出される。XDoclet関連のタスクが集約される |
ejbs.xml | このモジュールで扱っているEJBのファイル。ejbGenerateで使用される |
targets.xml | ターゲットとするサーバに関する情報 |
■EJB生成
ウィザードを使用してEJBのクラスを生成します。Stateless Session Beanを生成してみましょう。
「ファイル」→「新規」→「Lomboz EJB Creation Wizard」で表示されるダイアログで、「ソース・フォルダ」「パッケージ」「名前」を入力し、「Select EJB Type」チェックボックスでEJBのタイプを選択します。今回は以下のように設定しました。
ソース・フォルダ | j2eePrj/src |
---|---|
パッケージ | ml |
名前 | MLAdmin |
Select EJB Type | Stateless Session Bean |
「終了」をクリックすると、srcフォルダ配下にパッケージとJavaファイルが生成されます。Javaファイル名は、先ほどのダイアログで指定した名前+Bean.javaとなります。今回生成されたMLAdminBean.javaファイルをエディタで開くと、クラスコメントのところが以下のようになっています。
/** * @ejb.bean name="MLAdmin" * jndi-name="MLAdminBean" * type="Stateless" **/
この@ejb.beanというタグはXDocletのクラスレベルのタグで、このクラスがEJBのビジネスロジックを実装したクラスであることを示します。name、jndi-name、typeはEJBの属性を示すパラメータになります。それぞれ以下のような意味があります。
Name | デプロイメントディスクリプタ(ejb-jar.xml)に記述されるEJB名 |
---|---|
jndi-name | ベンダ固有のデプロイメントディスクリプタに記述されるJNDI登録名 |
名前 | MLAdmin |
type | EJBのタイプ |
■ソース編集
作成したEJBに、ビジネスメソッドを追加します。Javaファイルを右クリックし、「Lomboz J2EE...」→「Add EJB method...」を選択します。表示されるダイアログで、「Method Signature」「Method Type」「Interface Type」を記入します。
「Method Signature」には、メソッドの定義文を記入します。今回は、以下のように記入しました。
public String getName(String email)
「Method Type」では以下の中から選択します。
Business Method | ビジネスメソッドをEJBに追加する際に選択 |
---|---|
Home Method | ホームインターフェイスにホームメソッドを追加する際に選択 |
Create Method | EJB生成時に呼ばれるejbCreateをEJBに追加する際に選択 |
今回は「Business Method」を選択します。「Interface Type」では、以下の中から選択します。
Remote Interface | リモートインターフェイス用のメソッドの際に選択 |
---|---|
Local Interface | EJB 2.0から使用できるローカルインターフェイス用のメソッドの際に選択 |
今回は「Remote Interface」を選択します。「終了」をクリックすると、以下のようなEJBのビジネスメソッドのひな型が自動的に生成されます。
/** * @ejb.interface-method * tview-type="remote" **/ public String getName(String email) { return null; }
@ejb.interface-methodというタグはXDocletのメソッドレベルのタグで、このメソッドがEJBのリモートインターフェイスに追加されるべきメソッドであることを示します。view-typeパラメータはEJB 2.0から追加されたローカルインターフェイス使用時に意味のあるパラメータで、以下の3種類の指定ができます。
Remote | このメソッドをリモートインターフェイスのみに追加 |
---|---|
Local | このメソッドをローカルインターフェイスのみに追加 |
Both | このメソッドをリモート/ローカル両方のインターフェイスに追加 |
※Lomboz2.1_02では、パラメータ名が「tview-type」とXDocletのタグとしては誤って生成されるため、デフォルトのbothが指定されたのと同様の動作になります。しかしLombozのウィザードで「both」の指定ができないことと、リモートインターフェイスとローカルインターフェイスでメソッドを変えることがめったにないことからあまり問題とはなっていないようです。もちろんタグを直接正しく修正すれば、期待どおりの効果を得られます。 |
今回は、メールアドレスに含まれる文字列のうち、「@」より前を名前として返すように実装します。
/** * @ejb.interface-method * tview-type="remote" **/ public String getName(String email) { return null; }
JDK 1.4の正規表現
上記の処理は、JDK 1.4から使用できる正規表現関連のメソッドを使用しています。
JDK 1.3以前では、以下のようにして実装することができます。
int index = email.indexOf('@'); return (index < 0) ? email : email.substring(0, index);
■EJBクラス生成
EJBを開発するうえでは、ホームインターフェイス、リモートインターフェイス、実装クラス、デプロイメントディスクリプタを作成する必要があります。LombozでXDocletを使用し、これらを1つのJavaファイルから自動生成してみましょう。
まず、基となるJavaファイルをEJBモジュールに追加します。「MLAdminBean.java」を右クリック→「Lomboz J2EE...」→「Add EJB to module...」を選択します。表示されるダイアログで、「Ejb[mlEJB]」をチェックし、「OK」をクリックします。bean.xmlとejbs.xmlにMLAdminBeanが追加されます。
続いて、EJBのファイルを生成します。「mlEJB」フォルダを右クリック→「Lomboz J2EE...」→「Generate EJB Classes」を選択します。
ejbsrcフォルダ配下には以下のファイルが生成されます。
- リモートインターフェイス
- ホームインターフェイス
- ローカルインターフェイス
- ローカルホームインターフェイス
- 実装クラス
- ユーティリティクラス
また、mlEJB/META-INF配下には、各種サーバごとのデプロイメントディスクリプタが更新、生成されます。
■EJBのデプロイ
デプロイを行うと必要なファイルがEJBのjarファイルとしてアーカイブ化され、アプリケーションサーバごとの所定のディレクトリにコピーされます。
「mlEJB」フォルダを右クリックして「Lomboz J2EE...」→「Deploy Module」を選択します。mlEJBフォルダ直下にmlEJB.jarが生成され、[JBossのインストールディレクトリ]\server\default\deployディレクトリにもmlEJB.jarがコピーされます。
コピー先はmlEJB/META-INF/build.propertiesのdeploy.dirプロパティを編集することで変更することができます。
Copyright © ITmedia, Inc. All Rights Reserved.