以下について説明します。
CORBAサーバ機能
CORBAサーバ機能は、IDL言語を用いて定義する分散オブジェクトのインタフェース機能です。
IDL定義では、クライアントに公開するビジネスメソッドを定義します。EJBアプリケーションのビジネスメソッドの引数や復帰値がJavaオブジェクトの場合には、CORBAクライアントと受渡しができるデータ型も定義します。
また、必要であれば例外も定義します。EJBの生成と削除をクライアントアプリケーションで制御する場合には、EJBの生成/削除メソッドを定義してください。
EJB-CORBA変換機能
EJB-CORBA変換機能は、EJB例外からCORBA例外への変換(例外変換)や、CORBAデータ型とJavaデータ型の相互変換(オブジェクト変換)の機能を実現する機能です。
例外変換
EJBで送出した例外は、CORBAクライアントアプリケーションではCORBAにおけるUNKNOWN例外として通知されます。このため、CORBAクライアントアプリケーションに例外情報を通知するには、EJBゲートウェイ・アプリケーションでEJBが送出した例外を、CORBAの例外に変換して送出してください。
ビジネスメソッド定義の例を以下に示します。メソッド定義のthrows句で記述された例外を送出します。
public interface SampleBMPSessionRemote extends javax.ejb.EJBObject { public int MultipleAddRecords() throws java.rmi.RemoteException; }
ビジネスメソッド定義の例を以下に示します。メソッド定義のraises句で記述された例外を送出します。
interface SampleBMPSession { long MultipleAddRecords() raises (ejbException); };
IDLでの例外オブジェクト定義の例を以下に示します。exceptionで例外オブジェクトを定義します。
exception ejbException { string reason; };
例外の変換処理の例を以下に示します。EJBから送出された例外を受け取り、IDLで定義した例外ejbExceptionを送出します。
public int MultipleAddRecords() throws EJBGateway.ejbException { int retval = 0; try { retval = r.MultipleAddRecords(); } catch (Throwable e) { throw new ejbException(e.getMessage()); } return retval; }
上記の例では、Javaのすべてのエラーと例外のスーパークラスであるThrowable型を用いています。アプリケーションの要件に応じて適切な例外型によるハンドラを記述してください。
オブジェクト変換
EJBのメソッドの復帰値は、Javaにおけるオブジェクトです。CORBAクライアントアプリケーションでは、このJavaオブジェクトを受け取ることができません。このため、CORBAクライアントアプリケーションに復帰値を返すためには、EJBゲートウェイ・アプリケーションでJavaオブジェクトを受け取り、CORBAのオブジェクトに変換して返却してください。
EJBのメソッドの引数にJavaオブジェクトが指定されていた場合には、EJBゲートウェイ・アプリケーションでCORBAオブジェクトを受け取り、Javaオブジェクトに変換して受け渡してください。以下に復帰値の変換の例を示します。
メソッドの復帰値の型がVectorであるメソッド定義の例を以下に示します。
public interface SampleBMPSessionRemote extends javax.ejb.EJBObject { public Vector MultipleFindRecords() throws java.rmi.RemoteException; }
Vectorに対して、IDLで定義するresultSet型として定義した例を以下に示します。
interface SampleBMPSession { resultSet MultipleFindRecords() raises (ejbException); };
IDLでのresultSet定義の例を以下に示します。ただし、EJBで返却されるVectorオブジェクトは、文字列の配列を要素とします。IDLでは2つの文字列をメンバとして持つ構造体とその構造体のシーケンスとして定義します。
struct result { string id; string name; }; typedef sequence<result> resultSet;
オブジェクトの変換処理の例を以下に示します。EJBから送出されたVectorオブジェクトを受け取り、IDLで定義したresultの配列を返却します。
IDLのJavaへのマッピングの詳細については、“Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)”の“アプリケーションの開発(Java言語)”を参照してください(注:Interstage Application Server Standard-J Editionでは提供していません)。
public result[] Vector2ResultSet(int lines, Vector vecSearchResult) { result[] retval = null; retval = new result[lines]; for ( int i = 0; i < lines; i++ ) { String[] vecData = (String[])vecSearchResult.elementAt(i); retval[i] = new result(vecData[0], vecData[1]); } return retval; }
EJBクライアント機能
EJBのクライアントアプリケーション機能です。
クライアントアプリケーション機能は、HomeインタフェースとRemoteインタフェースに対するEJBクライアントの形で記述します。
クライアントアプリケーションの開発方法の詳細については、“第11章 EJBアプリケーションの開発”を参照してください。