javax.naming

接口
异常
java.lang.Object
  继承者 javax.naming.InitialContext
所有已实现的接口:
Context
直接已知子类:
InitialDirContext

public class InitialContext
     
extends Object
implements Context

此类是执行命名操作的初始上下文。

所有命名操作都相对于某一上下文。该初始上下文实现 Context 接口并提供解析名称的起始点。

在构造初始上下文时,使用传递给构造方法的环境参数中以及所有应用程序资源文件中定义的属性初始化其环境。此外,可以将少数标准 JNDI 属性指定为系统属性或 applet 参数(通过使用 Context.APPLET)。这些特殊属性列于 ContextLdapContext 接口文档的字段详细信息部分。

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

  1. 构造方法的环境参数、(适当属性的)applet 参数,以及系统属性中最先出现的属性。
  2. 应用程序资源文件 (jndi.properties)。
对于同时存在于两个源或多个应用程序资源文件中的每个属性,用以下方式确定属性值。如果该属性是指定 JNDI 工厂列表的标准 JNDI 属性之一(参见 Context),则所有值都被串联成一个以冒号分隔的列表。对于其他属性,只使用最先找到的值。

初始上下文实现是在运行时确定的。默认策略使用环境属性 "java.naming.factory.initial",该属性包含初始上下文工厂的类名称。解析 URL 字符串时生成此策略的一个异常,如下所述。

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

这一定位初始上下文和 URL 上下文工厂的默认策略可以通过调用 NamingManager.setInitialContextFactoryBuilder() 重写。

当无法实例化初始上下文时,将抛出 NoInitialContextException。此异常可以在与 InitialContext 进行的任何交互期间抛出,而不仅仅是在构造 InitialContext 时。例如,初始上下文的实现可能仅当在其上调用实际方法时惰性获取上下文。当确定初始上下文存在时,应用程序不应该对它有任何依赖性。

当环境属性 "java.naming.factory.initial" 为非 null 值时,InitialContext 构造方法将试着创建在其中指定的初始上下文。此时,如果遇到问题,所涉及的初始上下文工厂可能抛出异常。不过,在验证并向初始上下文用户指示所有与环境属性或连接有关的问题时,这将与提供者的实现有关。提供者也可以以延迟方式做到这一点:延迟到在上下文上执行某一操作时;在更急切的情况下,延迟到构造上下文时。

InitialContext 实例对多个线程的并发访问不同步。对于每个线程都操作一个不同 InitialContext 实例的多个线程而言,无需实现同步。需要并发地访问单个 InitialContext 实例的线程应该在它们之间实现同步并提供必需的锁定。

从以下版本开始:
JNDI 1.1 / Java 2 Platform, Standard Edition, v 1.3
另请参见:
Context, NamingManager.setInitialContextFactoryBuilder

字段摘要
protected  Context defaultInitCtx
          该字段保存调用 NamingManager.getInitialContext() 的结果。
protected  boolean gotDefault
          该字段指示是否已通过调用 NamingManager.getInitialContext() 获得了初始上下文。
protected  Hashtable<Object,Object> myProps
          与此 InitialContext 关联的环境。
 
从接口 javax.naming.Context 继承的字段
APPLET, AUTHORITATIVE, BATCHSIZE, DNS_URL, INITIAL_CONTEXT_FACTORY, LANGUAGE, OBJECT_FACTORIES, PROVIDER_URL, REFERRAL, SECURITY_AUTHENTICATION, SECURITY_CREDENTIALS, SECURITY_PRINCIPAL, SECURITY_PROTOCOL, STATE_FACTORIES, URL_PKG_PREFIXES
 
构造方法摘要
  InitialContext()
          构造一个初始上下文。
protected InitialContext(boolean lazy)
          构造一个带有不进行初始化选项的初始上下文。
  InitialContext(Hashtable<?,?> environment)
          使用所提供的环境构造一个初始上下文。
 
方法摘要
 Object addToEnvironment(String propName, Object propVal)
          将一个新环境属性添加到此上下文的环境中。
 void bind(Name name, Object obj)
          将名称绑定到对象。
 void bind(String name, Object obj)
          将名称绑定到对象。
 void close()
          关闭此上下文。
 Name composeName(Name name, Name prefix)
          将此上下文的名称与相对于此上下文的名称组合。
 String composeName(String name, String prefix)
          将此上下文的名称与相对于此上下文的名称组合。
 Context createSubcontext(Name name)
          创建并绑定一个新上下文。
 Context createSubcontext(String name)
          创建并绑定一个新上下文。
 void destroySubcontext(Name name)
          销毁指定上下文,并将它从名称空间中移除。
 void destroySubcontext(String name)
          销毁指定上下文,并将它从名称空间中移除。
static
<T> T
doLookup(Name name)
          获取指定对象的静态方法。
static
<T> T
doLookup(String name)
          获取指定对象的静态方法。
protected  Context getDefaultInitCtx()
          通过调用 NamingManager.getInitialContext() 获取初始上下文,并将它缓存在 defaultInitCtx 中。
 Hashtable<?,?> getEnvironment()
          检索对此上下文有效的环境。
 String getNameInNamespace()
          在此上下文自己的名称空间中检索其完全名称。
 NameParser getNameParser(Name name)
          检索与指定上下文关联的解析器。
 NameParser getNameParser(String name)
          检索与指定上下文关联的解析器。
protected  Context getURLOrDefaultInitCtx(Name name)
          获取用来解析 name 的上下文。
protected  Context getURLOrDefaultInitCtx(String name)
          获取用来解析字符串名称 name 的上下文。
protected  void init(Hashtable<?,?> environment)
          使用所提供的环境初始化初始上下文。
 NamingEnumeration<NameClassPair> list(Name name)
          枚举绑定在指定上下文中的名称,以及绑定到这些名称的对象的类名称。
 NamingEnumeration<NameClassPair> list(String name)
          枚举绑定在指定上下文中的名称,以及绑定到这些名称的对象的类名称。
 NamingEnumeration<Binding> listBindings(Name name)
          枚举绑定在指定上下文中的名称,以及绑定到这些名称的对象。
 NamingEnumeration<Binding> listBindings(String name)
          枚举绑定在指定上下文中的名称,以及绑定到这些名称的对象。
 Object lookup(Name name)
          检索指定的对象。
 Object lookup(String name)
          检索指定的对象。
 Object lookupLink(Name name)
          按照除名称的最终原子组件以外的链接检索指定对象。
 Object lookupLink(String name)
          按照除名称的最终原子组件以外的链接检索指定对象。
 void rebind(Name name, Object obj)
          将名称绑定到对象,重写任何现有绑定。
 void rebind(String name, Object obj)
          将名称绑定到对象,重写所有现有绑定。
 Object removeFromEnvironment(String propName)
          从此上下文的环境中移除一个环境属性。
 void rename(Name oldName, Name newName)
          将一个新名称绑定到已经被绑定到某一旧名称的对象上,并取消对旧名称的绑定。
 void rename(String oldName, String newName)
          将一个新名称绑定到已经被绑定到某一旧名称的对象上,并取消对旧名称的绑定。
 void unbind(Name name)
          取消对指定对象的绑定。
 void unbind(String name)
          取消对指定对象的绑定。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

myProps

protected Hashtable<Object,Object> myProps
与此 InitialContext 关联的环境。它被初始化为 null,并由接受环境作为参数的构造方法或 init() 方法更新。

另请参见:
addToEnvironment(java.lang.String, java.lang.Object), removeFromEnvironment(java.lang.String), getEnvironment()

defaultInitCtx

protected Context defaultInitCtx
该字段保存调用 NamingManager.getInitialContext() 的结果。它由 getDefaultInitCtx() 在第一次调用 getDefaultInitCtx() 时设置。getDefaultInitCtx() 的后续调用返回 defaultInitCtx 的值。

另请参见:
getDefaultInitCtx()

gotDefault

protected boolean gotDefault
该字段指示是否已通过调用 NamingManager.getInitialContext() 获得了初始上下文。如果为 true,则其结果保存在 defaultInitCtx 中。

构造方法详细信息

InitialContext

protected InitialContext(boolean lazy)
                  throws NamingException
构造一个带有不进行初始化选项的初始上下文。如果子类在调用 InitialContext 构造方法时仍然未知环境属性的值,则可以在其中使用此构造方法。子类的构造方法将调用此构造方法,计算环境的值,然后在返回之前调用 init()

参数:
lazy - 为 true 表示不初始化该初始上下文;为 false 等效于调用 new InitialContext()
抛出:
NamingException - 如果遇到命名异常
从以下版本开始:
1.3
另请参见:
init(Hashtable)

InitialContext

public InitialContext()
               throws NamingException
构造一个初始上下文。不提供环境属性。与 new InitialContext(null) 等效。

抛出:
NamingException - 如果遇到命名异常
另请参见:
InitialContext(Hashtable)

InitialContext

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

此构造方法不会修改 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 为空,则返回此上下文的一个新实例(该实例表示与此上下文相同的命名上下文,但可以独立地修改其环境,并可以并发地访问)。

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

doLookup

public static <T> T doLookup(String name)
                  throws NamingException
获取指定对象的静态方法。 有关详细信息请参见 doLookup(Name)

参数:
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 上下文或者缓存的初始上下文。结果不能为 null。
抛出:
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 上下文或者缓存的初始上下文。结果不能为 null。
抛出:
NoInitialContextException - 如果无法找到初始上下文。
NamingException - 如果遇到命名异常。
另请参见:
NamingManager.getURLContext(java.lang.String, java.util.Hashtable )

lookup

public Object lookup(String name)
              throws NamingException
从接口 Context 复制的描述
检索指定的对象。有关详细信息请参见 Context.lookup(Name)

指定者:
接口 Context 中的 lookup
参数:
name - 要查询的对象的名称
返回:
绑定到 name 的对象
抛出:
NamingException - 如果遇到命名异常

lookup

public Object lookup(Name name)
              throws NamingException
从接口 Context 复制的描述
检索指定的对象。如果 name 为空,则返回此上下文的一个新实例(该实例表示与此上下文相同的命名上下文,但其环境可以独立地进行修改,而且可以并发访问)。

指定者:
接口 Context 中的 lookup
参数:
name - 要查询的对象的名称
返回:
绑定到 name 的对象
抛出:
NamingException - 如果遇到命名异常
另请参见:
Context.lookup(String), Context.lookupLink(Name)

bind

public void bind(String name,
                 Object obj)
          throws NamingException
从接口 Context 复制的描述
将名称绑定到对象。有关详细信息请参见 Context.bind(Name, Object)

指定者:
接口 Context 中的 bind
参数:
name - 要绑定的名称,不可以为空
obj - 要绑定的对象,可能为 null
抛出:
NameAlreadyBoundException - 如果已经绑定了 name
InvalidAttributesException - 如果对象不支持所有强制属性
NamingException - 如果遇到命名异常

bind

public void bind(Name name,
                 Object obj)
          throws NamingException
从接口 Context 复制的描述
将名称绑定到对象。所有中间上下文和目标上下文(由该名称最终原子组件以外的其他所有组件指定)都必须已经存在。

指定者:
接口 Context 中的 bind
参数:
name - 要绑定的名称,不可以为空
obj - 要绑定的对象,可能为 null
抛出:
NameAlreadyBoundException - 如果已经绑定了 name
InvalidAttributesException - 如果对象不支持所有强制属性
NamingException - 如果遇到命名异常
另请参见:
Context.bind(String, Object), Context.rebind(Name, Object), DirContext.bind(Name, Object, javax.naming.directory.Attributes)

rebind

public void rebind(String name,
                   Object obj)
            throws NamingException
从接口 Context 复制的描述
将名称绑定到对象,重写所有现有绑定。有关详细信息请参见 Context.rebind(Name, Object)

指定者:
接口 Context 中的 rebind
参数:
name - 要绑定的名称,不可以为空
obj - 要绑定的对象,可能为 null
抛出:
InvalidAttributesException - 如果对象不支持所有强制属性
NamingException - 如果遇到命名异常

rebind

public void rebind(Name name,
                   Object obj)
            throws NamingException
从接口 Context 复制的描述
将名称绑定到对象,重写任何现有绑定。所有中间上下文和目标上下文(由该名称最终原子组件以外的其他所有组件指定)都必须已经存在。

如果该对象是一个 DirContext,则使用该对象的属性替换与该名称关联的所有现有属性。否则,与该名称关联的所有现有属性保持不变。

指定者:
接口 Context 中的 rebind
参数:
name - 要绑定的名称,不可以为空
obj - 要绑定的对象,可能为 null
抛出:
InvalidAttributesException - 如果对象不支持所有强制属性
NamingException - 如果遇到命名异常
另请参见:
Context.rebind(String, Object), Context.bind(Name, Object), DirContext.rebind(Name, Object, javax.naming.directory.Attributes), DirContext

unbind

public void unbind(String name)
            throws NamingException
从接口 Context 复制的描述
取消对指定对象的绑定。有关详细信息请参见 Context.unbind(Name)

指定者:
接口 Context 中的 unbind
参数:
name - 要取消绑定的名称,不能为空
抛出:
NameNotFoundException - 如果不存在中间上下文
NamingException - 如果遇到命名异常

unbind

public void unbind(Name name)
            throws NamingException
从接口

JDK 1.6 中文手册