第23章 Naming サブシステムの設定
23.1. Naming サブシステム
naming
サブシステムは JBoss EAP のJNDI 実装を提供します。このサブシステムを設定して、グローバル JNDI 名前空間のエントリーをバインドすることができます。さらに、このサブシステムを設定してリモート JNDI をアクティブまたは非アクティブにすることもできます。
以下は、すべての要素と属性が指定された naming
サブシステムの XML 設定例になります。
<subsystem xmlns="urn:jboss:domain:naming:2.0"> <bindings> <simple name="java:global/simple-integer-binding" value="100" type="int" /> <simple name="java:global/jboss.org/docs/url" value="https://docs.jboss.org" type="java.net.URL" /> <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory" /> <external-context name="java:global/federation/ldap/example" class="javax.naming.directory.InitialDirContext" cache="true"> <environment> <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" /> <property name="java.naming.provider.url" value="ldap://ldap.example.com:389" /> <property name="java.naming.security.authentication" value="simple" /> <property name="java.naming.security.principal" value="uid=admin,ou=system" /> <property name="java.naming.security.credentials" value="secret" /> </environment> </external-context> <lookup name="java:global/new-alias-name" lookup="java:global/original-name" /> </bindings> <remote-naming/> </subsystem>
23.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)
結果の XML 設定
<subsystem xmlns="urn:jboss:domain:naming:2.0"> <bindings> <simple name="java:global/simple-integer-binding" value="100" type="int"/> </bindings> <remote-naming/> </subsystem>
以下のコマンドを使用してバインディングを削除します。
/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])
結果の XML 設定
<subsystem xmlns="urn:jboss:domain:naming:2.0"> <bindings> <object-factory name="java:global/foo/bar/factory" module="org.foo.bar" class="org.foo.bar.ObjectFactory"> <environment> <property name="p1" value="v1" /> <property name="p2" value="v2" /> </environment> </object-factory> </bindings> </subsystem>
以下のコマンドを使用してバインディングを削除します。
/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])
結果の XML 設定
<subsystem xmlns="urn:jboss:domain:naming:2.0"> <bindings> <external-context name="java:global/federation/ldap/example" module="org.jboss.as.naming" class="javax.naming.directory.InitialDirContext" cache="true"> <environment> <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> <property name="java.naming.provider.url" value="ldap://ldap.example.com:389"/> <property name="java.naming.security.authentication" value="simple"/> <property name="java.naming.security.principal" value="uid=admin,ou=system"/> <property name="java.naming.security.credentials" value="secret"/> </environment> </external-context> </bindings> </subsystem>
以下のコマンドを使用してバインディングを削除します。
/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"/>
ルックアップエイリアスのバインド
lookup
要素を使用すると、既存のエントリーを追加の名前またはエイリアスにバインドできます。
-
name
属性は必須で、エントリーのターゲット JNDI 名を指定します。 -
lookup
属性は必須で、ソース JNDI 名を示します。
以下に、既存のエントリーをエイリアスにバインドする管理 CLI コマンドの例を示します。
/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" />
以下のコマンドを使用してバインディングを削除します。
/subsystem=naming/binding=java\:global\/c:remove
23.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)
naming
サブシステムでグローバルバインディングを設定する方法に関する詳細は、「グローバルバインディングの設定」を参照してください。
23.4. リモート JNDI インターフェースの設定
リモート JNDI インターフェースは、クライアントがリモート JBoss EAP インスタンスでエントリーをルックアップできるようにします。naming
サブシステムを設定すると、このインターフェースをアクティブまたは非アクティブにすることができます (デフォルトではアクティブになります)。リモート JNDI インターフェースは <remote-naming>
要素を使用して設定されます。
以下の管理 CLI コマンドを使用して、リモート JNDI インターフェースをアクティブまたは非アクティブにします。
/subsystem=naming/service=remote-naming:add
以下の管理 CLI コマンドを使用して、リモート JNDI インターフェースを非アクティブにします。
/subsystem=naming/service=remote-naming:remove
リモート JNDI 上では java:jboss/exported
コンテキスト内のエントリーのみにアクセスできます。