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
© Copyright 2026 ExpyDoc