Module  java.naming
软件包  javax.naming.spi

Class NamingManager

  • 已知直接子类:
    DirectoryManager


    public class NamingManager
    extends Object
    该类包含用于创建命名或目录服务中位置信息引用的上下文对象和对象的方法。

    这个类不能被实例化。 它只有静态方法。

    该类文档中提及的URL是指RFC 1738及其相关RFC定义的URL字符串。 它是符合其中描述的语法的任何字符串,并且可能不总是在java.net.URL类或Web浏览器中具有相应的支持。

    NamingManager对多个线程的并发访问是安全的。

    除非另有说明,否则传递给任何方法的Name或环境参数由调用者拥有。 实现不会修改对象或保留对它的引用,尽管它可以保留对克隆或副本的引用。

    从以下版本开始:
    1.3
    • 字段详细信息

      • CPE

        public static final String CPE
        持有其中getContinuationContext()存储其CannotProceedException参数值的环境属性名称的常量。 该属性由连续上下文继承,该上下文的服务提供者可以使用该属性来检查异常的字段。

        该常量的值为“java.naming.spi.CannotProceedException”。

        从以下版本开始:
        1.3
        另请参见:
        getContinuationContext(javax.naming.CannotProceedException)Constant Field Values
    • 方法详细信息

      • getObjectInstance

        public static Object getObjectInstance​(Object refInfo,
                                               Name name,
                                               Context nameCtx,
                                               Hashtable<?,?> environment)
                                        throws 异常
        为指定的对象和环境创建一个对象的实例。

        如果已安装对象工厂构建器,则用于创建用于创建对象的工厂。 否则,以下规则用于创建对象:

        1. 如果refInfo是包含工厂类名的ReferenceReferenceable ,请使用命名工厂来创建对象。 如果工厂无法创建,返回refInfo 在JDK 1.1下,如果工厂类必须从引用中指定的位置加载, SecurityManager必须安装SecurityManager或出厂创建失败。 如果在创建工厂时遇到异常,它将传递给调用者。
        2. 如果refInfoReferenceReferenceable ,没有工厂类名称,地址或地址为StringRefAddr ,地址类型为“URL”,请尝试与每个URL的方案ID相对应的URL上下文工厂来创建对象(见getURLContext() )。 如果失败,继续下一步。
        3. 使用环境Context.OBJECT_FACTORIES属性中指定的对象工厂以及与nameCtx相关联的提供者资源文件。 该属性的值是按冒号分隔的工厂类名列表,按顺序尝试,成功创建对象的第一个列表是使用的列表。 如果没有工厂可以加载,请返回refInfo 如果在创建对象时遇到异常,则将异常传递给调用者。

        实现DirContext接口的服务提供商应该使用DirectoryManager.getObjectInstance() ,而不是这种方法。 仅实现Context接口的服务提供商应该使用此方法。

        请注意,对象工厂(实现ObjectFactory接口的对象)必须是公共的,并且必须具有不接受参数的公共构造函数。 在工厂位于命名模块的情况下,它必须在由该模块导出到java.naming模块的包中。

        可以可选地使用namenameCtx参数来指定正在创建的对象的名称。 name是对象的名称,相对于上下文nameCtx 该信息可能对对象工厂或对象实现有用。 如果有几个可能的对象可以被命名的上下文(通常是这样),则由调用者来选择一个。 一个很好的经验法则是选择“最深”的上下文。 如果nameCtx为空,则name是相对于默认的初始上下文。 如果未指定名称,则name参数应为null。

        参数
        refInfo - 可以为其创建对象的空对象。
        name - 此对象的名称相对于nameCtx 指定名称是可选的; 如果省略, name应为null。
        nameCtx - 指定了name参数的上下文。 如果为null,则name是相对于默认的初始上下文。
        environment - 用于创建对象工厂和对象的可能的空环境。
        结果
        使用refInfo创建的对象; 或者如果不能使用上述算法创建对象, refInfo
        异常
        NamingException - 如果在尝试获取URL上下文时遇到命名异常,或者如果其中一个工厂引发了NamingException。
        异常 - 如果其中一个访问的工厂引发异常,或者在加载和实例化工厂和对象类时遇到错误。 如果工厂不希望使用其他工厂来尝试创建对象,那么工厂应该只抛出异常。 请参阅ObjectFactory.getObjectInstance()。
        另请参见:
        getURLContext(java.lang.String, java.util.Hashtable<?, ?>)ObjectFactoryObjectFactory.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创建上下文。

        所得到的上下文是用于解析方案的URL scheme 所得到的上下文不与特定URL绑定。 它能够处理具有指定方案的任意URL。

        创建生成的上下文的工厂的类名称具有如下指定的包中的命名约定scheme-id URLContextFactory(例如“ftp”scheme-id“ftpURLContextFactory”)。 Context.URL_PKG_PREFIXES环境属性(可能包含从系统属性或应用程序资源文件获取的值)包含冒号分隔的包前缀列表。 属性中的每个包前缀按照指定的顺序进行加载工厂类。 默认包前缀为“com.sun.jndi.url”(如果没有指定的包正常工作,则会尝试此默认值)。 完整的软件包名称使用软件包前缀构建,并与scheme id相连。

        例如,如果方案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
        如果没有包前缀工作,则返回null。

        如果工厂被实例化,则使用以下参数调用工厂来生成结果上下文。

        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的非空方案ID。
        environment - 用于创建对象工厂和上下文的可能的空环境属性。
        结果
        用于解析URL的上下文,方案号为scheme ; 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模块。)
        参数
        env - 创建上下文时使用的可能为空的环境属性。
        结果
        非空初始上下文。
        异常
        NoInitialContextException - 如果未找到 Context.INITIAL_CONTEXT_FACTORY属性或命名不存在的类或不能实例化的类,或者由于其他原因无法创建初始上下文。
        NamingException - 如果遇到其他命名异常。
        另请参见:
        InitialContextInitialDirContext
      • getContinuationContext

        public static Context getContinuationContext​(CannotProceedException cpe)
                                              throws NamingException
        创建一个上下文来继续上下文操作。

        在对跨越多个命名空间的名称执行操作时,来自一个命名系统的上下文可能需要将操作传递到下一个命名系统。 上下文实现通过首先构建一个包含信息的CannotProceedException确定它已经进行了多远。 然后通过调用getContinuationContext从JNDI获取连续上下文。 然后,上下文实现应通过在连续上下文中调用相同的操作来恢复上下文操作,使用尚未解析的名称的剩余部分。

        利用在之前cpe参数,这种方法更新由属性的值设置与该对象关联的环境CPEcpe 该属性将由连续上下文继承,并且该上下文的服务提供者可以使用该属性来检查此异常的字段。

        参数
        cpe - 触发此延续的非空异常。
        结果
        用于继续操作的非空Context对象。
        异常
        NamingException - 如果发生命名异常。
      • getStateToBind

        public static Object getStateToBind​(Object obj,
                                            Name name,
                                            Context nameCtx,
                                            Hashtable<?,?> environment)
                                     throws NamingException
        检索绑定对象的状态。

        实现DirContext接口的服务提供商应该使用DirectoryManager.getStateToBind() ,而不是这种方法。 仅实现Context接口的服务提供商应使用此方法。

        该方法使用来自环境属性的Context.STATE_FACTORIES属性中的指定状态工厂,以及与nameCtx相关联的提供程序资源文件。 此属性的值是按冒号分隔的工厂类名列表,按顺序尝试,成功返回对象状态的第一个列是使用的列。 如果没有以这种方式检索对象的状态,则返回对象本身。 如果在检索状态时遇到异常,该异常将传递给调用者。

        请注意,状态工厂(实现StateFactory接口的对象)必须是public的,并且必须具有不接受参数的公共构造函数。 在工厂位于指定模块的情况下,它必须在由该模块导出到java.naming模块的包中。

        可以可选地使用namenameCtx参数来指定正在创建的对象的名称。 有关详细信息,请参阅ObjectFactory.getObjectInstance()中“名称和上下文参数”的说明。

        此方法可能会返回一个Referenceable对象。 获取此对象的服务提供商可以选择直接存储,或提取其参考(使用Referenceable.getReference() ),并存储。

        参数
        obj - 要获取状态绑定的非空对象。
        name - 此对象相对于 nameCtx的名称,如果未指定名称,则为null。
        nameCtx - 指定 name参数的上下文,如果 name相对于默认初始上下文, name null。
        environment - 用于创建状态工厂和对象状态的可能的空环境。
        结果
        表示obj的绑定状态的非空对象。 它可以是对象( obj )本身。
        异常
        NamingException - 如果其中一个访问的工厂引发异常,或者在加载和实例化工厂和对象类时遇到错误。 如果工厂不希望使用其他工厂来尝试创建对象,那么工厂应该只抛出异常。 StateFactory.getStateToBind()
        从以下版本开始:
        1.3
        另请参见:
        StateFactoryStateFactory.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)