(3)Entity Beanの作成
今回はデータベースへのアクセスを行うために、Entity Beanを使用します。Entity BeanにはBMPとCMPがありますが、BMPは自らSQLを記述する必要があるため少々面倒です。今回は簡単に使用することのできる、CMPを使用します。
以下の図にEntity Beanを生成するときの流れを示します。
それでは、Lombozを使用してEntity Beanを作成していきましょう。本稿では前回の記事で作成したj2eePrjを引き続き使用するため、DataSourceの設定から作業を行います。
■DataSourceの設定
mlEJB\META-INF\ejbGenerate.xmlを修正し、JBossのDataSourceの設定を記述します。PLEASE_MODIFY_THIS と記述されている部分を以下のように修正します。
<jboss version="3.0" unauthenticatedPrincipal="nobody" xmlencoding="UTF-8" destdir="${ejb.dd.dir}" validatexml="false" datasource="java:/MySqlDS" datasourcemapping="mySQL" preferredrelationmapping="foreign-key" />
■EJBの生成
ウィザードを使用してEntity Beanのクラスを生成します。パッケージ・エクスプローラービュー上でプロジェクトをクリックし、「ファイル」→「新規」→「Lomboz EJB Creation Wizard」で表示されるダイアログで、「ソース・フォルダ」、「パッケージ」、「名前」を入力し、「Select EJB Type」チェックボックスでEJBのタイプを選択します。今回は以下のように設定しました。
ソース・フォルダ | j2eePrj/src |
---|---|
パッケージ | ml |
名前 | MLMember |
Select EJB Type | Container Managed Entity Bean |
「次へ」をクリックすると、CMPの設定を行うダイアログが表示されます。今回は以下のように設定しました。
Schema name | mlmember |
---|---|
Table name | mlmember |
さらに、Persistent fieldsに以下を追加します。
Field | |
---|---|
Field type | java.lang.String |
Database column | |
SQL type | VARCHAR |
name | |
Field | name |
Field type | java.lang.String |
Database column | name |
SQL type | VARCHAR |
Fieldsリストからemailを選択し、「Make primary key」ボタンをクリックします。
「終了」ボタンをクリックすると、srcフォルダ配下にJavaファイルが生成されます。Javaファイル名は、先ほどのダイアログで指定した名前+Bean.javaとなります。
今回生成されたMLMemberBean.javaファイルをエディタで開くと、クラスコメントのところが以下のようになっています。
/** * @ejb.bean name="MLMember" * jndi-name="MLMemberBean" * type="CMP" * primkey-field="email" * schema="mlmember" * cmp-version="2.x" * * @ejb.persistence * table-name="mlmember" * * @ejb.finder * query="SELECT OBJECT(a) FROM mlmember as a" * signature="java.util.Collection findAll()" * **/
前回のStateless Session Beanのときに比べ、数多くのXDoclet用のタグ、パラメータが指定されています。これらのタグ、パラメータの意味については、XDocletのホームページ「Tag Reference for @ejb」や『現場に活かすJakarta Project「第3回 AntでEJB開発を効率化」』が詳しいので参照してください。
■ソース編集
ejbCreate、ejbPostCreateメソッドを修正し、このEntity Beanが生成されたときの初期化コードを記述します。TODO:で指定されている部分を修正します。今回はejbCreateメソッドに対し以下の修正を行います。
- 引数にemail、nameを追加
- 内部で、setEmail、setNameメソッドを呼び出す
/** * The ejbCreate method. * * @ejb.create-method */ public java.lang.String ejbCreate(String email, String name) throws javax.ejb.CreateException { setEmail(email); setName(name); return null; }
■EJBクラス生成
Stateless Session Beanのときと同様に、LombozからXDocletを使用し、EJBで必要となるファイルを1つのJavaファイルから自動生成します。
まず、元となるJavaファイルをEJBモジュールに追加します。「MLMemberBean.java」を右クリック→「Lomboz J2EE...」→「Add EJB to module...」を選択します。表示されるダイアログで、「Ejb[mlEJB]」をチェックし、「OK」をクリックします。bean.xmlとejbs.xmlにMLMemberBeanが追加されます。
続いて、EJBのファイルを生成します。「mlEJB」フォルダーを右クリック→「Lomboz J2EE...」→「Generate EJB Classes」を選択します。ejbsrcフォルダー配下に、以下のファイルが生成されます。
- リモートインターフェイス
- ホームインターフェイス
- ローカルインターフェイス
- ローカルホームインターフェイス
- 実装クラス
- データオブジェクトクラス
- PKクラス
- ユーティリティクラス
また、mlEJB/META-INF配下には、各種サーバごとのデプロイメントディスクリプタが更新・生成されます。Stateless Session Beanの生成時には作成されなかった、CMP関連のディスクリプタも生成されます。
Copyright © ITmedia, Inc. All Rights Reserved.