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