ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド
FUJITSU Software

27.2.5 セションBeanとクライアントとの連携

以下の事項についてはJ2EEに準拠したセションBeanと同じです。

注意

ローカルビジネスインタフェースを利用する場合は、以下の情報が参照渡しで転送されます。この場合の注意事項は27.2.6 値渡しと参照渡しの違いを参照してください。

  • クライアントからセションBeanへ送信するデータBeanやHashMap

  • セションBeanからクライアントへ返却されるデータBeanやHashMap

  • セション情報(セション同期機能を使用した場合)

ここでは、Java EEに固有の事項について説明します。

27.2.5.1 Apcoordinator以外のEJBクライアントとの連携

Apcoordinator以外のアプリケーションからApcoordinatorで作成したセションBeanを呼び出す場合のプログラミングを説明します。

Apcoordinatorアプリケーションから呼び出す方法は27.3 EJBの呼び出しを参照してください。

27.2.5.1.1 セションBeanクラス

セションBeanクラスは次のように作成して、アプリケーション例外にApcoordinatorの例外クラスが含まれないようにします。

以下はセションBeanクラスの記述例です。

package ejboffice.ejb;

import javax.ejb.Stateful;
import com.fujitsu.uji.ejb.bean.UjiSimpleStatefulBean;

@Stateful
public class OfficeBean extends UjiSimpleStatefulBean implements Office {
    ...
    public Object[] simpleExec(Object dataBean, String verb, Object syncData) throws Exception {
        try {
            return super.simpleExec(dataBean, verb, syncData);
        } catch (RuntimeException e) {
             // システム例外の場合はそのままthrowします。
             throw e;
        } catch (Exception e) {
             // アプリケーション例外の場合はApcoordinatorの例外クラスが含まれないように
             // 新たに作成します。
             throw new Exception(e.getMessage());
        }
    }
}

注意

  • ビジネスクラスがアプリケーション例外を発生させた場合、クライアントにはsimpleExecメソッドで作成した例外(上記の例ではExceptionクラス)が通知されます。ビジネスクラスで発生した例外ではありません。

  • Apcoordinator以外のアプリケーションからセションBeanを呼び出した場合、ログにはコンテキストIDが出力されません。コンテキストIDについては5.4 コンテキストIDの出力を参照してください。

27.2.5.1.2 EJBクライアント

EJBクライアントのプログラムではセションBeanを以下の手順で呼び出します。

  1. JNDIを使ってビジネスインタフェースを取得します。

  2. ビジネスインタフェースのsimpleExecメソッドを呼び出します。引数には以下のオブジェクトを指定します。

    • 第1引数: データBeanまたはHashMapを指定します。このオブジェクトが、セションBeanのビジネスクラスの第2引数に与えられます。

    • 第2引数: コマンドを指定します。

    • 第3引数: セションクラスに転送するオブジェクトを指定します。セションBeanがセション同期機能を使用している場合に指定してください。指定されたデータは、セションBeanにおいてsetSynchronizedDataメソッドによりセションクラスにセットされます。セション同期機能が使用されていない場合はnullを指定します。

    Apcoordinator以外のアプリケーションから呼び出す場合は、データBean変換機能は使用できません。入力データをHashMapで受け取るセションBeanに対しては、simpleExecメソッドの第1引数にHashMapを指定してください。

  3. simpleExecメソッドの返却値はObject[]です。配列には以下のオブジェクトが格納されています。

    • 要素[0]: ビジネスクラスの返却値です。

    • 要素[1]: セションクラスから自動転送されたオブジェクトです。このオブジェクトは、セションBeanがセション同期機能を使用している場合に、セションクラスのgetSynchronizedDataメソッドにより取得されたものです。セション同期機能が使用されていない場合は、simpleExecメソッドの第3引数に与えたデータがそのまま返却されます。

  4. ステートフルセションBeanの場合は、ビジネスインタフェースのremoveメソッドを呼び出してセションBeanオブジェクトを削除します。

以下はセションBeanを呼び出す例です。この例では、ビジネスインタフェースはOfficeです。

import javax.naming.InitialContext;

        ...

        HashMap syncData = new HashMap(); // セションBeanのセションクラスとの間で転送されるオブジェクト
        syncData.put("userId","abc1234");

        ...

        // ビジネスインタフェース取得
        InitialContext ctx = new InitialContext();
        Office bi = (Office)ctx.lookup("java:comp/env/ejb/OfficeBean");

        // セションBean呼び出し
        MessageBean bean = new MessageBean();
        bean.setMessage("Hello!");
        Object[] replyArray = bi.simpleExec(bean, "sayHello", syncData);

        // 返却値の取得
        MessageBean reply=(MessageBean)replyArray[0];
        syncData=(HashMap)replyArray[1];
27.2.5.1.3 EJBクライアントのクラスパスの設定

EJBクライアントには、実行時ライブラリとしてujiejbcl.jarが必要です。このファイルをEJBクライアントの実行環境にコピーし、クラスパスに追加してください。ujiejbcl.jarのインストール先は13.1 アプリケーションに必要なApcoordinatorのファイルを参照してください。

ujiejbcl.jarは以下のクラスとインタフェースを提供します。

ujiejbcl.jarは再配布可能なファイルです。クライアント環境に配布して使用できます。

27.2.5.2 J2EEに準拠したEJBクライアントとの連携

J2EEに準拠したアプリケーションからEJB 3.0に準拠したセションBean(Apcoordinatorで作成したもの)を呼ぶことができます。この場合、セションBeanにホームインタフェースとリモートインタフェースを追加する必要があります。作成方法はJ2EEに準拠したセションBeanと場合と同じです。詳細はホームタフェースリモトインタフェースを参照してください。ホームインタフェースのインタフェース名を指定するには、セションBeanクラスに@RemoteHomeアノテーションを付けてホームインタフェース名を記述します。

また、セションBeanは以下の条件を満たす必要があります。

セションBeanの呼び出し方法は、J2EEに準拠したセションBeanと同じです。

注意

EJB 3.0に準拠したセションBeanは、Apcoordinatorによるローカ呼び出しを使って呼び出すことはできません。