8.5.4. スコープ付き EJB クライアントコンテキストの使用
概要
EJB を呼び出すには JBoss EAP 6 の以前のバージョンでは、通常、JNDI コンテキストを作成し、ターゲットサーバーを指す PROVIDER_URL を渡します。その JNDI コンテキストを使用してルックアップされた EJB プロキシーで行われた呼び出しはすべて、そのサーバーで終了します。スコープ付き EJB クライアントコンテキストを使用すると、ユーザーアプリケーションは、特定の呼び出しに使用される EJB レシーバーを制御できます。
リモートスタンドアロンクライアントでスコープ付き EJB クライアントコンテキストを使用する
スコープ付き EJB クライアントコンテキストが導入される前は、コンテキストは通常、クライアントアプリケーションにスコープされていました。スコープ付きクライアントコンテキストにより、EJB クライアントコンテキストを JNDI コンテキストでスコープできるようになりました。以下は、スコープ付き EJB クライアントコンテキストを使用して同じ 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 Properties ejbClientContextPropsOne = getPropsForEJBClientContextOne(): final javax.naming.Context ctxOne = new javax.naming.InitialContext(ejbClientContextPropsOne); final MyBeanInterface beanOne = ctxOne.lookup("ejb:app/module/distinct/bean!interface"); beanOne.doSomething(); ... ctxOne.close(); // Use the "bar" security credential to connect to the server and invoke this bean instance final Properties ejbClientContextPropsTwo = getPropsForEJBClientContextTwo(): final javax.naming.Context ctxTwo = new javax.naming.InitialContext(ejbClientContextPropsTwo); final MyBeanInterface beanTwo = ctxTwo.lookup("ejb:app/module/distinct/bean!interface"); beanTwo.doSomething(); ... ctxTwo.close(); } }
jboss-ejb-client.properties
ファイルで使用されているものと同じプロパティーのセットです。EJB クライアントコンテキストを JNDI コンテキストにスコープするには、org.jboss.ejb.client.scoped.context
プロパティーを指定し、その値を true
に設定する必要もあります。このプロパティーは、EJB クライアント API に、EJB レシーバーによってサポートされる EJB クライアントコンテキストを作成する必要があること、および作成されたコンテキストが、それを作成した JNDI コンテキストに対してのみスコープまたは表示されることを通知します。この JNDI コンテキストを使用してルックアップまたは呼び出された EJB プロキシーは、この JNDI コンテキストに関連付けられた EJB クライアントコンテキストのみを認識します。アプリケーションが EJB をルックアップして呼び出すために使用する他の JNDI コンテキストは、他のスコープ付き EJB クライアントコンテキストを認識しません。
org.jboss.ejb.client.scoped.context
プロパティーを渡さず、EJB クライアントコンテキストにスコープされていない JNDI コンテキストは、デフォルトの動作を使用します。これは、通常、アプリケーション全体。
InitialContext
不要になったとき。いつInitialContext
が閉じられると、リソースはすぐに解放されます。それにバインドされているプロキシーは無効になり、呼び出しは例外を出力します。を閉じられなかったInitialContext
リソースとパフォーマンスの問題が発生する可能性があります。