第21章 Naming サブシステムの設定
21.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>21.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, 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" 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
21.3. リモート 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 コンテキスト内のエントリーのみにアクセスできます。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.