模块  java.naming
软件包  javax.naming

Class InitialContext

  • 实现的所有接口
    Context
    已知直接子类:
    InitialDirContext

    public class InitialContext
    extends Object
    implements Context
    此类是执行命名操作的起始上下文。

    所有命名操作都与上下文相关。 初始上下文实现了Context接口,并提供了解析名称的起点。

    构造初始上下文时,将使用传递给构造函数的环境参数中定义的属性以及任何application resource files初始化其环境。

    JNDI通过合并以下两个来源的值来确定每个属性的值,顺序如下:

    1. 构造函数的环境参数和系统属性首次出现该属性。
    2. 应用程序资源文件( jndi.properties )。
    对于在这两个源中或在多个应用程序资源文件中找到的每个属性,属性的值确定如下。 如果该属性是指定JNDI工厂列表的标准JNDI属性之一(请参阅Context ),则所有值都将连接到单个以冒号分隔的列表中。 对于其他属性,仅使用找到的第一个值。

    初始上下文实现在运行时确定。 默认策略使用环境属性“ java.naming.factory.initial ”,其中包含初始上下文工厂的类名。 解析URL字符串时会对此策略执行例外处理,如下所述。

    当一个URL字符串( String形式一个scheme_id:rest_of_name)作为名称参数传递给任何方法,一个URL上下文工厂处理该方案的定位和用于解析URL。 如果未找到此类工厂,则使用由"java.naming.factory.initial"指定的初始上下文。 类似地,当第一个组件是URL字符串的CompositeName对象作为名称参数传递给任何方法时,将找到URL上下文工厂并用于解析第一个名称组件。 有关URL上下文工厂如何定位的说明,请参见NamingManager.getURLContext()

    可以通过调用NamingManager.setInitialContextFactoryBuilder()来覆盖此查找初始上下文和URL上下文工厂的默认策略。

    无法实例化初始上下文时,抛出NoInitialContextException。 在与InitialContext进行任何交互时,不仅在构造InitialContext时,都会抛出此异常。 例如,初始上下文的实现可能仅在对其调用实际方法时才会懒惰地检索上下文。 应用程序不应该确定何时确定初始上下文的存在。

    当环境属性“java.naming.factory.initial”为非null时,InitialContext构造函数将尝试创建其中指定的初始上下文。 那时,如果遇到问题,涉及的初始上下文工厂可能会抛出异常。 但是,当它验证并向初始上下文的用户指示任何与环境属性或连接相关的问题时,它依赖于提供程序实现。 它可以懒惰地执行 - 延迟直到对上下文执行操作,或者在构造上下文时急切地执行操作。

    InitialContext实例未与多个线程的并发访问同步。 每个操作不同InitialContext实例的多个线程无需同步。 需要同时访问单个InitialContext实例的线程应该在它们之间进行同步并提供必要的锁定。

    从以下版本开始:
    1.3,JNDI 1.1
    另请参见:
    ContextNamingManager.setInitialContextFactoryBuilder
    • 构造方法详细信息

      • InitialContext

        protected InitialContext​(boolean lazy)
                          throws NamingException
        构造一个初始上下文,可以选择不初始化它。 当在调用InitialContext构造函数InitialContext不知道环境参数的值时,子类中的构造函数可以使用它。 子类的构造函数将调用此构造函数,计算环境的值,然后在返回之前调用init()
        参数
        lazy - true表示不初始化初始上下文; false相当于调用new InitialContext()
        异常
        NamingException - 如果遇到命名异常
        从以下版本开始:
        1.3
        另请参见:
        init(Hashtable)
      • InitialContext

        public InitialContext​(Hashtable<?,​?> environment)
                       throws NamingException
        使用提供的环境构造初始上下文。 环境属性在类描述中讨论。

        此构造函数不会修改environment或保存对它的引用,但可以保存克隆。 传递给构造函数后,调用者不应在environment修改可变键和值。

        参数
        environment - 用于创建初始上下文的环境。 Null表示空的环境。
        异常
        NamingException - 如果遇到命名异常
    • 方法详细信息

      • init

        protected void init​(Hashtable<?,​?> environment)
                     throws NamingException
        使用提供的环境初始化初始上下文。 环境属性在类描述中讨论。

        此方法将修改environment并保存对它的引用。 呼叫者可能不再修改它。

        参数
        environment - 用于创建初始上下文的环境。 Null表示空的环境。
        异常
        NamingException - 如果遇到命名异常
        从以下版本开始:
        1.3
        另请参见:
        InitialContext(boolean)
      • doLookup

        public static <T> T doLookup​(Name name)
                              throws NamingException
        一种检索命名对象的静态方法。 这是一个等效于调用的快捷方法:

        InitialContext ic = new InitialContext(); Object obj = ic.lookup();

        如果name为空,则返回此上下文的新实例(表示与此上下文相同的命名上下文,但其环境可以单独修改,并且可以同时访问它)。

        参数类型
        T - 返回对象的类型
        参数
        name - 要查找的对象的名称
        结果
        绑定到 name的对象
        异常
        NamingException - 如果遇到命名异常
        从以下版本开始:
        1.6
        另请参见:
        doLookup(String)Context.lookup(Name)
      • doLookup

        public static <T> T doLookup​(String name)
                              throws NamingException
        一种检索命名对象的静态方法。 有关详细信息,请参见doLookup(Name)
        参数类型
        T - 返回对象的类型
        参数
        name - 要查找的对象的名称
        结果
        绑定到 name的对象
        异常
        NamingException - 如果遇到命名异常
        从以下版本开始:
        1.6
      • getDefaultInitCtx

        protected Context getDefaultInitCtx()
                                     throws NamingException
        通过调用NamingManager.getInitialContext()检索初始上下文并将其缓存在defaultInitCtx中。 设置gotDefault以便我们知道我们之前已经尝试过这个。
        结果
        非null缓存的初始上下文。
        异常
        NoInitialContextException - 如果找不到初始上下文。
        NamingException - 如果遇到命名异常。
      • getURLOrDefaultInitCtx

        protected Context getURLOrDefaultInitCtx​(String name)
                                          throws NamingException
        检索用于解析字符串名称name的上下文。 如果name名称是URL字符串,则尝试为其查找URL上下文。 如果未找到,或者如果name不是URL字符串,则返回getDefaultInitCtx()

        有关子类应如何使用此方法的说明,请参阅getURLOrDefaultInitCtx(Name)。

        参数
        name - 要获取上下文的非null名称。
        结果
        name的URL上下文或缓存的初始上下文。 结果不能为空。
        异常
        NoInitialContextException - 如果找不到初始上下文。
        NamingException - 遇到命名异常。
        另请参见:
        NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
      • getURLOrDefaultInitCtx

        protected Context getURLOrDefaultInitCtx​(Name name)
                                          throws NamingException
        检索用于解析name的上下文。 如果name名称的第一个组件是URL字符串,则尝试为其查找URL上下文。 如果未找到,或者name的第一个组件不是URL字符串,则返回getDefaultInitCtx()

        创建InitialContext的子类时,请使用以下方法。 定义一个使用此方法获取所需子类的初始上下文的新方法。

         protected XXXContext getURLOrDefaultInitXXXCtx(Name name)
         throws NamingException {
          Context answer = getURLOrDefaultInitCtx(name);
          if (!(answer instanceof XXXContext)) {
            if (answer == null) {
              throw new NoInitialContextException();
            } else {
              throw new NotContextException("Not an XXXContext");
            }
          }
          return (XXXContext)answer;
         }
         
        在子类中提供新方法的实现时,使用这个新定义的方法来获取初始上下文。
         public Object XXXMethod1(Name name, ...) {
          throws NamingException {
            return getURLOrDefaultInitXXXCtx(name).XXXMethod1(name, ...);
         }
         
        参数
        name - 要获取上下文的非null名称。
        结果
        name的URL上下文或缓存的初始上下文。 结果不能为空。
        异常
        NoInitialContextException - 如果找不到初始上下文。
        NamingException - 遇到命名异常。
        另请参见:
        NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
      • composeName

        public String composeName​(String name,
                                  String prefix)
                           throws NamingException
        使用与此上下文相关的名称组合此上下文的名称。 由于初始上下文可能永远不会相对于除其自身之外的任何上下文进行命名,因此prefix参数的值必须为空名称( "" )。
        Specified by:
        composeName ,界面 Context
        参数
        name - 相对于此上下文的名称
        prefix - 相对于其祖先之一的此上下文的名称
        结果
        组成 prefixname
        异常
        NamingException - 如果遇到命名异常
      • composeName

        public Name composeName​(Name name,
                                Name prefix)
                         throws NamingException
        使用与此上下文相关的名称组合此上下文的名称。 由于初始上下文可能永远不会相对于除其自身之外的任何上下文进行命名,因此prefix参数的值必须为空名称。
        Specified by:
        composeName接口 Context
        参数
        name - 相对于此上下文的名称
        prefix - 相对于其祖先之一的此上下文的名称
        结果
        组成 prefixname
        异常
        NamingException - 如果遇到命名异常
        另请参见:
        Context.composeName(String, String)