390 likes | 498 Views
Stateless Session Beans. EJB 3.0 コース 第 3 回. ここでの目標. “ Oracle Application Server EJB 3.0 Preview ” の概要を理解する。 Stateless Session Bean の概要を理解する。. Oracle Application Server EJB 3.0 Preview. EJB 3.0 の実装. 現時点では、主に次の3つ Resin 3.0 Jboss EJB 3.0 Preview Oracle Application Server EJB 3.0 Preview.
E N D
Stateless Session Beans EJB 3.0 コース 第3回
ここでの目標 • “Oracle Application Server EJB 3.0 Preview”の概要を理解する。 • Stateless Session Bean の概要を理解する。
EJB 3.0 の実装 • 現時点では、主に次の3つ • Resin 3.0 • Jboss EJB 3.0 Preview • Oracle Application Server EJB 3.0 Preview
Oracle Application Server EJB 3.0 Preview • 今回の実習で利用 • “EJB 3.0 Early Draft 2”を実装している • O/R Mapping Framework として、”Oracle TopLink”を採用
Oracle TopLink • Oracle 社のO/R Mapping Framework • EJB 3.0 の仕様策定に多大な影響を与える • 来年リリース予定の Java EE 5 では、Persistence API の Reference Implementation (RI = 参照実装) として、TopLink が使われる予定。
インストール (1) • Zip ファイルをダウンロードして、展開 • 展開先のディレクトリに、環境変数 ORACLE_HOME を設定しておく。 • %ORACLE_HOME%¥bin にPATHを通しておく。
インストール (2) • 環境変数 JAVA_HOME の設定 • Java は J2SE 5.0 が必要 • ANTのインストールと環境変数 ANT_HOME の設定
Session Beans (1) • クライアントが必要に応じて呼び出す処理をまとめたもの • クライアントの特定のセッションに対応 • セッション開始と同時に生成され、セッション終了時に消滅
Session Beans (2) • Stateless Session Beans • インスタンスに固有のフィールドがないため内部状態を持たず、ユーティリティクラスのように振る舞う • Statefull Session Beans • 内部状態を持っている
サンプルアプリケーション (1) • %ORACLE_HOME%¥demo¥howtoejb30slsb について解説する • HelloWorld サンプルアプリケーション • Ant でコンパイル、J2EEサーバへの配備 (デプロイ) を実行
サンプルアプリケーション (2) • J2EEサーバ側 (EJB) • HelloWorld.java • HelloWorldBean.java • クライアント側 • HelloWorldClient.java • そのほか、いくつかの設定ファイル
HelloWorld.java (1) import javax.ejb.Remote; @Remote public interface HelloWorld { public void sayHello(String name); }
HelloWorld.java (2) • Stateless Session Beans が公開するメソッドを定義しているインタフェース • 従来のEJBでは、EJBオブジェクトインタフェースを継承する必要があった • EJB 3.0 では、POJI + Annotation のスタイルとなる
@Remote • このインタフェースは、Remote (=別のマシン)で実行される可能性がある • @Remoteアノテーションを付加することで、このEJBの機能を別のマシンから呼びだすことができるようになる • 具体的には、RMI/IIOPが用いられる @Remote public interface HelloWorld {…}
@Local • 同一のJava Virtual Machine からしか動かさない場合、@Local アノテーションを付加する @Local public interface HelloWorld {…}
@Remoteと@Local • 何もアノテーションを付けなかった場合、@Localを付けるのと同じことになる public interface HelloWorld {…}
HelloWorldBean.java (1) import javax.ejb.Stateless; @Stateless public class HelloWorldBean implements HelloWorld { public void sayHello(String name) {...} }
HelloWorldBean.java (2)@Stateless • Stateless Session Bean 本体 • Stateless Session Bean であることを示すために、@Stateless アノテーションを付加する
HelloWorldBean.java (3) • 従来のEJBでは • SessionBean インタフェースを実装 • ejbCreate, ejbRemove メソッドなどを用意 • EJB 3.0 では、HelloWorld インタフェースを実装したPOJOになっている
HelloWorldClient.java Context context = new InitialContext(); HelloWorld helloWorld = (HelloWorld) context.lookup("java:comp/env/ejb/HelloWorld"); helloWorld.sayHello(args[0]);
JNDI • Java で ディレクトリサービス (LDAPなど) にアクセスするための API • 抽象的な「名前」をキーにしてオブジェクトを取得できる。 • オブジェクトの作成に必要な情報は設定ファイルに記述する。 • JDBC, EJB, JavaMail などでよく利用される。
JNDIからHelloWorldオブジェクトを取得 // Context (ディレクトリ) // InitailContext (ルート) Context context = new InitialContext(); // 名前に対応する HelloWorld を取得 HelloWorld helloWorld = (HelloWorld) context.lookup( "java:comp/env/ejb/HelloWorld");
etc/application-client.xml とJNDIからの検索 <ejb-ref-name> ejb/HelloWorld </ejb-ref-name> context.lookup( "java:comp/env/ejb/HelloWorld"); Javaのオブジェクトは、java:comp/env/ という文字列が自動的に付加される
メソッドの実行 helloWorld.sayHello(args[0]);
サンプルアプリケーションの実行 (1) • J2EEサーバの起動 • %ORACLE_HOME%¥bin¥ejb30 -start • Stateless Session Beans のコンパイル・デプロイ • cd %ORACLE_HOME%¥demo¥howtoejb30slsb • ant
サンプルアプリケーションの実行 (2) • クライアントプログラムの実行 • ant run
課題 • ドル建ての金額を引数に与えたら、円に換算して出力するような dollarToYen メソッドを持つ Stateless Session Bean をつくる。
課題のクライアントプログラム例 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);
編集すべきファイル • ソースファイル • etc/application-client.xml • etc/application.xml • etc/jndi.properties • build.xml
etc/application-client.xmlの変更 <ejb-ref-name> ejb/Converter </ejb-ref-name> …… <remote>test.Converter</remote>
etc/application.xml の変更 <display-name> converter </display-name> <module> <ejb>converter-ejb.jar</ejb> </module>
etc/jndi.properties の変更 java.naming.provider.url= ormi://localhost:23791/converter
build.xml の変更 <property name="app.name" value="converter" /> ...... <property name="cli.class" value="test.ConverterClient" />