Red Hat Training
A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform
第5章 リモート JNDI ルックアップ
5.1. JNDI へのオブジェクトの登録
Java Naming and Directory Interface (JNDI) は、Java ソフトウェアクライアントによる名前を使ったオブジェクトの検出およびルックアップを可能にするディレクトリーサービスの Java API です。
JNDI に登録されているオブジェクトがリモート JNDI クライアント (別の JVM で実行されるクライアントなど) によってルックアップされる必要がある場合、オブジェクトを java:jboss/exported
コンテキスト下に登録する必要があります。
たとえば、messaging-activemq
サブシステムの JMS キューをリモート JNDI クライアントに公開する必要がある場合は、java:jboss/exported/jms/queue/myTestQueue
のように JMS キューを JNDI に登録する必要があります。リモート JNDI クライアントは、名前 jms/queue/myTestQueue
で JMS キューをルックアップできます。
例: standalone-full(-ha).xml
のキューの設定
<subsystem xmlns="urn:jboss:domain:messaging-activemq:2.0"> <server name="default"> ... <jms-queue name="myTestQueue" entries="java:jboss/exported/jms/queue/myTestQueue"/> ... </server> </subsystem>
5.2. リモート JNDI の設定
リモート JNDI クライアントは接続し、JNDI からの名前でオブジェクトをルックアップできます。jboss-client.jar
がクラスパスに指定されている必要があります。jboss-client.jar
は EAP_HOME/bin/client/jboss-client.jar
で利用できます。
以下の例は、リモート JNDI クライアントの JNDI から myTestQueue
キューをルックアップする方法を示しています。
例: MDB リソースアダプターの設定
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
properties.put(Context.PROVIDER_URL, "remote+http://HOST_NAME:8080");
context = new InitialContext(properties);
Queue myTestQueue = (Queue) context.lookup("jms/queue/myTestQueue");
5.3. HTTP 上の JNDI 呼び出し
HTTP 上の JNDI 呼び出しは、テクノロジープレビューとしてのみ提供されます。テクノロジープレビューの機能は、Red Hat の本番環境のサービスレベルアグリーメント (SLA) ではサポートされず、機能的に完全ではないことがあるため、Red Hat は本番環境での使用は推奨しません。テクノロジープレビューの機能は、最新の技術をいち早く提供して、開発段階で機能のテストやフィードバックの収集を可能にするために提供されます。
テクノロジープレビュー機能のサポート範囲については、Red Hat カスタマーポータルの「テクノロジプレビュー機能のサポート範囲」を参照してください。
HTTP 上の JNDI 呼び出しには、クライアント側実装とサーバー側実装の 2 つの異なる部分が含まれます。
5.3.1. クライアント側実装
クライアント側実装はリモートネーミング実装と似ていますが、Undertow HTTP クライアントを使用して HTTP を基にしています。
接続管理は直接的ではなく暗黙的で、既存のリモートネーミング実装で使用される方法と似ているキャッシングを使用します。接続プールは、接続パラメーターを基にキャッシュされます。接続プールが指定された期間使用されないと、破棄されます。
HTTP トランスポートを使用するようにリモート JNDI クライアントアプリケーションを設定するには、以下の依存関係を HTTP トランスポート実装に追加する必要があります。
<dependency> <groupId>org.wildfly.wildfly-http-client</groupId> <artifactId>wildfly-http-naming-client</artifactId> </dependency>
HTTP 呼び出しを実行するには、http
URL スキームを使用し、HTTP インボーカーのコンテキスト名である wildfly-services
を含める必要があります。たとえば、remote+http://localhost:8080
をターゲット URL として使用している場合、HTTP トランスポートを使用するにはこれを http://localhost:8080/wildfly-services
に更新する必要があります。
5.3.2. サーバー側実装
サーバー側実装は既存のリモートネーミング実装と似ていますが、HTTP トランスポートを使用します。
サーバーを設定するには、undertow
サブシステムで使用したい各仮想ホストの http-invoker
を有効にする必要があります。これは、標準の設定ではデフォルトで有効になっています。無効になっている場合は、以下の管理 CLI コマンドを使用して再度有効にします。
/subsystem=undertow/server=default-server/host=default-host/setting=http-invoker:add(http-authentication-factory=myfactory, path='/wildfly-services')
http-invoker
属性は 2 つのパラメーターを取ります。その 1 つは path
で、デフォルトは /wildfly-services
になります。もう 1 つのパラメーターは http-authentication-factory
で、Elytron の http-authentication-factory
への参照である必要があります。
http-authentication-factory
の使用を希望するすべてのデプロイメントは、Elytronセキュリティーと、指定の HTTP 認証ファクトリーに対応する同じセキュリティードメインを使用する必要があります。