Interstage Application Server J2EE ユーザーズガイド
目次 索引 前ページ次ページ

第3部 EJB編> 第14章 EJBアプリケーションの呼出し方法> 14.8 Java以外の言語からの呼出し方法> 14.8.1 EJBゲートウェイ・アプリケーションの機能

14.8.1.2 EJB-CORBA変換機能

 EJB-CORBA変換機能は、EJB例外からCORBA例外への変換(例外変換)や、CORBAデータ型とJavaデータ型の相互変換(オブジェクト変換)の機能を実現する機能です。

■ 例外変換

 EJBで送出した例外は、CORBAクライアントアプリケーションではCORBAにおけるUNKNOWN例外として通知されます。このため、CORBAクライアントアプリケーションに例外情報を通知するには、EJBゲートウェイ・アプリケーションでEJBが送出した例外を、CORBAの例外に変換して送出してください。

◆ EJBビジネスメソッドでの送出例外宣言

 ビジネスメソッド定義の例を以下に示します。メソッド定義のthrows句で記述された例外を送出します。

---------------------------------------------------------------------------------------------
    public interface SampleBMPSessionRemote extends javax.ejb.EJBObject {
        public int MultipleAddRecords() throws java.rmi.RemoteException;
    }
---------------------------------------------------------------------------------------------

◆ IDLビジネスメソッドでの送出例外宣言

 ビジネスメソッド定義の例を以下に示します。メソッド定義のraises句で記述された例外を送出します。

---------------------------------------------------------------------------------------------
    interface SampleBMPSession {
        long MultipleAddRecords() raises (ejbException);
    };
---------------------------------------------------------------------------------------------

◆ IDL例外オブジェクト定義

 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オブジェクトに変換して受け渡してください。以下に復帰値の変換の例を示します。

◆ EJBビジネスメソッド定義

 メソッドの復帰値の型がVectorであるメソッド定義の例を以下に示します。

---------------------------------------------------------------------------------------------
    public interface SampleBMPSessionRemote extends javax.ejb.EJBObject
    {
            public Vector MultipleFindRecords() throws java.rmi.RemoteException;
    }
---------------------------------------------------------------------------------------------

◆ IDLビジネスメソッド定義

 Vectorに対して、IDLで定義するresultSet型として定義した例を以下に示します。

---------------------------------------------------------------------------------------------
    interface SampleBMPSession 
    {
            resultSet MultipleFindRecords() raises (ejbException);
    };
---------------------------------------------------------------------------------------------

◆ IDLオブジェクト定義

 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言語)”を参照してください(注:PlusまたはWeb-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;
    }
---------------------------------------------------------------------------------------------

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005