連載
» 2003年08月12日 00時00分 公開

lombozプラグインでEJB開発を簡素化Eclipse徹底活用(4)(2/3 ページ)

[金子崇之, 岡本隆史,NTTデータ]

EJBの作成

 前述のとおり、LombozではEJBの開発にXDocletを使用します。XDoclet(http://xdoclet.sourceforge.net/)は、コード生成エンジンであり、ユーザーがXDoclet用の特殊なJavaDocタグをコード中に記述することにより、さまざまなファイルを自動生成します。EJBの開発においては、ホーム/リモートインターフェイス、デプロイメントディスクリプタを自動生成します。

 Lombozでは、XDoclet用のタグを含んだクラスをウィザードにより生成します。また、XDocletを使用するためのbuild.xmlなどを自動生成し、Eclipseのメニュー上からXDocletを呼び出せるようにします。

 以下の図に開発に必要となるファイルとLombozとXDocletの関係を示します。

LombozとXDocletの関係 LombozとXDocletの関係

 つまり、Lombozを使用したEJB開発では、次のような利点があります。

  1. ホーム/リモートインターフェイスなど、複数のコードに分散していたソースコードを1つにまとめることができ、開発の効率化とコードの大幅な削減が可能になる
  2. 管理すべきファイルが1つになったことにより、メンテナンスの手間を大幅に削減すると同時に、EJB本体、インターフェイス、デプロイメントディスクリプタ間の不整合が生じることがない
  3. アプリケーションサーバごとに異なるデプロイメントディスクリプタも自動的に生成されるので、開発者は、アプリケーションサーバごとの違いを意識する必要がない
  4. 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が作成されます。

作成されたj2eeプロジェクト 作成されたj2eeプロジェクト

 画面中のフォルダ「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」を選択します。

生成されたEJBクラス 生成されたEJBクラス (クリックすると拡大します)

 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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。