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 2024 ExpyDoc