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

8.5 EJB複数指定機能

EJB複数指定機能は、数台のEJBサーバを使用した運用環境を対象として、各サーバで同一のEJBセションBeanを起動しそれらを1つのグループとして登録しておくことにより、以下の機能を実現します。

EJB複数指定機能で呼び出せるのはApcoordinatorで作成したセションBeanです。

EJBの呼び出しにはリモート共通インタフェースを使用します。EJB複数指定機能を使用しないでセションBeanを呼び出す場合と呼び出し方法が共通です。

EJBの作成

Apcoordinatorのフレームワークを使用してセションBeanを作成します。作成方法は“第4部 EJBアプリケーションの開発”を参照してください。

EJB複数指定機能を使用して呼び出されるセションBeanは、作成時に以下の点に注意してください。

EJBの呼び出し方法

EJB複数指定機能を使用してEJBを呼び出すには、リモート共通インタフェースを使用し、EJBを呼び出すアプリケーションを以下のように作成します。

  1. リモートマップを作成して、セションBeanのグループを定義し名前を付けます。 以下はリモートマップの記述例です。MySessionBean1, MySessionBean2, MySessionBean3 の3つのセションBeanからなるグループをMySessionBeansという名前で定義しています。

    <?xml version="1.0" encoding="Shift_JIS"?>
    <remoteMap
        xmlns=http://interstage.fujitsu.com/schemas/uji/remoteMap
        xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
        xsi:schemaLocation="http://interstage.fujitsu.com/schemas/uji/remoteMap
                            http://interstage.fujitsu.com/schemas/uji/remotemap.xsd">
      <config>
        <version>5.0</version>
      </config>
    
      <!-- EJB複数指定機能を使用して呼び出すセションBeanのグループを定義します。-->
      <ejbExt name="MySessionBeans" type="proxy" recovertime="10" >
        <application name="java:comp/env/ejb/MySessionBean1" />
        <application name="java:comp/env/ejb/MySessionBean2" />
        <application name="java:comp/env/ejb/MySessionBean3" />
      </ejbExt>
    </remoteMap>

    グループはejbExtタグで定義します。ejbExtタグのnameアトリビュートにグループの名前を記述します。ejbExtタグのコンテントには、グループのメンバであるセションBeanをapplicationタグで記述します。applicationタグのnameアトリビュートにはJNDIで検索するセションBeanの名前を指定します。

  2. com.fujitsu.uji.ext.CallFactoryとcom.fujitsu.uji.ext.Callの2つのインタフェースを使用してセションBeanを呼び出します。まず、CallFactoryインタフェースのcreateCallメソッドを実行してCallインタフェースを取得します。createCallの引数にはグループの名前を指定します。続いて、データBeanとコマンド名を引数としてCallインタフェースのinvokeメソッドを呼び出すことにより、リモートマップで定義したグループからセションBeanが選択され、呼び出されます。以下はビジネスクラスからセションBeanを呼び出す例です。

    public Object doSomething(DispatchContext context, DataBean dataBean){
      CallFactory factory = context.getCallFactory();
      // グループを指定してCallオブジェクトを取得します。
      Call call = factory.createCall("MySessionBeans");
      // 送信するデータとコマンド名を指定してセションBeanを呼び出します。
      ResponseBean response = (ResponseBean)call.invoke(dataBean,"update"); 
      ...
    }

ポイント

リモート共通インタフェースは、呼び出されるアプリケーションの種別に依存せずに、リモートマップでアプリケーションに名前を定義し、CallFactoryインタフェースでその名前を指定して呼び出すという統一された方法でアプリケーションを呼び出します。 EJB複数指定機能を使用する場合は、アプリケーションの名前の代わりにセションBeanのグループの名前を使用します。リモートマップのejbExtタグで定義する名前やCallFactoryインタフェースのcreateCallメソッドの引数に与える名前は、アプリケーションの名前ではなくグループの名前になります。

EJBの選択方式

Callインタフェースのinvokeメソッドを実行すると、リモートマップで定義したグループからセションBeanが1個選択されて呼び出されます。セションBeanを選択する方式には以下の2通りがあり、リモートマップに記述したejbExtタグのtypeアトリビュートで指定します。

同一のCallオブジェクトを使用している間は、invokeメソッドを繰り返し呼び出しても同一のセションBeanが使用されます。ただし、後述するcreateOnInvokeアトリビュートにtrueが指定されている場合で、EJBコンテナのダウンが検出された場合は、別のセションBeanを代わりに使用します。

EJBコンテナがダウンしているかどうかの判定はセションBeanオブジェクトの作成時 (ホームインタフェースのcreateメソッド呼び出し時) に行われます。セションBeanオブジェクト作成時に以下の現象が発生するとEJBコンテナがダウンしていると判断します。

EJBコンテナがダウンしたと判定された場合、そのセションBeanはその後一定期間は使用されません。この使用されない期間はejbExtタグのrecovertimeアトリビュートに指定します。単位は分です。デフォルトは10分です。

セションBeanオブジェクトを新規に作成するタイミングは以下の2通りから選択でき、ejbExtタグのcreateOnInvokeアトリビュートで指定します。

実行環境設定時の留意事項

EJB複数指定機能を使用する場合、実行環境の設定に関して以下の留意事項があります。