Stateless Session Beans

34
1 Stateless Session Beans EJB 3.0 コココ コ4コ 2006 コ 8 コ 4 コ

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 Presentation

Transcript of Stateless Session Beans

Page 1: Stateless Session Beans

1

Stateless Session BeansEJB 3.0 コース

第 4 回2006 年 8 月 4 日

Page 2: Stateless Session Beans

2

ここでの目標 Stateless Session Bean の概要を理解す

る。

Page 3: Stateless Session Beans

3

Stateless Session Beans

Page 4: Stateless Session Beans

4

Session Beans (1) クライアントが必要に応じて呼び出す処

理をまとめたもの クライアントの特定のセッションに対応 セッション開始と同時に生成され、セッ

ション終了時に消滅

Page 5: Stateless Session Beans

5

Session Beans (2) Stateless Session Beans

インスタンスに固有のフィールドがないため内部状態を持たず、ユーティリティクラスのように振る舞う

Stateful Session Beans 内部状態を持っている

Page 6: Stateless Session Beans

6

サンプルアプリケーション Hello サンプルアプリケーション Java EE サーバ側 (EJB)

Hello.java HelloImpl.java

クライアント側 HelloClient.java

Page 7: Stateless Session Beans

7

インタフェースの作成

Page 8: Stateless Session Beans

8

HelloWorld.java (1)

import javax.ejb.Remote;

@Remotepublic interface Hello {

public String sayHello(String name);}

Page 9: Stateless Session Beans

9

Hello.java (2) Stateless Session Beans が公開するメ

ソッドを定義しているインタフェース 従来の EJB では、 EJB オブジェクトイン

タフェースを継承する必要があった EJB 3.0 では、 POJI + Annotation のスタ

イルとなる

Page 10: Stateless Session Beans

10

@Remote このインタフェースは、 Remote (= 別の

マシン)で実行される可能性がある @Remote アノテーションを付加するこ

とで、この EJB の機能を別のマシンから呼びだすことができるようになる

具体的には、 RMI/IIOP が用いられる

@Remote public interface Hello {…}

Page 11: Stateless Session Beans

11

@Local 同一の Java Virtual Machine からしか動

かさない場合、 @Local アノテーションを付加する

@Local public interface Hello {…}

Page 12: Stateless Session Beans

12

@Remoteと@Local 何もアノテーションを付けなかった場合、

@Local を付けるのと同じことになる

public interface Hello {…}

Page 13: Stateless Session Beans

13

Stateless Session Beansの作成

Page 14: Stateless Session Beans

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

15

HelloImpl.java (2)@Stateless Stateless Session Bean 本体 Stateless Session Bean であることを示

すために、 @Stateless アノテーションを付加する

Page 16: Stateless Session Beans

16

HelloImpl.java (3) 従来の EJB では

SessionBean インタフェースを実装 ejbCreate, ejbRemove メソッドなどを用意

EJB 3.0 では、 Hello インタフェースを実装した POJO になっている

Page 17: Stateless Session Beans

17

クライアントプログラム (1)JNDI の利用

Page 18: Stateless Session Beans

18

考え方 クライアントプログラムから Hello イン

タフェースを呼び出す必要がある。 でも、どうやって?

Page 19: Stateless Session Beans

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

20

JNDI Java で ディレクトリサービス (LDAP な

ど ) にアクセスするための API 抽象的な「名前」をキーにしてオブジェ

クトを取得できる。 JDBC, EJB, JavaMail などでよく利用され

る。

Page 21: Stateless Session Beans

21

JNDI からHello オブジェクトを取得

// Context ( ディレクトリ )// InitailContext ( ルート )Context context = new InitialContext();// 名前に対応する Hello を取得// 利用できる名前は次のコマンドで調べる// asadmin list-jndi-entrieshello = (Hello)context.lookup("Hello");

Page 22: Stateless Session Beans

22

メソッドの実行

hello.sayHello(args[0]);

Page 23: Stateless Session Beans

23

サンプルアプリケーションの実行 (1)

Page 24: Stateless Session Beans

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

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

26

クライアントプログラム (2)Dependency Injection

Page 27: Stateless Session Beans

27

考え方 JNDI を使ったクライアントでは、「名

前」をプログラムに記述していた。 「名前」はコンテナ環境に依存する Dependency Injection を使って解決した

Page 28: Stateless Session Beans

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

29

@EJB 該当する EJB を注入する Annotation

@EJB static Hello hello;

コンテナに依存する情報がソースコードから消えた

実行するにはクライアントコンテナが必要になる (DI を実行するため )

Page 30: Stateless Session Beans

30

サンプルアプリケーションの実行 (2)

Page 31: Stateless Session Beans

31

クライアントの実行

appclient HelloClient tomoharu

appclient コマンドは、クライアントコンテナを起動してアプリケーションを実行するためのコマンド このコマンドによって、 @EJB への依存性注

入が行われる

Page 32: Stateless Session Beans

32

課題

Page 33: Stateless Session Beans

33

課題 ドル建ての金額を引数に与えたら、円に

換算して出力するような dollarToYen メソッドを持つ Stateless Session Bean をつくる。

Page 34: Stateless Session Beans

34

課題のクライアントプログラム例

@EJB static Converter converter;BigDecimal dollar =

new BigDecimal(25);BigDecimal yen =

converter.dollarToYen(dollar);System.out.println(yen);