23.2. 配置全局绑定

命名 子系统允许您将条目绑定到 java:globaljava:jbossjava 全局 JNDI 命名空间;不过,建议您使用标准的可移植 java:global 命名空间。

全局绑定在 naming 子系统的 <bindings> 元素中配置。支持四种绑定类型:

配置简单绑定

简单的 XML 配置元素绑定了原语或 java.net.URL 条目。

  • name 属性是必需的,它指定条目的目标 JNDI 名称。
  • value 属性是强制的,定义条目的值。
  • 可选的 type 属性(默认为 java.lang.String )指定条目值的类型。除了 java.lang.String 外,您还可以指定原语类型及其对应的对象打包程序类,如 intjava.lang.Integerjava.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 模块 ID。
  • 可选 的环境 子元素可用于为对象工厂提供自定义环境。

以下是管理 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

绑定外部上下文

外部 JNDI 上下文的联合(如 LDAP 上下文)可使用 外部上下文 XML 配置元素来实现。

  • name 属性是必需的,它指定条目的目标 JNDI 名称。
  • class 属性是强制的,指示用于创建联合上下文的 Java 初始命名上下文类型。请注意,此类类型必须具有带有单个环境映射参数的构造器。
  • 可选的 module 属性指定 JBoss 模块 ID,可在其中加载外部 JNDI 上下文所需的任何类。
  • 可选的 cache 属性(默认为 false )指明是否应缓存外部上下文实例。
  • 可选 的环境 子元素可用于提供查找外部上下文所需的自定义环境。

以下是用于创建外部上下文绑定的管理 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
注意

资源查找未正确实施 lookup(Name) 方法的 JNDI 提供程序,可能会导致 "javax.naming.InvalidNameException: onlyly support CompoundName name" 错误。

您可以通过指定外部上下文环境改为使用 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