|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
java.lang.Objectjavax.naming.InitialContext
public class 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
addToEnvironment(java.lang.String, java.lang.Object),
removeFromEnvironment(java.lang.String),
getEnvironment()
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)。
Context 中的
lookup
name - 要查询的对象的名称
NamingException - 如果遇到命名异常
public Object lookup(Name name)
throws NamingException
Context 复制的描述
Context 中的
lookup
name - 要查询的对象的名称
NamingException - 如果遇到命名异常
Context.lookup(String),
Context.lookupLink(Name)
public void bind(String name,
Object obj)
throws NamingException
Context 复制的描述
Context.bind(Name, Object)。
Context 中的
bind
name - 要绑定的名称,不可以为空
obj - 要绑定的对象,可能为 null
NameAlreadyBoundException - 如果已经绑定了 name
InvalidAttributesException - 如果对象不支持所有强制属性
NamingException - 如果遇到命名异常
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)
public void rebind(String name,
Object obj)
throws NamingException
Context 复制的描述
Context.rebind(Name, Object)。
Context 中的
rebind
name - 要绑定的名称,不可以为空
obj - 要绑定的对象,可能为 null
InvalidAttributesException - 如果对象不支持所有强制属性
NamingException - 如果遇到命名异常
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
public void unbind(String name)
throws NamingException
Context 复制的描述
Context.unbind(Name)。
Context 中的
unbind
name - 要取消绑定的名称,不能为空
NameNotFoundException - 如果不存在中间上下文
NamingException - 如果遇到命名异常
public void unbind(Name name)
throws NamingException
Context 复制的描述
name 的最终原子名称,目标上下文由
name 的最终原子部分以外的所有名称指定。
此方法是幂等的 (idempotent)。即使最终原子名称没有绑定在目标上下文中,该操作也能成功,但如果不存在任何中间上下文,则将抛出 NameNotFoundException。
所有与该名称关联的属性都被移除。不更改中间上下文。
Context 中的
unbind
name - 要取消绑定的名称,不能为空
NameNotFoundException - 如果不存在中间上下文
NamingException - 如果遇到命名异常
Context.unbind(String)
public void rename(String oldName,
String newName)
throws NamingException
Context 复制的描述
Context.rename(Name, Name)。
Context 中的
rename
oldName - 现有绑定的名称,不能为空
newName - 新绑定的名称,不能为空
NameAlreadyBoundException - 如果已经绑定了
newName
NamingException - 如果遇到命名异常
public void rename(Name oldName,
Name newName)
throws NamingException
Context 复制的描述
Context 中的
rename
oldName - 现有绑定的名称,不能为空
newName - 新绑定的名称,不能为空
NameAlreadyBoundException - 如果已经绑定了
newName
NamingException - 如果遇到命名异常
Context.rename(String, String),
Context.bind(Name, Object),
Context.rebind(Name, Object)
public NamingEnumeration<NameClassPair> list(String name)
throws NamingException
Context 复制的描述
Context.list(Name)。
Context 中的
list
name - 要列出的上下文的名称
NamingException - 如果遇到命名异常
public NamingEnumeration<NameClassPair> list(Name name)
throws NamingException
Context 复制的描述
如果将某一绑定添加到此上下文,或者从此上下文中移除某个绑定,则对以前返回的枚举的影响是不确定的。
Context 中的
list
name - 要列出的上下文的名称
NamingException - 如果遇到命名异常
Context.list(String),
Context.listBindings(Name),
NameClassPair
public NamingEnumeration<Binding> listBindings(String name)
throws NamingException
Context 复制的描述
Context.listBindings(Name)。
Context 中的
listBindings
name - 要列出的上下文的名称
NamingException - 如果遇到命名异常
public NamingEnumeration<Binding> listBindings(Name name)
throws NamingException
Context 复制的描述
如果将某一绑定添加到此上下文,或者从此上下文中移除某个绑定,则对以前返回的枚举的影响是不确定的。
Context 中的
listBindings
name - 要列出的上下文的名称
NamingException - 如果遇到命名异常
Context.listBindings(String),
Context.list(Name),
Binding
public void destroySubcontext(String name)
throws NamingException
Context 复制的描述
Context.destroySubcontext(Name)。
Context 中的
destroySubcontext
name - 要销毁的上下文的名称,不能为空
NameNotFoundException - 如果不存在中间上下文
NotContextException - 如果该名称被绑定,但它没有指定一个上下文,或者它没有指定适当类型的上下文
ContextNotEmptyException - 如果指定的上下文不为空
NamingException - 如果遇到命名异常
public void destroySubcontext(Name name)
throws NamingException
Context 复制的描述
此方法是幂等的。即使最终原子名称没有绑定在目标上下文中,该操作也能成功,但如果不存在任何中间上下文,则将抛出 NameNotFoundException。
在联合命名系统中,取自某一命名系统的上下文可以绑定到另一个命名系统中的名称上。随后可以使用复合名称在外部上下文 (foreign context) 中查询和执行操作。不过,试图使用此复合名称销毁上下文将失败并抛出 NotContextException,因为外部上下文不是绑定该复合名称的上下文的子上下文。改为使用 unbind() 移除外部上下文的绑定。销毁外部上下文需要对取自该外部上下文的“本机”命名系统的上下文执行 destroySubcontext()。
Context 中的
destroySubcontext
name - 要销毁的上下文的名称,不能为空
NameNotFoundException - 如果不存在中间上下文
NotContextException - 如果该名称被绑定,但它没有指定一个上下文,或者它没有指定适当类型的上下文
ContextNotEmptyException - 如果指定的上下文不为空
NamingException - 如果遇到命名异常
Context.destroySubcontext(String)
public Context createSubcontext(String name)
throws NamingException
Context 复制的描述
Context.createSubcontext(Name)。
Context 中的
createSubcontext
name - 要创建的上下文的名称,不能为空
NameAlreadyBoundException - 如果已经绑定了 name
InvalidAttributesException - 如果创建子上下文需要指定强制属性
NamingException - 如果遇到命名异常
public Context createSubcontext(Name name)
throws NamingException
Context 复制的描述
Context 中的
createSubcontext
name - 要创建的上下文的名称,不能为空
NameAlreadyBoundException - 如果已经绑定了 name
InvalidAttributesException - 如果创建子上下文需要指定强制属性
NamingException - 如果遇到命名异常
Context.createSubcontext(String),
DirContext.createSubcontext(javax.naming.Name, javax.naming.directory.Attributes)
public Object lookupLink(String name)
throws NamingException
Context 复制的描述
Context.lookupLink(Name)。
Context 中的
lookupLink
name - 要查询的对象的名称
NamingException - 如果遇到命名异常
public Object lookupLink(Name name)
throws NamingException
Context 复制的描述
Context 中的
lookupLink
name - 要查询的对象的名称
NamingException - 如果遇到命名异常
Context.lookupLink(String)
public NameParser getNameParser(String name)
throws NamingException
Context 复制的描述
Context.getNameParser(Name)。
Context 中的
getNameParser
name - 从中获得解析器的上下文的名称
NamingException - 如果遇到命名异常
public NameParser getNameParser(Name name)
throws NamingException
Context 复制的描述
Context 中的
getNameParser
name - 从中获得解析器的上下文的名称
NamingException - 如果遇到命名异常
Context.getNameParser(String),
CompoundName
public String composeName(String name,
String prefix)
throws NamingException
Context 中的
composeName
name - 相对于此上下文的名称
prefix - 此上下文相对于其一个祖先的名称
prefix 和
name 的组合
NamingException - 如果遇到命名异常
public Name composeName(Name name,
Name prefix)
throws NamingException
Context 中的
composeName
name - 相对于此上下文的名称
prefix - 此上下文相对于其一个祖先的名称
prefix 和
name 的组合
NamingException - 如果遇到命名异常
Context.composeName(String, String)
public Object addToEnvironment(String propName,
Object propVal)
throws NamingException
Context 复制的描述
Context 中的
addToEnvironment
propName - 要添加的环境属性的名称,不能为 null
propVal - 要添加的属性的值,不能为 null
NamingException - 如果遇到命名异常
Context.getEnvironment(),
Context.removeFromEnvironment(String)
public Object removeFromEnvironment(String propName)
throws NamingException
Context 复制的描述
Context 中的
removeFromEnvironment
propName - 要移除的环境属性的名称,不能为 null
NamingException - 如果遇到命名异常
Context.getEnvironment(),
Context.addToEnvironment(String, Object)
public Hashtable<?,?> getEnvironment()
throws NamingException
Context 复制的描述
调用者不应对返回的对象进行任何更改:因为这些更改对于上下文的影响是不确定的。可以使用 addToEnvironment() 和 removeFromEnvironment() 更改此上下文的环境。
Context 中的
getEnvironment
NamingException - 如果遇到命名异常
Context.addToEnvironment(String, Object),
Context.removeFromEnvironment(String)
public void close()
throws NamingException
Context 复制的描述
此方法是幂等的:对已经关闭的上下文调用此方法无效。对已关闭的上下文调用其他任何方法都是不允许的,这会导致不确定的行为。
Context 中的
close
NamingException - 如果遇到命名异常
public String getNameInNamespace()
throws NamingException
Context 复制的描述
许多命名服务都有一个“完全名称”的概念,用于其各自的名称空间中的对象。例如,LDAP 项有一个独特的名称,而 DNS 记录有一个完全限定名。此方法允许客户端应用程序检索此名称。此方法返回的字符串不是一个 JNDI 复合名称,不应将它直接传递给上下文方法。在没有完全名称概念的命名系统中,将抛出 OperationNotSupportedException。
Context 中的
getNameInNamespace
OperationNotSupportedException - 如果命名系统没有完全名称的概念
NamingException - 如果遇到命名异常
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。