7.5.5. スコープ EJB クライアントコンテキストを使用した EJB の設定
概要
EJB は、マップベースのスコープ指定されたコンテキストを使用して設定できます。これは、プログラムで、jboss-ejb-client.properties にある標準的なプロパティーを使用して Properties マップに値を入力し、org.jboss.ejb.client.scoped.context プロパティーに true を指定して、InitialContext のプロパティーを渡すことにより実現されます。
スコープ指定されたコンテキストを使用する利点は、EJB を直接参照したり、JBoss クラスをインポートしたりせずにアクセスを設定できることです。また、マルチスレッド環境で実行時にホストを設定および負荷分散することが可能になります。
手順7.9 マップベースのスコープ指定されたコンテキストを使用した EJB の設定
プロパティーの設定
EJB クライアントプロパティーをプログラムで設定し、標準的なjboss-ejb-client.propertiesファイルで使用されたのと同じプロパティーセットを指定します。スコープ指定されたコンテキストを有効にするには、org.jboss.ejb.client.scoped.contextプロパティーを指定し、その値をtrueに設定する必要があります。以下は、プロパティーをプログラムで設定する例です。// Configure EJB Client properties for the InitialContext Properties ejbClientContextProps = new Properties(); ejbClientContextProps.put(“remote.connections”,”name1”); ejbClientContextProps.put(“remote.connection.name1.host”,”localhost”); ejbClientContextProps.put(“remote.connection.name1.port”,”4447”); // Property to enable scoped EJB client context which will be tied to the JNDI context ejbClientContextProps.put("org.jboss.ejb.client.scoped.context", “true”);コンテキスト作成でプロパティーを渡す
// Create the context using the configured properties InitialContext ic = new InitialContext(ejbClientContextProps); MySLSB bean = ic.lookup("ejb:myapp/ejb//MySLSBBean!" + MySLSB.class.getName());
その他の情報
- ルックアップ EJB プロキシーにより生成されたコンテキストは、このスコープコンテキストによりバインドされ、重要な接続パラメーターのみを使用します。これにより、さまざまなコンテキストを作成してクライアントアプリケーション内のデータにアクセスしたり、さまざまなログインを使用してサーバーに独立してアクセスしたりできます。
- クライアントでは、スコープ指定された
InitialContextとスコープ指定されたプロキシーの両方がスレッドに渡され、各スレッドが該当するコンテキストで動作することが可能になります。また、プロキシーを同時に使用できる複数のスレッドにプロキシーを渡すことができます。 - スコープ指定されたコンテキスト EJB プロキシーは、リモートコールでシリアライズされ、サーバーでデシリアライズされます。デシリアライズされるとき、スコープ指定されたコンテキストの情報が削除され、デフォルト状態に戻ります。デシリアライズされたプロキシーがリモートサーバーで使用される場合は、作成時に使用されたスコープコンテキストを持たなくなるため、
EJBCLIENT000025エラーが発生したり、EJB 名を使用して間違った対象を呼び出したりすることがあります。