java.lang.Object javax.naming.InitialContext
此类是执行命名操作的初始上下文。
所有命名操作都相对于某一上下文。该初始上下文实现 Context 接口并提供解析名称的起始点。
在构造初始上下文时,使用传递给构造方法的环境参数中以及所有应用程序资源文件中定义的属性初始化其环境。此外,可以将少数标准 JNDI 属性指定为系统属性或 applet 参数(通过使用 Context.APPLET
)。这些特殊属性列于 Context 和 LdapContext 接口文档的字段详细信息部分。
JNDI 通过按顺序合并取自以下两个源的值来确定每个属性值:
初始上下文实现是在运行时确定的。默认策略使用环境属性 "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 实例的线程应该在它们之间实现同步并提供必需的锁定。
Context
,
NamingManager.setInitialContextFactoryBuilder
字段摘要 | |
---|---|
protected Context |
defaultInitCtx 该字段保存调用 NamingManager.getInitialContext() 的结果。 |
protected boolean |
gotDefault 该字段指示是否已通过调用 NamingManager.getInitialContext() 获得了初始上下文。 |
protected Hashtable<Object,Object> |
myProps 与此 InitialContext 关联的环境。 |
构造方法摘要 | |
---|---|
|
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
|
doLookup(Name name) 获取指定对象的静态方法。 |
|
static
|
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 |
字段详细信息 |
---|
protected Hashtable<Object,Object> myProps
protected Context defaultInitCtx
getDefaultInitCtx()
protected boolean gotDefault
defaultInitCtx
中。
构造方法详细信息 |
---|
protected InitialContext(boolean lazy) throws NamingException
lazy
- 为 true 表示不初始化该初始上下文;为 false 等效于调用
new InitialContext()
NamingException
- 如果遇到命名异常
init(Hashtable)
public InitialContext() throws NamingException
NamingException
- 如果遇到命名异常
InitialContext(Hashtable)
public InitialContext(Hashtable<?,?> environment) throws NamingException
此构造方法不会修改 environment 或保存一个对它的引用,但可能保存一个副本。
environment
- 用来创建初始上下文的环境。null 指示一个空环境。
NamingException
- 如果遇到命名异常
方法详细信息 |
---|
protected void init(Hashtable<?,?> environment) throws NamingException
此方法将修改 environment 并保存一个对它的引用。调用者可能不再修改它。
environment
- 用来创建初始上下文的环境。null 指示一个空环境。
NamingException
- 如果遇到命名异常
InitialContext(boolean)
public static <T> T doLookup(Name name) throws NamingException
InitialContext ic = new InitialContext(); Object obj = ic.lookup();
如果 name 为空,则返回此上下文的一个新实例(该实例表示与此上下文相同的命名上下文,但可以独立地修改其环境,并可以并发地访问)。
name
- 要查找的对象名称
NamingException
- 如果遇到命名异常
doLookup(String)
,
lookup(Name)
public static <T> T doLookup(String name) throws NamingException
doLookup(Name)
。
name
- 要查找的对象名称
NamingException
- 如果遇到命名异常
protected Context getDefaultInitCtx() throws NamingException
NamingManager.getInitialContext()
获取初始上下文,并将它缓存在 defaultInitCtx 中。设置
gotDefault
,说明已执行过此操作。
NoInitialContextException
- 如果无法找到初始上下文。
NamingException
- 如果遇到命名异常。
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
)
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
)
public Object lookup(String name) throws NamingException
Context
复制的描述
Context.lookup(Name)
。
name
- 要查询的对象的名称
NamingException
- 如果遇到命名异常
public Object lookup(Name name) throws NamingException
Context
复制的描述
name
- 要查询的对象的名称
NamingException
- 如果遇到命名异常
Context.lookup(String)
,
Context.lookupLink(Name)
public void bind(String name, Object obj) throws NamingException
Context
复制的描述
Context.bind(Name, Object)
。
name
- 要绑定的名称,不可以为空
obj
- 要绑定的对象,可能为 null
NameAlreadyBoundException
- 如果已经绑定了 name
InvalidAttributesException
- 如果对象不支持所有强制属性
NamingException
- 如果遇到命名异常
public void bind(Name name, Object obj) throws NamingException
Context
复制的描述
name
- 要绑定的名称,不可以为空
obj
- 要绑定的对象,可能为 null
NameAlreadyBoundException
- 如果已经绑定了 name
InvalidAttributesException
- 如果对象不支持所有强制属性
NamingException
- 如果遇到命名异常
Context.bind(String, Object)
,
Context.rebind(Name, Object)
,
DirContext.bind(Name, Object, javax.naming.directory.Attributes)
public void rebind(String name, Object obj) throws NamingException
Context
复制的描述
Context.rebind(Name, Object)
。
name
- 要绑定的名称,不可以为空
obj
- 要绑定的对象,可能为 null
InvalidAttributesException
- 如果对象不支持所有强制属性
NamingException
- 如果遇到命名异常
public void rebind(Name name, Object obj) throws NamingException
Context
复制的描述
如果该对象是一个 DirContext,则使用该对象的属性替换与该名称关联的所有现有属性。否则,与该名称关联的所有现有属性保持不变。
name
- 要绑定的名称,不可以为空
obj
- 要绑定的对象,可能为 null
InvalidAttributesException
- 如果对象不支持所有强制属性
NamingException
- 如果遇到命名异常
Context.rebind(String, Object)
,
Context.bind(Name, Object)
,
DirContext.rebind(Name, Object, javax.naming.directory.Attributes)
,
DirContext
public void unbind(String name) throws NamingException
Context
复制的描述
Context.unbind(Name)
。
name
- 要取消绑定的名称,不能为空
NameNotFoundException
- 如果不存在中间上下文
NamingException
- 如果遇到命名异常
public void unbind(Name name) throws NamingException