3.4.2 Enterprise Beanを呼び出すための実装
EJBクライアントアプリケーションからEnterprise Beanを呼び出すには,JNDIを利用します。ここでは,EJBホームオブジェクトのリファレンスをルックアップする場合,およびビジネスインタフェースのリファレンスをルックアップする場合に分けて,Enterprise Beanを呼び出す方法を説明します。
- 〈この項の構成〉
(1) EJBホームオブジェクトのリファレンスを検索してEnterprise Beanを呼び出す方法
EJBホームオブジェクトのリファレンスをルックアップしてEnterprise Beanを呼び出す方法を,実装例を基に説明します。
(a) JNDIネーミングコンテキストの生成
EJBホームオブジェクトのリファレンスのルックアップに利用するJNDIネーミングコンテキストを生成します。
javax.naming.Context ctx = new javax.naming.InitialContext();
(b) EJBホームオブジェクトのリファレンスの検索と取得
生成したJNDIネーミングコンテキストを利用して,EJBホームオブジェクトのリファレンスを取得します。EJBホームオブジェクトのリファレンスを取得するには,自動的にバインドされる名称(Portable Global JNDI名またはHITACHI_EJBから始まる名称),またはユーザ指定名前空間機能を利用して付与した名称でルックアップします。次の例では,ユーザ指定名前空間を利用してルックアップして,取得しています。ルックアップの方法については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「2.3 JNDI名前空間へのオブジェクトのバインドとルックアップ」を参照してください。
String ejbName = "MySample"; java.lang.Object obj = ctx.lookup(ejbName); SampleHome sampleHome = (SampleHome)javax.rmi.PortableRemoteObject.narrow(obj, SampleHome.class);
(c) Enterprise Beanの生成とメソッドの呼び出し
EJBホームオブジェクトのcreateメソッドによって,Enterprise Beanのインスタンスを生成します。これによって,アプリケーションに必要となるEnterprise Beanのメソッドを呼び出せるようになります。
Sample remoteSample = sampleHome.create(); //Enterprise Beanインスタンスの生成 String result = remoteSample.getData("data"); //ビジネスメソッドの呼び出し
なお,Entity BeanでCollection型が返されるfindメソッドを利用する場合は,コレクションから取り出したオブジェクトに対して,Enterprise Beanのクラスでナロウする必要があります。
Collection c = home.findByXXX(keyValue); Iterator i=c.iterator(); while (i.hasNext()) { Sample remoteSample=(Sample)javax.rmi.PortableRemoteObject.narrow(i.next(), Sample.class); //RemoteSampleに対してビジネスメソッドを呼び出します。 }
(2) ビジネスインタフェースのリファレンスを検索してEnterprise Beanを呼び出す方法
ビジネスインタフェースのリファレンスをルックアップしてEnterprise Beanを呼び出す方法を,実装例を基に説明します。
(a) InitialContextの生成
ビジネスインタフェースを使用してEnterprise Beanを呼び出すには,最初にInitialContextを生成します。
// InitialContextを生成 InitialContext ctx = new InitialContext();
(b) ビジネスインタフェースのリファレンスの検索と取得
生成したInitialContextを利用して,ビジネスインタフェースのリファレンスを取得します。ビジネスインタフェースのリファレンスを取得するには,自動的にバインドされる名称またはユーザ指定名前空間機能を利用して付与した名称でルックアップします。自動的にバインドされる名称を使用したビジネスインタフェースのルックアップの方法については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「2.5 HITACHI_EJBから始まる名称でのルックアップ」を参照してください。
// ビジネスインタフェースのリファレンスを取得 Sample sample = (Sample)ctx.lookup("HITACHI_EJB/SERVERS/MyServer/EJBBI/SampleApp/Sample");
(c) メソッドの呼び出し
ビジネスインタフェースのリファレンスを取得したことで,ビジネスメソッドを呼び出せるようになります。
// ビジネスメソッドの呼び出し String result = sample.getData("data");