23.2. 配置全局绑定
命名
子系统允许您将条目绑定到 java:global
、java:jboss
或 java
全局 JNDI 命名空间;不过,建议您使用标准的可移植 java:global
命名空间。
全局绑定在 naming
子系统的 <bindings>
元素中配置。支持四种绑定类型:
配置简单绑定
简单的
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 模块 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