Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

8.5.3. 単一の EJB コンテキストを使用する場合の考慮事項

概要

スタンドアロンのリモートクライアントで単一の EJB クライアントコンテキストを使用する場合は、アプリケーション要件を考慮する必要があります。さまざまなタイプのリモートクライアントの詳細については、以下を参照してください。「EJB クライアントコンテキスト」

単一の EJB クライアントコンテキストを持つリモートスタンドアロンクライアントの一般的なプロセス

リモートスタンドアロンクライアントには、通常、任意の数の EJB レシーバーによってサポートされる EJB クライアントコンテキストが 1 つだけあります。次に、スタンドアロンのリモートクライアントアプリケーションの例を示します。

public class MyApplication {
    public static void main(String args[]) {
        final javax.naming.Context ctxOne = new javax.naming.InitialContext();
        final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface");
        beanOne.doSomething();
        ...
    }
}

リモートクライアントの JNDI ルックアップは通常、EJB クライアントコンテキストと EJB レシーバーを設定するために使用される jboss-ejb-client.properties ファイルによってサポートされます。この設定にはセキュリティークレデンシャルも含まれ、JBoss EAP 6 サーバーに接続する EJB レシーバーを作成するために使用されます。上記のコードが呼び出されると、EJB クライアント API は EJB クライアントコンテキストを検索します。このコンテキストは、EJB 呼び出し要求を受信して処理する EJB レシーバーを選択するために使用されます。この場合、EJB クライアントコンテキストは 1 つしかないため、上記のコードでコンテキストを使用して Bean を呼び出します。JNDI を使用してリモートでセッション Bean を呼び出す手順については、以下で詳しく説明します。「JNDI を使用してリモートで SessionBean を呼び出す」

異なる資格情報を必要とするリモートスタンドアロンクライアント

ユーザーアプリケーションが Bean を複数回呼び出したい場合がありますが、異なるセキュリティークレデンシャルを使用して JBoss EAP 6 サーバーに接続します。以下は、同じ Bean を 2 回呼び出すスタンドアロンのリモートクライアントアプリケーションの例です。

public class MyApplication {
    public static void main(String args[]) {
        // Use the "foo" security credential connect to the server and invoke this bean instance
        final javax.naming.Context ctxOne = new javax.naming.InitialContext();
        final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface");
        beanOne.doSomething();
        ...
 
        // Use the "bar" security credential to connect to the server and invoke this bean instance
        final javax.naming.Context ctxTwo = new javax.naming.InitialContext();
        final MyBeanInterface beanTwo = ctxTwo.lookup("ejb:app/module/distinct/bean!interface");
        beanTwo.doSomething();
        ...
    }
}

この場合、アプリケーションは同じサーバーインスタンスに接続して、そのサーバーでホストされている EJB を呼び出したいと考えていますが、サーバーへの接続中に 2 つの異なるクレデンシャルを使用したいと考えています。クライアントアプリケーションには単一の EJB クライアントコンテキストがあり、サーバーインスタンスごとに 1 つの EJB レシーバーしか持てないため、上記のコードはサーバーに接続するために 1 つのクレデンシャルのみを使用し、アプリケーションが期待するとおりにコードが実行されないことを意味します。

解決策

スコープ付き EJB クライアントコンテキストは、この問題の解決策を提供します。これらは、EJB クライアントコンテキストとそれに関連する JNDI コンテキスト (通常は EJB 呼び出しに使用される) をより詳細に制御する方法を提供します。スコープ付き EJB クライアントコンテキストの詳細については、以下を参照してください。「スコープ付き EJB クライアントコンテキストの使用」「スコープ付き EJB クライアントコンテキストを使用して EJB を設定する」