第22章 Naming サブシステムの設定
22.1. Naming サブシステム リンクのコピーリンクがクリップボードにコピーされました!
naming サブシステムは JBoss EAP のJNDI 実装を提供します。このサブシステムを設定して、グローバル JNDI 名前空間のエントリーをバインドすることができます。さらに、このサブシステムを設定してリモート JNDI をアクティブまたは非アクティブにすることもできます。
以下は、すべての要素と属性が指定された naming サブシステムの XML 設定例になります。
22.2. グローバルバインディングの設定 リンクのコピーリンクがクリップボードにコピーされました!
naming サブシステムは、エントリーを java:global、java:jboss、または java グローバル JNDI 名前空間へバインドできるようにしますが、標準のポータブルな java:global 名前空間を使用することが推奨されます。
グローバルバインディングは naming サブシステムの <bindings> 要素で設定されます。以下の 4 種類のバインディングがサポートされます。
シンプルバインディングの設定
simple XML 設定要素は、プリミティブまたは java.net.URL エントリーにバインドします。
-
name属性は必須で、エントリーのターゲット JNDI 名を指定します。 -
value属性は必須で、エントリーの値を定義します。 -
任意の
type属性はエントリーの値の型を指定し、デフォルトはjava.lang.Stringになります。java.lang.Stringの他に、intまたはjava.lang.Integer、およびjava.net.URLなどのプリミティブ型や対応するオブジェクトラッパークラスを指定できます。
以下に、シンプルバインディングを作成する管理 CLI コマンドの例を示します。
/subsystem=naming/binding=java\:global\/simple-integer-binding:add(binding-type=simple, type=int, value=100)
/subsystem=naming/binding=java\:global\/simple-integer-binding:add(binding-type=simple, type=int, value=100)
結果の XML 設定
以下のコマンドを使用してバインディングを削除します。
/subsystem=naming/binding=java\:global\/simple-integer-binding:remove
/subsystem=naming/binding=java\:global\/simple-integer-binding:remove
バインディングオブジェクトファクトリー
object-factory XML 設定要素は javax.naming.spi.ObjectFactory エントリーをバインドします。
-
name属性は必須で、エントリーのターゲット JNDI 名を指定します。 -
class属性は必須で、オブジェクトファクトリーの Java タイプを定義します。 -
module属性は必須で、オブジェクトファクトリーの Java クラスをロードできる JBoss Module ID を指定します。 -
任意の
environment子要素は、カスタム環境をオブジェクトファクトリーに提供するために使用できます。
以下に、オブジェクトファクトリーバインディングを作成する管理 CLI コマンドの例を示します。
/subsystem=naming/binding=java\:global\/foo\/bar\/factory:add(binding-type=object-factory, module=org.foo.bar, class=org.foo.bar.ObjectFactory, environment=[p1=v1, p2=v2])
/subsystem=naming/binding=java\:global\/foo\/bar\/factory:add(binding-type=object-factory, module=org.foo.bar, class=org.foo.bar.ObjectFactory, environment=[p1=v1, p2=v2])
結果の XML 設定
以下のコマンドを使用してバインディングを削除します。
/subsystem=naming/binding=java\:global\/foo\/bar\/factory:remove
/subsystem=naming/binding=java\:global\/foo\/bar\/factory:remove
外部コンテンツのバインド
LDAP コンテキストなどの外部 JNDI コンテキストのフェデレーションは、external-context XML 設定要素を使用して実行されます。
-
name属性は必須で、エントリーのターゲット JNDI 名を指定します。 -
class属性は必須で、フェデレートされたコンテキストの作成に使用される Java 初期ネーミングコンテキストタイプを示します。このようなタイプには、単一の環境マップ引数を持つコンストラクターが必要なことに注意してください。 -
任意の
module属性は、外部 JNDI コンテキストが必要とするすべてのクラスをロードできる JBoss Module ID を指定します。 -
オプションの
cache属性は外部コンテキストインスタンスをキャッシュする必要があるかどうかを示し、デフォルトはfalseになります。 -
任意の
environment子要素は、外部コンテキストを検索するために必要なカスタム環境を提供するために使用されます。
以下に、外部コンテキストバインディングを作成する管理 CLI コマンドの例を示します。
/subsystem=naming/binding=java\:global\/federation\/ldap\/example:add(binding-type=external-context, cache=true, class=javax.naming.directory.InitialDirContext, module=org.jboss.as.naming, environment=[java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url="ldap://ldap.example.com:389", java.naming.security.authentication=simple, java.naming.security.principal="uid=admin,ou=system", java.naming.security.credentials=secret])
/subsystem=naming/binding=java\:global\/federation\/ldap\/example:add(binding-type=external-context, cache=true, class=javax.naming.directory.InitialDirContext, module=org.jboss.as.naming, environment=[java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory, java.naming.provider.url="ldap://ldap.example.com:389", java.naming.security.authentication=simple, java.naming.security.principal="uid=admin,ou=system", java.naming.security.credentials=secret])
結果の XML 設定
以下のコマンドを使用してバインディングを削除します。
/subsystem=naming/binding=java\:global\/federation\/ldap\/example:remove
/subsystem=naming/binding=java\:global\/federation\/ldap\/example:remove
JNDI プロバイダーのリソースルックアップが lookup(Name) メソッドを適切に実装しないと、「javax.naming.InvalidNameException: Only support CompoundName names」エラーが発生することがあります。
以下のプロパティーを追加せずに、外部コンテキスト環境が lookup(String) メソッドを使用するよう指定すると、この問題を回避できる可能性がありますが、パフォーマンスが劣化します。
<property name="org.jboss.as.naming.lookup.by.string" value="true"/>
<property name="org.jboss.as.naming.lookup.by.string" value="true"/>
ルックアップエイリアスのバインド
lookup 要素を使用すると、既存のエントリーを追加の名前またはエイリアスにバインドできます。
-
name属性は必須で、エントリーのターゲット JNDI 名を指定します。 -
lookup属性は必須で、ソース JNDI 名を示します。
以下に、既存のエントリーをエイリアスにバインドする管理 CLI コマンドの例を示します。
/subsystem=naming/binding=java\:global\/new-alias-name:add(binding-type=lookup, lookup=java\:global\/original-name)
/subsystem=naming/binding=java\:global\/new-alias-name:add(binding-type=lookup, lookup=java\:global\/original-name)
結果の XML 設定
<lookup name="java:global/new-alias-name" lookup="java:global/original-name" />
<lookup name="java:global/new-alias-name" lookup="java:global/original-name" />
以下のコマンドを使用してバインディングを削除します。
/subsystem=naming/binding=java\:global\/c:remove
/subsystem=naming/binding=java\:global\/c:remove
22.3. JNDI バンディングの動的な変更 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAO 7.1 には、サーバーのリロードや再起動を強制せずに JNDI バインディングを動的に変更する機能が追加されました。この機能は、バージョンの更新、テストの要件、またはアプリケーション機能の更新によってネットワークサービスのエンドポイントが動的に設定される場合に便利です。
JNDI バインディングを更新するには、rebind 操作を使用します。rebind 操作は add 操作と同じ引数を取ります。このコマンドは、external-context バンディングタイプ以下のすべてのバインディングタイプで動作します。外部コンテキストバインディングは、モジュラーサービスコンテナー (MSC) の状態に影響する追加の依存関係を必要とするため、サービスを再起動せずに外部コンテキストバインディングを再起動することはできません。
以下のコマンドは、「シンプルバインディングの設定」の例で定義した JNDI バインディングを動的に変更します。
/subsystem=naming/binding=java\:global\/simple-integer-binding:rebind(binding-type=simple, type=int, value=200)
/subsystem=naming/binding=java\:global\/simple-integer-binding:rebind(binding-type=simple, type=int, value=200)
naming サブシステムでグローバルバインディングを設定する方法に関する詳細は、「グローバルバインディングの設定」を参照してください。
22.4. リモート JNDI インターフェースの設定 リンクのコピーリンクがクリップボードにコピーされました!
リモート JNDI インターフェースは、クライアントがリモート JBoss EAP インスタンスでエントリーをルックアップできるようにします。naming サブシステムを設定すると、このインターフェースをアクティブまたは非アクティブにすることができます (デフォルトではアクティブになります)。リモート JNDI インターフェースは <remote-naming> 要素を使用して設定されます。
以下の管理 CLI コマンドを使用して、リモート JNDI インターフェースをアクティブまたは非アクティブにします。
/subsystem=naming/service=remote-naming:add
/subsystem=naming/service=remote-naming:add
以下の管理 CLI コマンドを使用して、リモート JNDI インターフェースを非アクティブにします。
/subsystem=naming/service=remote-naming:remove
/subsystem=naming/service=remote-naming:remove
リモート JNDI 上では java:jboss/exported コンテキスト内のエントリーのみにアクセスできます。