1 / 34

Stateless Session Beans

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

hye
Télécharger la présentation

Stateless Session Beans

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Stateless Session Beans EJB 3.0 コース 第4回 2006年8月4日

  2. ここでの目標 • Stateless Session Bean の概要を理解する。

  3. Stateless Session Beans

  4. Session Beans (1) • クライアントが必要に応じて呼び出す処理をまとめたもの • クライアントの特定のセッションに対応 • セッション開始と同時に生成され、セッション終了時に消滅

  5. Session Beans (2) • Stateless Session Beans • インスタンスに固有のフィールドがないため内部状態を持たず、ユーティリティクラスのように振る舞う • Stateful Session Beans • 内部状態を持っている

  6. サンプルアプリケーション • Helloサンプルアプリケーション • Java EEサーバ側 (EJB) • Hello.java • HelloImpl.java • クライアント側 • HelloClient.java

  7. インタフェースの作成

  8. HelloWorld.java (1) import javax.ejb.Remote; @Remote public interface Hello { public String sayHello(String name); }

  9. Hello.java (2) • Stateless Session Beans が公開するメソッドを定義しているインタフェース • 従来のEJBでは、EJBオブジェクトインタフェースを継承する必要があった • EJB 3.0 では、POJI + Annotation のスタイルとなる

  10. @Remote • このインタフェースは、Remote (=別のマシン)で実行される可能性がある • @Remoteアノテーションを付加することで、このEJBの機能を別のマシンから呼びだすことができるようになる • 具体的には、RMI/IIOPが用いられる @Remote public interface Hello {…}

  11. @Local • 同一のJava Virtual Machine からしか動かさない場合、@Local アノテーションを付加する @Local public interface Hello {…}

  12. @Remoteと@Local • 何もアノテーションを付けなかった場合、@Localを付けるのと同じことになる public interface Hello {…}

  13. Stateless Session Beansの作成

  14. HelloImpl.java (1) import javax.ejb.Stateless; @Stateless public class HelloImpl implements Hello { public String sayHello(String name) { return "Hello, " + name + "!"; } }

  15. HelloImpl.java (2)@Stateless • Stateless Session Bean 本体 • Stateless Session Bean であることを示すために、@Stateless アノテーションを付加する

  16. HelloImpl.java (3) • 従来のEJBでは • SessionBean インタフェースを実装 • ejbCreate, ejbRemove メソッドなどを用意 • EJB 3.0 では、Helloインタフェースを実装したPOJOになっている

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

  18. 考え方 • クライアントプログラムから Hello インタフェースを呼び出す必要がある。 • でも、どうやって?

  19. HelloClient.java Context context = new InitialContext(); hello = (Hello)context.lookup("Hello"); String message = hello.sayHello(args[0]); System.out.println(message);

  20. JNDI • Java で ディレクトリサービス (LDAPなど) にアクセスするための API • 抽象的な「名前」をキーにしてオブジェクトを取得できる。 • JDBC, EJB, JavaMail などでよく利用される。

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

  22. メソッドの実行 hello.sayHello(args[0]);

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

  24. サンプルアプリケーションの実行 (1) • 環境変数の設定 • GlassFishのインストール先 → JAVAEE_HOME • %JAVAEE_HOME%¥bin に PATHを通す • GlassFishの起動 • asadmin start-domain • サンプルアプリケーションのコンパイル • cd hello-jndi • javac -classpath %JAVAEE_HOME%¥lib¥javaee.jar *.java

  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

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

  27. 考え方 • JNDIを使ったクライアントでは、「名前」をプログラムに記述していた。 • 「名前」はコンテナ環境に依存する • Dependency Injection を使って解決したい

  28. HelloClient.java @EJB static Hello hello; public static void main(String[] args) { String message = hello.sayHello(args[0]); System.out.println(message); }

  29. @EJB • 該当するEJBを注入するAnnotation @EJB static Hello hello; • コンテナに依存する情報がソースコードから消えた • 実行するにはクライアントコンテナが必要になる (DIを実行するため)

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

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

  32. 課題

  33. 課題 • ドル建ての金額を引数に与えたら、円に換算して出力するような dollarToYen メソッドを持つ Stateless Session Bean をつくる。

  34. 課題のクライアントプログラム例 @EJB static Converter converter; BigDecimal dollar = new BigDecimal(25); BigDecimal yen = converter.dollarToYen(dollar); System.out.println(yen);

More Related