Apcoordinatorで作成したセションBeanは本来EJBコンテナ上で動作しますが、クライアントと同じJVM上でEJBコンテナを使用せずに動作させることもできます。EJBコンテナを使用せずに、Apcoordinatorで作成したセションBeanをクライアントから直接呼び出す機能をローカル呼び出しと呼びます。
セションBean開発時にローカル呼び出し機能を使用すると、セションBeanをEJBコンテナに配置せずにデバッグができるため、開発の効率が上がります。
ローカル呼び出しを行うには、クライアントのプログラムを次のように作成します。
セションBeanの呼び出しにはリモート共通インタフェースを使用します。
リモートマップにローカル呼び出しするセションBeanのエイリアスをlocalタグで定義します。 class属性にセションBeanクラスを指定します。以下は記述例です。
<local name="MyLocalSessionBean" class="mypackage.MySessionBean"/>
呼び出すセションBeanでエンタープライズBean環境を使用している場合は、localタグのコンテントにエンタープライズBean環境を定義します。これは、以下の手順で行います。
デプロイメント記述からセションBeanに対して定義されたenv-entryタグとそのコンテントを全てリモートマップのlocalタグのコンテントにコピーします。
個々のenv-entryタグはエンタープライズBean環境のエントリを表し、env-entry-nameタグがそのエントリ名を表しています。エントリ名に対応する値を変更する場合は、env-entry-valueタグのコンテントにその値を記述します。env-entry-valueタグがない場合は、追加してください。
以下に記述例を示します。
<local name="MyLocalSessionBean" class="mypackage.MySessionBean"> <env-entry> <env-entry-name>guestUser</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>guest</env-entry-value> </env-entry> </local>
ローカル呼び出しと通常の呼び出しを簡単に切り替えられるようにするには、リモートマップに以下のように記述してください。localタグのタグ名をejbに、またはその逆に書き換えるだけで、切り替えができます。
<local name="MyLocalSessionBean" application="java:comp/env/ejb/MySessionBean" class="mypackage.MySessionBean"> <env-entry> <env-entry-name>guestUser</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>guest</env-entry-value> </env-entry> </local>
ローカル呼び出し機能を使用した場合、セションBeanに以下の制限があります。
EJBコンテナが提供する機能は使用できません。例えば、SessionContextオブジェクト、トランザクション制御、メソッドのアクセス制限は使用できません。
InitialContextは、クライアントと同じものが使用されます。
また、以下の機能は通常の呼び出しとローカル呼び出しで動作が異なります。
EJBDispatchContextクラスのgetEnvironmentメソッド: このメソッドはエンタープライズBean環境の値を取得します。通常の呼び出しの場合は、JNDIを使って取得します。ローカル呼び出しの場合は、クライアントのリモートマップで定義された値を取得します。