第 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 配置项用来绑定 primitive 或 java.net.URL 项。
-
name属性是必需的,它为这个条目指定目标 JNDI 名。 -
value属性是必需的,它用来定义条目的值。 -
可选的
type属性用来指定这个条目值的类型,它的默认值是 tojava.lang.String。除了java.lang.String,还可用指定 primitive 类型以及它们相应的 object wrapper 类型,如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属性是必需的,它指定了 JBoss Module ID,对象工厂的 Java 类会从这个 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
绑定外部上下文
使用 external-context XML 配置项可以联合外部 JNDI 上下文,如 LDAP 上下文。
-
name属性是必需的,它为这个条目指定目标 JNDI 名。 -
class属性是必需的,它指定了用来创建联合上下文(federated context)的 Java 初始命名上下文类型。请注意,这个类型需要有一个带有单一环境映射参数的 constructor。 -
module参数是可选的,它指定了 JBoss Module ID,外部 JNDI 上下文所需的类可以从这里加载。 -
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
当查找的资源是一个没有正确实现 lookup(Name) 方法的 JNDI 厂商时,会出现一个 "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
只有 java:jboss/exported 上下文中的项可以通过远程 JNDI 访问。

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.