Stateless Session Beans

Stateless Session Beans
EJB 3.0 コース
第3回
1
ここでの目標
“Oracle Application Server EJB 3.0
Preview” の概要を理解する。
 Stateless Session Bean の概要を理解す
る。

2
Oracle Application Server EJB
3.0 Preview
3
EJB 3.0 の実装

現時点では、主に次の3つ
Resin 3.0
 Jboss EJB 3.0 Preview
 Oracle Application Server EJB 3.0 Preview

4
Oracle Application Server EJB 3.0
Preview
今回の実習で利用
 “EJB 3.0 Early Draft 2” を実装している
 O/R Mapping Framework として、”Oracle
TopLink” を採用

5
Oracle TopLink
Oracle 社のO/R Mapping Framework
 EJB 3.0 の仕様策定に多大な影響を与え
る
 来年リリース予定の Java EE 5 では、
Persistence API の Reference
Implementation (RI = 参照実装) として、
TopLink が使われる予定。

6
インストール (1)
Zip ファイルをダウンロードして、展開
 展開先のディレクトリに、環境変数
ORACLE_HOME を設定しておく。
 %ORACLE_HOME%¥bin にPATHを通し
ておく。

7
インストール (2)

環境変数 JAVA_HOME の設定


Java は J2SE 5.0 が必要
ANTのインストールと環境変数
ANT_HOME の設定
8
Stateless Session Beans
9
Session Beans (1)
クライアントが必要に応じて呼び出す処理を
まとめたもの
 クライアントの特定のセッションに対応
 セッション開始と同時に生成され、セッション
終了時に消滅

10
Session Beans (2)

Stateless Session Beans


インスタンスに固有のフィールドがないため内
部状態を持たず、ユーティリティクラスのように
振る舞う
Statefull Session Beans

内部状態を持っている
11
サンプルアプリケーション (1)
%ORACLE_HOME%¥demo¥howtoejb30s
lsb について解説する
 HelloWorld サンプルアプリケーション
 Ant でコンパイル、J2EEサーバへの配備
(デプロイ) を実行

12
サンプルアプリケーション (2)

J2EEサーバ側 (EJB)
HelloWorld.java
 HelloWorldBean.java


クライアント側


HelloWorldClient.java
そのほか、いくつかの設定ファイル
13
インタフェースの作成
14
HelloWorld.java (1)
import javax.ejb.Remote;
@Remote
public interface HelloWorld {
public void sayHello(String name);
}
15
HelloWorld.java (2)
Stateless Session Beans が公開するメソッド
を定義しているインタフェース
 従来のEJBでは、EJBオブジェクトインタ
フェースを継承する必要があった
 EJB 3.0 では、POJI + Annotation のスタイ
ルとなる

16
@Remote



このインタフェースは、Remote (=別のマシ
ン)で実行される可能性がある
@Remoteアノテーションを付加することで、
このEJBの機能を別のマシンから呼びだすこと
ができるようになる
具体的には、RMI/IIOPが用いられる
@Remote public interface HelloWorld {…}
17
@Local

同一のJava Virtual Machine からしか動かさ
ない場合、@Local アノテーションを付加する
@Local public interface HelloWorld {…}
18
@Remoteと@Local

何もアノテーションを付けなかった場合、
@Localを付けるのと同じことになる
public interface HelloWorld {…}
19
Stateless Session Beans
の作成
20
HelloWorldBean.java (1)
import javax.ejb.Stateless;
@Stateless
public class HelloWorldBean implements
HelloWorld {
public void sayHello(String name) {...}
}
21
HelloWorldBean.java (2)
@Stateless
Stateless Session Bean 本体
 Stateless Session Bean であることを示すた
めに、@Stateless アノテーションを付加する

22
HelloWorldBean.java (3)

従来のEJBでは
SessionBean インタフェースを実装
 ejbCreate, ejbRemove メソッドなどを用意


EJB 3.0 では、HelloWorld インタフェースを実
装したPOJOになっている
23
クライアントプログラム
24
HelloWorldClient.java
Context context = new InitialContext();
HelloWorld helloWorld = (HelloWorld)
context.lookup("java:comp/env/ejb/HelloWo
rld");
helloWorld.sayHello(args[0]);
25
JNDI
Java で ディレクトリサービス (LDAPなど) に
アクセスするための API
 抽象的な「名前」をキーにしてオブジェクトを
取得できる。
 オブジェクトの作成に必要な情報は設定ファ
イルに記述する。
 JDBC, EJB, JavaMail などでよく利用される。

26
JNDIから
HelloWorldオブジェクトを取得
// Context (ディレクトリ)
// InitailContext (ルート)
Context context = new InitialContext();
// 名前に対応する HelloWorld を取得
HelloWorld helloWorld = (HelloWorld)
context.lookup(
"java:comp/env/ejb/HelloWorld");
27
etc/application-client.xml と
JNDIからの検索
<ejb-ref-name>
ejb/HelloWorld
</ejb-ref-name>
context.lookup(
"java:comp/env/ejb/HelloWorld");
Javaのオブジェクトは、
java:comp/env/ という文字列
が自動的に付加される
28
メソッドの実行
helloWorld.sayHello(args[0]);
29
サンプルアプリケーションの
実行 (1)

J2EEサーバの起動


%ORACLE_HOME%¥bin¥ejb30 -start
Stateless Session Beans のコンパイル・
デプロイ
cd %ORACLE_HOME%¥demo¥howtoejb30s
lsb
 ant

30
サンプルアプリケーションの
実行 (2)

クライアントプログラムの実行

ant run
31
課題
32
課題

ドル建ての金額を引数に与えたら、円に
換算して出力するような dollarToYen メ
ソッドを持つ Stateless Session Bean を
つくる。
33
課題の
クライアントプログラム例
Context context = new InitialContext();
Converter converter =
(Converter)context.lookup(
”java:comp/env/ejb/Converter");
BigDecimal dollar = new BigDecimal(25);
BigDecimal yen =
converter.dollarToYen(dollar);
System.out.println(yen);
34
編集すべきファイル
ソースファイル
 etc/application-client.xml
 etc/application.xml
 etc/jndi.properties
 build.xml

35
etc/application-client.xml
の変更
<ejb-ref-name>
ejb/Converter
</ejb-ref-name>
……
<remote>test.Converter</remote>
36
etc/application.xml の変更
<display-name>
converter
</display-name>
<module>
<ejb>converter-ejb.jar</ejb>
</module>
37
etc/jndi.properties の変更
java.naming.provider.url=
ormi://localhost:23791/converter
38
build.xml の変更
<property name="app.name"
value="converter" />
......
<property name="cli.class"
value="test.ConverterClient" />
39