Apcoordinator ユーザーズガイド
目次 前ページ次ページ

第4部 EJBアプリケーションの開発> 第24章 セションBeanの開発> 24.3 セションBeanとクライアントとの連携

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

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

セションBeanクラスは次のように作成して、execメソッドが発生するInvocationTargetExceptionにApcoordinatorの例外クラスが含まれないようにします。

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

import com.fujitsu.uji.ejb.bean.UjiSessionBean;
import java.lang.reflect.InvocationTargetException;

public class OfficeEJB extends UjiSessionBean {
        public Object[] exec(Object dataBean, String verb, Object syncData) throws InvocationTargetException {
                try {
                        return super.exec(dataBean,verb,syncData);
                } catch (InvocationTargetException e) {
                        Throwable rootCause=e.getTargetException();
                        Exception replaced=new Exception(rootCause.getMessage());
                        throw new InvocationTargetException(replaced);
                }
        }
}
このように作成したセションBeanをApcoordinatorアプリケーションから呼び出す場合、 セションBean内で例外が発生した際にクライアントに通知されるのはexecメソッドで作成した例外(上記の例ではExceptionクラス)になります。セションBeanのビジネスクラスで発生した例外ではありません。

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

  1. JNDIを使ってホームインタフェースを取得します。
  2. ホームインタフェースのcreateメソッドを呼び出し、リモートインタフェースを取得します。createメソッドの引数はありません。
  3. リモートインタフェースのexecメソッドを呼び出します。引数には以下の3個のオブジェクトを渡します。 Apcoordinator以外のアプリケーションから呼び出す場合は、データBean変換機能は使用できません。入力データをHashMapで受け取るセションBeanに対しては、execメソッドの第1引数にHashMapを指定してください。
  4. execメソッドの返却値をの型はObject[]です。配列の各要素には以下のオブジェクトが格納されています。
セションBeanの実行中にアプリケーション例外が発生した場合は、execメソッドがjava.lang.reflect.InvocationTargetExceptionを発生します。

以下はセションBeanを呼び出す例です。ホームインタフェースをSimpleBeanHome、リモートインタフェースをSimpleBeanRemoteとしています。


import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

...

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

        syncData.put("userId","abc1234");

...

        // ホームインタフェース取得
        InitialContext ctx=new InitialContext();
        SimpleBeanHome home=(SimpleBeanHome)PortableRemoteObject.narrow(
                ctx.lookup("java:comp/env/ejb/SimpleBean"),SimpleBeanHome.class);
        // リモートインタフェース取得
        SimpleBeanRemote remote=home.create();

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

        // 返却値の取得
        MessageBean reply=(MessageBean)replyArray[0];
        syncData=(HashMap)replyArray[1];
上記の方法でセションBeanを呼び出すEJBクライアントには、実行時ライブラリとしてujiejbcl.jarが必要です。このファイルをEJBクライアントの実行環境にコピーし、クラスパスに追加してください。 ujiejbcl.jarは、Apcoordinatorをインストールすることにより、[Apcoordinatorのインストールフォルダ]\redist\ejb にインストールされます。

ujiejbcl.jarにより、以下を利用するのに必要なクラスが提供されます。

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

All Rights Reserved, Copyright © 富士通株式会社 2000-2005