stateless session beans
DESCRIPTION
Stateless Session Beans. EJB 3.0 コース 第 4 回 2006 年 8 月 4 日. ここでの目標. Stateless Session Bean の概要を理解する。. Stateless Session Beans. Session Beans (1). クライアントが必要に応じて呼び出す処理をまとめた もの クライアントの特定のセッションに対応 セッション開始と同時に生成され、セッション終了時に消滅. Session Beans (2). Stateless Session Beans - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/1.jpg)
1
Stateless Session BeansEJB 3.0 コース
第 4 回2006 年 8 月 4 日
![Page 2: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/2.jpg)
2
ここでの目標 Stateless Session Bean の概要を理解す
る。
![Page 3: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/3.jpg)
3
Stateless Session Beans
![Page 4: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/4.jpg)
4
Session Beans (1) クライアントが必要に応じて呼び出す処
理をまとめたもの クライアントの特定のセッションに対応 セッション開始と同時に生成され、セッ
ション終了時に消滅
![Page 5: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/5.jpg)
5
Session Beans (2) Stateless Session Beans
インスタンスに固有のフィールドがないため内部状態を持たず、ユーティリティクラスのように振る舞う
Stateful Session Beans 内部状態を持っている
![Page 6: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/6.jpg)
6
サンプルアプリケーション Hello サンプルアプリケーション Java EE サーバ側 (EJB)
Hello.java HelloImpl.java
クライアント側 HelloClient.java
![Page 7: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/7.jpg)
7
インタフェースの作成
![Page 8: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/8.jpg)
8
HelloWorld.java (1)
import javax.ejb.Remote;
@Remotepublic interface Hello {
public String sayHello(String name);}
![Page 9: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/9.jpg)
9
Hello.java (2) Stateless Session Beans が公開するメ
ソッドを定義しているインタフェース 従来の EJB では、 EJB オブジェクトイン
タフェースを継承する必要があった EJB 3.0 では、 POJI + Annotation のスタ
イルとなる
![Page 10: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/10.jpg)
10
@Remote このインタフェースは、 Remote (= 別の
マシン)で実行される可能性がある @Remote アノテーションを付加するこ
とで、この EJB の機能を別のマシンから呼びだすことができるようになる
具体的には、 RMI/IIOP が用いられる
@Remote public interface Hello {…}
![Page 11: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/11.jpg)
11
@Local 同一の Java Virtual Machine からしか動
かさない場合、 @Local アノテーションを付加する
@Local public interface Hello {…}
![Page 12: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/12.jpg)
12
@Remoteと@Local 何もアノテーションを付けなかった場合、
@Local を付けるのと同じことになる
public interface Hello {…}
![Page 13: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/13.jpg)
13
Stateless Session Beansの作成
![Page 14: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/14.jpg)
14
HelloImpl.java (1)import javax.ejb.Stateless;
@Statelesspublic class HelloImpl implements Hello {
public String sayHello(String name) {return "Hello, " + name + "!";
}}
![Page 15: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/15.jpg)
15
HelloImpl.java (2)@Stateless Stateless Session Bean 本体 Stateless Session Bean であることを示
すために、 @Stateless アノテーションを付加する
![Page 16: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/16.jpg)
16
HelloImpl.java (3) 従来の EJB では
SessionBean インタフェースを実装 ejbCreate, ejbRemove メソッドなどを用意
EJB 3.0 では、 Hello インタフェースを実装した POJO になっている
![Page 17: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/17.jpg)
17
クライアントプログラム (1)JNDI の利用
![Page 18: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/18.jpg)
18
考え方 クライアントプログラムから Hello イン
タフェースを呼び出す必要がある。 でも、どうやって?
![Page 19: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/19.jpg)
19
HelloClient.java
Context context = new InitialContext();hello = (Hello)context.lookup("Hello");String message =
hello.sayHello(args[0]);System.out.println(message);
![Page 20: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/20.jpg)
20
JNDI Java で ディレクトリサービス (LDAP な
ど ) にアクセスするための API 抽象的な「名前」をキーにしてオブジェ
クトを取得できる。 JDBC, EJB, JavaMail などでよく利用され
る。
![Page 21: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/21.jpg)
21
JNDI からHello オブジェクトを取得
// Context ( ディレクトリ )// InitailContext ( ルート )Context context = new InitialContext();// 名前に対応する Hello を取得// 利用できる名前は次のコマンドで調べる// asadmin list-jndi-entrieshello = (Hello)context.lookup("Hello");
![Page 22: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/22.jpg)
22
メソッドの実行
hello.sayHello(args[0]);
![Page 23: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/23.jpg)
23
サンプルアプリケーションの実行 (1)
![Page 24: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/24.jpg)
24
サンプルアプリケーションの実行 (1) 環境変数の設定
GlassFish のインストール先 → JAVAEE_HOME %JAVAEE_HOME%¥bin に PATH を通す
GlassFish の起動 asadmin start-domain
サンプルアプリケーションのコンパイル cd hello-jndi javac -classpath %JAVAEE_HOME%¥lib¥javaee.jar *.ja
va
![Page 25: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/25.jpg)
25
サンプルアプリケーションの実行 (2) Jar ファイルの作成と配備 ( デプロイ )
jar cvf hello.jar Hello.class HelloImpl.class copy hello.jar %JAVAEE_HOME%¥domains¥domain1
¥autodeploy クライアントプログラムの実行
java -classpath %JAVAEE_HOME%¥lib/javaee.jar;%JAVAEE_HOME%¥lib¥appserv-rt.jar;. HelloClient tomoharu
![Page 26: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/26.jpg)
26
クライアントプログラム (2)Dependency Injection
![Page 27: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/27.jpg)
27
考え方 JNDI を使ったクライアントでは、「名
前」をプログラムに記述していた。 「名前」はコンテナ環境に依存する Dependency Injection を使って解決した
い
![Page 28: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/28.jpg)
28
HelloClient.java
@EJB static Hello hello;public static void main(String[] args) {
String message =hello.sayHello(args[0]);
System.out.println(message);}
![Page 29: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/29.jpg)
29
@EJB 該当する EJB を注入する Annotation
@EJB static Hello hello;
コンテナに依存する情報がソースコードから消えた
実行するにはクライアントコンテナが必要になる (DI を実行するため )
![Page 30: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/30.jpg)
30
サンプルアプリケーションの実行 (2)
![Page 31: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/31.jpg)
31
クライアントの実行
appclient HelloClient tomoharu
appclient コマンドは、クライアントコンテナを起動してアプリケーションを実行するためのコマンド このコマンドによって、 @EJB への依存性注
入が行われる
![Page 32: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/32.jpg)
32
課題
![Page 33: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/33.jpg)
33
課題 ドル建ての金額を引数に与えたら、円に
換算して出力するような dollarToYen メソッドを持つ Stateless Session Bean をつくる。
![Page 34: Stateless Session Beans](https://reader036.vdocuments.site/reader036/viewer/2022081517/56815ce6550346895dcaeb0c/html5/thumbnails/34.jpg)
34
課題のクライアントプログラム例
@EJB static Converter converter;BigDecimal dollar =
new BigDecimal(25);BigDecimal yen =
converter.dollarToYen(dollar);System.out.println(yen);