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