2008年11月21日金曜日

RAD v7.5 試用版 を使ってJSFとEJB3.0・・・(2)

今回の手順は以下のページほとんどそのままです。
Building Java EE applications with IBM Rational Application Developer V7.5 ... (IBM dWの記事)
が、若干違う+dWの手順では上手く行かないところがあるのでご注意ください。

手順

1. サンプルDBを作成
2. DBをWAS v7のデータソースに登録
(前回はここまで)
3. JPAプロジェクトを作成
4. EJBを作成(findメソッドのみ)
(今回はここまで)
5. JSFを作成(参照のみ)
6. EJBに挿入メソッドを作成する
7. JSFを作成(挿入)
8. EJBに更新メソッドを作成する
9. JSFを作成(更新)

3. JPA/EJBを作成(findメソッドのみ)
一旦サーバーは止めましょう。重いし(私の環境ではハングすることもありました)。
(1)JPAプロジェクトを作成します。
ファイル > 新規 > その他 > JPAプロジェクト をクリックし 「新規 JPA プロジェクト」ウィンドウを起動します。以下の情報を入力します(MySampleEARは存在していません)
プロジェクト名:MySampleJPA
EARメンバーシップのEAR プロジェクト名:MySampleEAR
「終了」をクリックします。

(2)エンティティ(≒DBとマップされたBean)を作成します
「MySampleJPA」フォルダを右クリックし、新規作成 > エンティティー を選択します。
「新規 JPA エンティティー・エンティティークラス」ウィンドウで以下の情報を入力します。
Java パッケージ:test
クラス名:MySample
「次へ」をクリックします。
「新規 JPA エンティティー・エンティティープロパティ」のエンティティ・フィールドを埋めます。
追加をクリックしてエンティティーフィールドダイアログを表示
タイプ:int
名前:myid
としてOKをクリック。
「鍵」カラムにチェックを入れておきます。
再び「追加」をクリック。以下の情報を入力します。
タイプ:String 要注意!!タイプは char ではありません!!
名前:myFlag (敢えてテーブルのカラム名と異なるものを使っています)

「終了」をクリックすると以下のソースが生成されます。
package test;

import java.io.Serializable;
import javax.persistence.*;

/**
* Entity implementation class for Entity: MySample
*
*/
@Entity

public class MySample implements Serializable {


@Id
private int myid;
private char myFlag;
private static final long serialVersionUID = 1L;

public MySample() {
super();
}
public int getMyid() {
return this.myid;
}

public void setMyid(int myid) {
this.myid = myid;
}
public char getMyFlag() {
return this.myFlag;
}

public void setMyFlag(char myFlag) {
this.myFlag = myFlag;
}

}

アノテーションを追加します。(太字部分)
package test;

import java.io.Serializable;
import javax.persistence.*;

/**
* Entity implementation class for Entity: MySample
*
*/
@Entity
// ここでスキーマ名を指定します
@Table(schema="learning", name="mysample")
public class MySample implements Serializable {


@Id
private int myid;
// ここで変数名とは異なるカラム名を指定します。
@Column(name="mychar")
private char myFlag;
private static final long serialVersionUID = 1L;

public MySample() {
super();
}
public int getMyid() {
return this.myid;
}

public void setMyid(int myid) {
this.myid = myid;
}
public char getMyFlag() {
return this.myFlag;
}

public void setMyFlag(char myFlag) {
this.myFlag = myFlag;
}

}

次にJPAのpersistent.xmlにデータソース名指定します。
「MySampleJPA」フォルダ > 「JPAコンテンツ」 > persistence.xml をクリックします。
左ペインの「パーシスタンス・ユニット」を選択し、右側のペインのJTAデータ・ソースに 2.(3)で指定した jdbc/learning を入力します。

以上でJPAの作成が完了です。(残念ながらここでは動作検証は出来ません)

次にEJBプロジェクトを作成します。

ファイル > 新規 > EJBプロジェクト を選択して「新規 EJB プロジェクト・EJB プロジェクト」ウィンドウを起動します。
プロジェクト名に MySampleEJB と入力します。EJBモジュールバージョンが3.0であること、EARメンバーシップのEARプロジェクト名が MySampleEAR であることを確認し、「終了」をクリックします。

MySampleEJBフォルダを右クリックし プロパティ > Java EE モジュール依存関係 をクリックします。「選択可能な従属JAR」で「MySampleJPA.jar」にチェックを入れ、OKをクリックします。

MySampleEJB > MySampleEJB > セッションBean を右クリックします。コンテキストメニューから 新規 > セッションBean を選択します。

「EJB 3.0 セッションBean の作成ウィンドウ」に以下の情報を入力し、「ビジネス・インターフェースの作成」が「ローカル」になっていることを確認して終了をクリックします。
Javaパッケージ:test
クラス名:MySampleSession

生成されたEJBソースに下記の太字部分を追記します。
package test;

import javax.ejb.Stateless;

/**
* Session Bean implementation class MySampleSession
*/
@Stateless
public class MySampleSession implements MySampleSessionLocal {

/**
* Default constructor.
*/
public MySampleSession() {
// TODO Auto-generated constructor stub
}

@PersistenceContext(unitName="MySampleJPA")
EntityManager em;

public MySample findMySample(int myid) {
MySample ret = (MySample)em.find(MySample.class, myid);
return ret;
}

}

次にメソッドをプロモートします。

(重要 dWの記事には欠けていますが、以下の手順が必要です)
MySampleEJBClientフォルダを右クリックして、コンテキストメニューからプロパティを選択、次にJava EE モジュール依存関係 をクリックして「選択可能な従属JAR」で「MySampleJPA.jar」にチェックを入れます。

次に「アウトライン」ビューでfindMySampleを右クリック、コンテキストメニューから「Java EEツール」>「メソッドのプロモート」を実行します。

以上でEJBの作成が完了しました。

ここでユニバーサルクライアントを利用して動作確認をしてみます。

RADのサーバービューでWASサーバを起動します。

サーバーを右クリックし プロジェクトの追加および除去 を選択、MySampleEARを追加します。

公開が完了し、同期済みステータスになったら、サーバーを右クリックし、Universal Test Client > 実行 をクリックします。UTCが起動するのでログインします。(プロジェクトの追加以前にUTCを起動したことがあれば、一度「再起動」をクリックしてください)

「JNDIエクスプローラー」リンクをクリックします。

test.MySampleSessionLocalが表示されるのでクリックします。
※ そもそも表示されない場合はどこかで手順を間違っている可能性があります。プロジェクトがサーバに追加(デプロイ)されているかどうか等、手順を確認して下さい。
※ リンクではなく単にテキストが表示されている場合は、UTCの再起動を試して下さい。それでも出来ない場合はやはり手順を見直して下さい。

左側のペインに
MySampleSessionLocal
- MySampleSessionLocal
- メソッドの可視性
- MySample findMySample(int)
と表示されます。MySample findMySample(int) をクリックして下さい。

右側のペインに
test.MySample findMySample(int)

パラメーター 値
int: 0

と表示されています。そのまま「起動」をクリックします。

test.EJSLocal0SLMySampleSession_af305597.findMySample()
test.MySample@1ee01ee0 (test.MySample)

などと表示されれば成功です。「オブジェクトの使用」> String getMyFlag() ('a'が返る)などで遊んでみてください。

以上でEJBの作成が完了です。(しかしEJB簡単になったなあ)

RAD内のサーバーを止めてから、次のステップに行きます。

.

0 件のコメント: