- java.lang.Object
-
- javax.naming.spi.NamingManager
-
- 已知直接子类:
-
DirectoryManager
public class NamingManager extends Object
此类包含用于创建由命名或目录服务中的位置信息引用的上下文对象和对象的方法。此类无法实例化。 它只有静态方法。
在此类文档中提及URL是指RFC 1738及其相关RFC定义的URL字符串。 它是符合其中描述的语法的任何字符串,并且可能并不总是在java.net.URL类或Web浏览器中具有相应的支持。
NamingManager对于多个线程的并发访问是安全的。
除非另有说明,否则传递给任何方法的
Name
或环境参数都由调用者拥有。 实现不会修改对象或保留对它的引用,尽管它可以保留对克隆或副本的引用。- 从以下版本开始:
- 1.3
-
-
方法摘要
所有方法 静态方法 具体的方法 变量和类型 方法 描述 static Context
getContinuationContext(CannotProceedException cpe)
创建继续上下文操作的上下文。static Context
getInitialContext(Hashtable<?,?> env)
使用指定的环境属性创建初始上下文。static Object
getObjectInstance(Object refInfo, Name name, Context nameCtx, Hashtable<?,?> environment)
为指定的对象和环境创建对象的实例。static Object
getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment)
检索绑定对象的状态。static Context
getURLContext(String scheme, Hashtable<?,?> environment)
为给定的URL方案ID创建上下文。static boolean
hasInitialContextFactoryBuilder()
确定是否已设置初始上下文工厂构建器。static void
setInitialContextFactoryBuilder(InitialContextFactoryBuilder builder)
将InitialContextFactory构建器设置为构建器。static void
setObjectFactoryBuilder(ObjectFactoryBuilder builder)
ObjectFactoryBuilder确定尝试加载对象工厂时使用的策略。
-
-
-
字段详细信息
-
CPE
public static final String CPE
保存环境属性名称的常量,getContinuationContext()
将其存储在其CannotProceedException
参数的值中。 此属性由continuation上下文继承,并可由该上下文的服务提供程序用于检查异常的字段。此常量的值为“java.naming.spi.CannotProceedException”。
- 从以下版本开始:
- 1.3
- 另请参见:
-
getContinuationContext(javax.naming.CannotProceedException)
, 常数字段值
-
-
方法详细信息
-
setObjectFactoryBuilder
public static void setObjectFactoryBuilder(ObjectFactoryBuilder builder) throws NamingException
ObjectFactoryBuilder确定尝试加载对象工厂时使用的策略。 有关默认策略的说明,请参阅getObjectInstance()和类ObjectFactory。 setObjectFactoryBuilder()通过安装ObjectFactoryBuilder来覆盖此默认策略。 将使用已安装的构建器加载和创建后续对象工厂。只有在允许执行线程(由安全管理器的checkSetFactory()方法)执行此操作时,才能安装构建器。 安装后,无法更换构建器。
- 参数
-
builder
- 要安装的工厂构建器。 如果为null,则不安装任何构建器。 - 异常
-
SecurityException
- 出于安全原因,无法安装构建器。 -
NamingException
- 出于非安全相关原因,无法安装构建器。 -
IllegalStateException
- 如果已安装工厂。 - 另请参见:
-
getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
,ObjectFactory
,ObjectFactoryBuilder
,SecurityManager.checkSetFactory()
-
getObjectInstance
public static Object getObjectInstance(Object refInfo, Name name, Context nameCtx, Hashtable<?,?> environment) throws 异常
为指定的对象和环境创建对象的实例。如果已安装对象工厂构建器,则它用于创建用于创建对象的工厂。 否则,以下规则用于创建对象:
- 如果
refInfo
是包含工厂类名称的Reference
或Referenceable
,请使用命名工厂创建对象。 如果无法创建工厂,请返回refInfo
。 在JDK 1.1下,如果必须从引用中指定的位置加载工厂类,SecurityManager
必须安装SecurityManager
或者工厂创建将失败。 如果在创建工厂时遇到异常,则会将其传递给调用者。 - 如果
refInfo
是Reference
或Referenceable
且没有工厂类名称,并且地址类型为“URL”的地址为StringRefAddr
,请尝试与每个URL的方案ID对应的URL上下文工厂来创建对象(请参阅getURLContext()
)。 如果失败,请继续执行下一步。 - 按
Context.OBJECT_FACTORIES
使用环境的Context.OBJECT_FACTORIES
属性中指定的对象工厂,以及与nameCtx
关联的提供程序资源文件。 此属性的值是按顺序尝试的以冒号分隔的工厂类名称列表,第一个成功创建对象的是使用的对象。 如果无法加载任何工厂,请返回refInfo
。 如果在创建对象时遇到异常,则会将异常传递给调用者。
实现
DirContext
接口的服务提供商应使用DirectoryManager.getObjectInstance()
,而不是此方法。 仅实现Context
接口的服务提供商应使用此方法。请注意,对象工厂(实现ObjectFactory接口的对象)必须是公共的,并且必须具有不接受任何参数的公共构造函数。 如果工厂位于命名模块中,则它必须位于由该模块导出到
java.naming
模块的包中。可以选择使用
name
和nameCtx
参数来指定要创建的对象的名称。name
是对象的名称,相对于上下文nameCtx
。 此信息可能对对象工厂或对象实现有用。 如果存在可以从中命名对象的几个可能的上下文 - 通常是这种情况 - 则由调用者选择一个。 一个好的经验法则是选择可用的“最深”的上下文。 如果nameCtx
为null,则name
相对于默认初始上下文。 如果未指定名称,则name
参数应为null。- 参数
-
refInfo
- 要为其创建对象的可能为null的对象。 -
name
- 此对象的名称相对于nameCtx
。 指定名称是可选的; 如果省略,则name
应为null。 -
nameCtx
- 指定name
参数的上下文。 如果为null,则name
相对于默认初始上下文。 -
environment
- 用于创建对象工厂和对象的可能为null的环境。 - 结果
-
使用
refInfo
创建的对象; 或refInfo
如果无法使用上述算法创建对象。 - 异常
-
NamingException
- 如果在尝试获取URL上下文时遇到命名异常,或者其中一个访问的工厂抛出NamingException。 -
异常
- 如果访问的其中一个工厂抛出异常,或者在加载和实例化工厂和对象类时遇到错误。 如果工厂不希望在尝试创建对象时使用其他工厂,则工厂应该只抛出异常。 请参见ObjectFactory.getObjectInstance()。 - 另请参见:
-
getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
,ObjectFactory
,ObjectFactory.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
- 如果
-
getURLContext
public static Context getURLContext(String scheme, Hashtable<?,?> environment) throws NamingException
为给定的URL方案ID创建上下文。生成的上下文用于解析方案
scheme
URL。 生成的上下文与特定URL无关。 它能够处理具有指定方案的任意URL。创建结果上下文的工厂的类名具有命名约定scheme-id URLContextFactory(例如,“ftp”scheme-id的“ftpURLContextFactory”),在如下指定的包中。
Context.URL_PKG_PREFIXES
环境属性(可能包含从系统属性或应用程序资源文件中获取的值)包含以冒号分隔的包前缀列表。 属性中的每个包前缀都按指定的顺序尝试加载工厂类。 默认包前缀是“com.sun.jndi.url”(如果没有指定的包有效,则尝试此默认值)。 完整包名称使用包前缀构造,与方案ID连接。例如,如果scheme id为“ldap”,并且
Context.URL_PKG_PREFIXES
属性包含“com.widget:com.wiz.jndi”,则命名管理器将尝试加载以下类,直到成功实例化为止:- com.widget.ldap.ldapURLContextFactory
- com.wiz.jndi.ldap.ldapURLContextFactory
- com.sun.jndi.url.ldap.ldapURLContextFactory
如果实例化工厂,则使用以下参数调用它以生成结果上下文。
factory.getObjectInstance(null, environment);
例如,如上所示在LDAP URL上下文工厂上调用getObjectInstance()将返回可以解析LDAP URL的上下文(例如“ldap://ldap.wiz.com/o=wiz,c=us”,“ldap: //ldap.umich.edu/o=umich,c=us“,...)。
请注意,对象工厂(实现ObjectFactory接口的对象)必须是公共的,并且必须具有不接受任何参数的公共构造函数。 如果工厂位于命名模块中,则它必须位于由该模块导出到
java.naming
模块的包中。- 参数
-
scheme
- 上下文支持的URL的非null scheme-id。 -
environment
- 在创建对象工厂和上下文时使用的可能为null的环境属性。 - 结果
-
用于解析方案ID为
scheme
URL的上下文;null
如果找不到用于创建上下文的工厂。 - 异常
-
NamingException
- 如果在创建上下文时发生命名异常。 - 另请参见:
-
getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
,ObjectFactory.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
-
getInitialContext
public static Context getInitialContext(Hashtable<?,?> env) throws NamingException
使用指定的环境属性创建初始上下文。这样做如下:
- 如果已安装InitialContextFactoryBuilder,则它用于创建用于创建初始上下文的工厂
- 否则,将使用
Context.INITIAL_CONTEXT_FACTORY
环境属性中指定的类- 首先, ServiceLoader机制尝试使用当前线程的上下文类加载器来定位
InitialContextFactory
提供程序 - 如果做不到这一点,这个实现试图使用内置机制找到合适的
InitialContextFactory
(请注意,初始上下文工厂(实现InitialContextFactory接口的对象)必须是公共的,并且必须具有不接受任何参数的公共构造函数。如果工厂位于命名模块中,则它必须位于导出的包中通过该模块到java.naming
模块。)
- 首先, ServiceLoader机制尝试使用当前线程的上下文类加载器来定位
- 参数
-
env
- 创建上下文时使用的可能为null的环境属性。 - 结果
- 非null初始上下文。
- 异常
-
NoInitialContextException
- 如果未找到Context.INITIAL_CONTEXT_FACTORY
属性或命名不存在的类或无法实例化的类,或者由于某些其他原因无法创建初始上下文。 -
NamingException
- 如果遇到其他一些命名异常。 - 另请参见:
-
InitialContext
,InitialDirContext
-
setInitialContextFactoryBuilder
public static void setInitialContextFactoryBuilder(InitialContextFactoryBuilder builder) throws NamingException
将InitialContextFactory构建器设置为构建器。只有在安全管理器允许执行线程执行此操作时,才能安装构建器。 安装后,无法更换构建器。
- 参数
-
builder
- 要安装的初始上下文工厂构建器。 如果为null,则不设置构建器。 - 异常
-
SecurityException
- 出于安全原因,无法安装构建器。 -
NamingException
- 出于非安全相关原因,无法安装构建器。 -
IllegalStateException
- 如果以前安装了构建器。 - 另请参见:
-
hasInitialContextFactoryBuilder()
,SecurityManager.checkSetFactory()
-
hasInitialContextFactoryBuilder
public static boolean hasInitialContextFactoryBuilder()
确定是否已设置初始上下文工厂构建器。- 结果
- 如果已设置初始上下文工厂构建器,则为true;否则 否则是假的。
- 另请参见:
-
setInitialContextFactoryBuilder(javax.naming.spi.InitialContextFactoryBuilder)
-
getContinuationContext
public static Context getContinuationContext(CannotProceedException cpe) throws NamingException
创建继续上下文操作的上下文。在对跨越多个名称空间的名称执行操作时,来自一个命名系统的上下文可能需要将操作传递给下一个命名系统。 上下文实现通过首先构建一个包含信息的
CannotProceedException
确定它已经进行了多远。 然后通过调用getContinuationContext
从JNDI获取延续上下文。 然后,上下文实现应该通过使用尚未解析的名称的其余部分对continuation上下文调用相同的操作来恢复上下文操作。利用在之前
cpe
参数,这种方法更新由属性的值设置与该对象关联的环境CPE
至cpe
。 此属性将由continuation上下文继承,并可由该上下文的服务提供程序用于检查此异常的字段。- 参数
-
cpe
- 触发此延续的非null异常。 - 结果
- 用于继续操作的非null Context对象。
- 异常
-
NamingException
- 如果发生命名异常。
-
getStateToBind
public static Object getStateToBind(Object obj, Name name, Context nameCtx, Hashtable<?,?> environment) throws NamingException
检索绑定对象的状态。实现
DirContext
接口的服务提供商应使用DirectoryManager.getStateToBind()
,而不是此方法。 仅实现Context
接口的服务提供商应使用此方法。此方法使用环境属性中的
Context.STATE_FACTORIES
属性中的指定状态工厂,以及Context.STATE_FACTORIES
与nameCtx
关联的提供程序资源文件。 此属性的值是以冒号分隔的工厂类名称列表,按顺序尝试,第一个成功返回对象状态的是使用的。 如果无法以这种方式检索对象的状态,则返回对象本身。 如果在检索状态时遇到异常,则异常将传递给调用者。请注意,状态工厂(实现StateFactory接口的对象)必须是公共的,并且必须具有不接受任何参数的公共构造函数。 如果工厂位于命名模块中,则它必须位于由该模块导出到
java.naming
模块的包中。可以选择使用
name
和nameCtx
参数来指定要创建的对象的名称。 有关详细信息,请参阅ObjectFactory.getObjectInstance()
中“名称和上下文参数”的说明。此方法可能返回
Referenceable
对象。 获取此对象的服务提供商可以选择直接存储它,或者提取其引用(使用Referenceable.getReference()
)并存储它。- 参数
-
obj
- 要为其绑定状态的非null对象。 -
name
- 此对象的名称相对于nameCtx
,如果未指定名称,则为null。 -
nameCtx
- 指定name
参数的上下文,如果name
相对于默认初始上下文,name
null。 -
environment
- 用于创建状态工厂和对象状态的可能为null的环境。 - 结果
-
表示
obj
绑定状态的非null对象。 它可能是对象(obj
)本身。 - 异常
-
NamingException
- 如果访问的其中一个工厂抛出异常,或者在加载和实例化工厂和对象类时遇到错误。 如果工厂不希望在尝试创建对象时使用其他工厂,则工厂应该只抛出异常。 见StateFactory.getStateToBind()
。 - 从以下版本开始:
- 1.3
- 另请参见:
-
StateFactory
,StateFactory.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
,DirectoryManager.getStateToBind(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>, javax.naming.directory.Attributes)
-
-