- 所有已实现的接口:
Context
- 已知子类:
InitialDirContext
所有命名操作都与上下文相关。初始上下文实现 Context 接口并提供名称解析的起点。
构造初始上下文时,其环境会使用传递给构造函数的环境参数以及任何 应用程序资源文件 中定义的属性进行初始化。
JNDI 通过按顺序合并来自以下两个来源的值来确定每个属性的值:
- 第一次出现的属性来自构造方法的环境参数和系统属性。
- 应用程序资源文件 (
jndi.properties
)。
Context
),则所有值都将连接到一个以冒号分隔的列表中。对于其他属性,仅使用找到的第一个值。
初始上下文实现在运行时确定。默认策略使用环境属性“java.naming.factory.initial
”,其中包含初始上下文工厂的类名。如下所述,在解析 URL 字符串时会出现此策略的例外情况。
当 URL 字符串(形式为 scheme_id:rest_of_name 的 String
)作为名称参数传递给任何方法时,用于处理该方案的 URL 上下文工厂将被定位并用于解析 URL。如果找不到这样的工厂,则使用 "java.naming.factory.initial"
指定的初始上下文。类似地,当第一个组件是 URL 字符串的 CompositeName
对象作为名称参数传递给任何方法时,将找到一个 URL 上下文工厂并将其用于解析名字组件。请参阅 NamingManager.getURLContext()
了解 URL 上下文工厂的定位方式。
这种定位初始上下文和 URL 上下文工厂的默认策略可以通过调用 NamingManager.setInitialContextFactoryBuilder()
来覆盖。
当无法实例化初始上下文时抛出 NoInitialContextException。此异常可以在与 InitialContext 的任何交互期间抛出,而不仅仅是在构造 InitialContext 时抛出。例如,初始上下文的实现可能仅在调用实际方法时才延迟检索上下文。应用程序不应依赖于何时确定初始上下文的存在。
当环境属性“java.naming.factory.initial”为非空时,InitialContext 构造方法将尝试创建其中指定的初始上下文。那时,如果遇到问题,涉及的初始上下文工厂可能会抛出异常。但是,当它验证并向初始上下文的用户指示任何与环境属性或连接相关的问题时,它依赖于提供者实现。它可以懒惰地这样做——延迟到对上下文执行操作,或者急切地,在构建上下文时。
InitialContext 实例与多个线程的并发访问不同步。每个操作不同 InitialContext 实例的多个线程不需要同步。需要同时访问单个 InitialContext 实例的线程应该在它们之间同步并提供必要的锁定。
- 自从:
- 1.3, JNDI 1.1
- 参见:
-
字段摘要
字段修饰符和类型Field描述protected Context
保存调用 NamingManager.getInitialContext() 的结果的字段。protected boolean
指示是否已通过调用 NamingManager.getInitialContext() 获取初始上下文的字段。与此 InitialContext 关联的环境。 -
构造方法总结
构造方法修饰符构造方法描述构造初始上下文。protected
InitialContext
(boolean lazy) 构造一个初始上下文,并可选择不对其进行初始化。InitialContext
(Hashtable<?, ?> environment) 使用提供的环境构造初始上下文。 -
方法总结
修饰符和类型方法描述addToEnvironment
(String propName, Object propVal) 将新的环境属性添加到此上下文的环境中。void
将名称绑定到对象。void
将名称绑定到对象。void
close()
关闭此上下文。composeName
(String name, String prefix) 将此上下文的名称与相对于此上下文的名称组合在一起。composeName
(Name name, Name prefix) 将此上下文的名称与相对于此上下文的名称组合在一起。createSubcontext
(String name) 创建并绑定一个新的上下文。createSubcontext
(Name name) 创建并绑定一个新的上下文。void
destroySubcontext
(String name) 销毁命名上下文并将其从命名空间中删除。void
destroySubcontext
(Name name) 销毁命名上下文并将其从命名空间中删除。static <T> T
检索命名对象的静态方法。static <T> T
检索命名对象的静态方法。protected Context
通过调用NamingManager.getInitialContext()
检索初始上下文并将其缓存在 defaultInitCtx 中。Hashtable<?,
?> 检索对此上下文有效的环境。在其自己的命名空间中检索此上下文的全名。getNameParser
(String name) 检索与命名上下文关联的解析器。getNameParser
(Name name) 检索与命名上下文关联的解析器。protected Context
getURLOrDefaultInitCtx
(String name) 检索用于解析字符串名称name
的上下文。protected Context
getURLOrDefaultInitCtx
(Name name) 检索用于解析name
的上下文。protected void
使用提供的环境初始化初始上下文。枚举命名上下文中绑定的名称,以及绑定到它们的对象的类名。枚举命名上下文中绑定的名称,以及绑定到它们的对象的类名。listBindings
(String name) 枚举命名上下文中绑定的名称,以及绑定到它们的对象。listBindings
(Name name) 枚举命名上下文中绑定的名称,以及绑定到它们的对象。检索命名对象。检索命名对象。lookupLink
(String name) 检索命名对象,除了名称的终端原子组件之外的链接。lookupLink
(Name name) 检索命名对象,除了名称的终端原子组件之外的链接。void
将名称绑定到对象,重写任何现有绑定。void
将名称绑定到对象,重写任何现有绑定。removeFromEnvironment
(String propName) 从此上下文的环境中删除环境属性。void
将新名称绑定到绑定到旧名称的对象,并取消绑定旧名称。void
将新名称绑定到绑定到旧名称的对象,并取消绑定旧名称。void
解除绑定命名对象。void
解除绑定命名对象。
-
字段详细信息
-
myProps
与此 InitialContext 关联的环境。它被初始化为 null 并由接受环境的构造函数或init()
方法更新。- 参见:
-
defaultInitCtx
保存调用 NamingManager.getInitialContext() 的结果的字段。它在第一次调用 getDefaultInitCtx() 时由 getDefaultInitCtx() 设置。 getDefaultInitCtx() 的后续调用返回 defaultInitCtx 的值。- 参见:
-
gotDefault
protected boolean gotDefault指示是否已通过调用 NamingManager.getInitialContext() 获取初始上下文的字段。如果为真,其结果在defaultInitCtx
中。
-
-
构造方法详细信息
-
InitialContext
构造一个初始上下文,并可选择不对其进行初始化。当调用InitialContext
构造函数时环境参数的值未知时,子类中的构造函数可能会使用它。子类的构造函数将调用此构造函数,计算环境值,然后在返回前调用init()
。- 参数:
lazy
- true 表示不初始化初始上下文; false 相当于调用new InitialContext()
- 抛出:
NamingException
- 如果遇到命名异常- 自从:
- 1.3
- 参见:
-
InitialContext
构造初始上下文。没有提供环境属性。相当于new InitialContext(null)
。- 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
InitialContext
使用提供的环境构造初始上下文。类描述中讨论了环境属性。此构造函数不会修改
environment
或保存对它的引用,但可能会保存一个克隆。environment
传递给构造函数后,调用者不应修改可变键和值。- 参数:
environment
- 用于创建初始上下文的环境。 Null 表示空环境。- 抛出:
NamingException
- 如果遇到命名异常
-
-
方法详情
-
init
使用提供的环境初始化初始上下文。类描述中讨论了环境属性。此方法将修改
environment
并保存对它的引用。调用者可能不再修改它。- 参数:
environment
- 用于创建初始上下文的环境。 Null 表示空环境。- 抛出:
NamingException
- 如果遇到命名异常- 自从:
- 1.3
- 参见:
-
doLookup
检索命名对象的静态方法。这是一个相当于调用的快捷方法:InitialContext ic = new InitialContext(); Object obj = ic.lookup();
如果
name
为空,则返回此上下文的新实例(表示与此上下文相同的命名上下文,但其环境可能会被独立修改,并且可能会被并发访问)。- 类型参数:
T
- 返回对象的类型- 参数:
name
- 要查找的对象的名称- 返回:
-
绑定到
name
的对象 - 抛出:
NamingException
- 如果遇到命名异常- 自从:
- 1.6
- 参见:
-
doLookup
检索命名对象的静态方法。有关详细信息,请参阅doLookup(Name)
。- 类型参数:
T
- 返回对象的类型- 参数:
name
- 要查找的对象的名称- 返回:
-
绑定到
name
的对象 - 抛出:
NamingException
- 如果遇到命名异常- 自从:
- 1.6
-
getDefaultInitCtx
通过调用NamingManager.getInitialContext()
检索初始上下文并将其缓存在 defaultInitCtx 中。设置gotDefault
以便我们知道我们之前已经尝试过。- 返回:
- 非空缓存的初始上下文。
- 抛出:
NoInitialContextException
- 如果找不到初始上下文。NamingException
- 如果遇到命名异常。
-
getURLOrDefaultInitCtx
检索用于解析字符串名称name
的上下文。如果name
name 是 URL 字符串,则尝试为其查找 URL 上下文。如果没有找到,或者如果name
不是 URL 字符串,则返回getDefaultInitCtx()
。有关子类应如何使用此方法的说明,请参阅 getURLOrDefaultInitCtx(Name)。
- 参数:
name
- 要为其获取上下文的非空名称。- 返回:
name
的 URL 上下文或缓存的初始上下文。结果不能为空。- 抛出:
NoInitialContextException
- 如果找不到初始上下文。NamingException
- 遇到命名异常。- 参见:
-
getURLOrDefaultInitCtx
检索用于解析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
- 要为其获取上下文的非空名称。- 返回:
name
的 URL 上下文或缓存的初始上下文。结果不能为空。- 抛出:
NoInitialContextException
- 如果找不到初始上下文。NamingException
- 遇到命名异常。- 参见:
-
lookup
从接口Context
复制的描述检索命名对象。有关详细信息,请参阅Context.lookup(Name)
。- 指定者:
lookup
在接口Context
中- 参数:
name
- 要查找的对象的名称- 返回:
-
绑定到
name
的对象 - 抛出:
NamingException
- 如果遇到命名异常
-
lookup
从接口Context
复制的描述检索命名对象。如果name
为空,则返回此上下文的新实例(表示与此上下文相同的命名上下文,但其环境可能会被独立修改,并且可能会被并发访问)。- 指定者:
lookup
在接口Context
中- 参数:
name
- 要查找的对象的名称- 返回:
-
绑定到
name
的对象 - 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
bind
从接口Context
复制的描述将名称绑定到对象。有关详细信息,请参阅Context.bind(Name, Object)
。- 指定者:
bind
在接口Context
中- 参数:
name
- 要绑定的名称;可能不为空obj
- 要绑定的对象;可能为空- 抛出:
NameAlreadyBoundException
- 如果名称已经绑定InvalidAttributesException
- 如果对象没有提供所有强制属性NamingException
- 如果遇到命名异常
-
bind
从接口Context
复制的描述将名称绑定到对象。所有中间上下文和目标上下文(由名称的终端原子组件以外的所有内容命名)必须已经存在。- 指定者:
bind
在接口Context
中- 参数:
name
- 要绑定的名称;可能不为空obj
- 要绑定的对象;可能为空- 抛出:
NameAlreadyBoundException
- 如果名称已经绑定InvalidAttributesException
- 如果对象没有提供所有强制属性NamingException
- 如果遇到命名异常- 参见:
-
rebind
从接口Context
复制的描述将名称绑定到对象,覆盖任何现有绑定。有关详细信息,请参阅Context.rebind(Name, Object)
。- 指定者:
rebind
在接口Context
中- 参数:
name
- 要绑定的名称;可能不为空obj
- 要绑定的对象;可能为空- 抛出:
InvalidAttributesException
- 如果对象没有提供所有强制属性NamingException
- 如果遇到命名异常
-
rebind
从接口Context
复制的描述将名称绑定到对象,重写任何现有绑定。所有中间上下文和目标上下文(由名称的终端原子组件以外的所有内容命名)必须已经存在。如果对象是
DirContext
,则与名称关联的任何现有属性都将替换为对象的属性。否则,与名称关联的任何现有属性都保持不变。- 指定者:
rebind
在接口Context
中- 参数:
name
- 要绑定的名称;可能不为空obj
- 要绑定的对象;可能为空- 抛出:
InvalidAttributesException
- 如果对象没有提供所有强制属性NamingException
- 如果遇到命名异常- 参见:
-
unbind
从接口Context
复制的描述解除绑定命名对象。有关详细信息,请参阅Context.unbind(Name)
。- 指定者:
unbind
在接口Context
中- 参数:
name
- 要解除绑定的名称;可能不为空- 抛出:
NameNotFoundException
- 如果中间上下文不存在NamingException
- 如果遇到命名异常
-
unbind
从接口Context
复制的描述解除绑定命名对象。从目标上下文中删除name
中的终端原子名称——除了name
的终端原子部分之外的所有名称。这个方法是幂等的。即使终端原子名称未绑定到目标上下文中,它也会成功,但如果任何中间上下文不存在,则会抛出
NameNotFoundException
。与名称关联的任何属性都将被删除。中间上下文没有改变。
- 指定者:
unbind
在接口Context
中- 参数:
name
- 要解除绑定的名称;可能不为空- 抛出:
NameNotFoundException
- 如果中间上下文不存在NamingException
- 如果遇到命名异常- 参见:
-
rename
从接口Context
复制的描述将新名称绑定到绑定到旧名称的对象,并取消绑定旧名称。有关详细信息,请参阅Context.rename(Name, Name)
。- 指定者:
rename
在接口Context
中- 参数:
oldName
- 现有绑定的名称;可能不为空newName
- 新绑定的名称;可能不为空- 抛出:
NameAlreadyBoundException
- 如果newName
已经绑定NamingException
- 如果遇到命名异常
-
rename
从接口Context
复制的描述将新名称绑定到绑定到旧名称的对象,并取消绑定旧名称。这两个名称都与此上下文有关。与旧名称相关联的任何属性都将与新名称相关联。旧名称的中间上下文不会更改。- 指定者:
rename
在接口Context
中- 参数:
oldName
- 现有绑定的名称;可能不为空newName
- 新绑定的名称;可能不为空- 抛出:
NameAlreadyBoundException
- 如果newName
已经绑定NamingException
- 如果遇到命名异常- 参见:
-
list
从接口Context
复制的描述枚举命名上下文中绑定的名称,以及绑定到它们的对象的类名。有关详细信息,请参阅Context.list(Name)
。- 指定者:
list
在接口Context
中- 参数:
name
- 要列出的上下文的名称- 返回:
-
此上下文中绑定的名称和类名称的枚举。枚举的每个元素都是
NameClassPair
类型。 - 抛出:
NamingException
- 如果遇到命名异常
-
list
从接口Context
复制的描述枚举命名上下文中绑定的名称,以及绑定到它们的对象的类名。不包括任何子上下文的内容。如果将绑定添加到此上下文或从中删除,则其对先前返回的枚举的影响是未定义的。
- 指定者:
list
在接口Context
中- 参数:
name
- 要列出的上下文的名称- 返回:
-
此上下文中绑定的名称和类名称的枚举。枚举的每个元素都是
NameClassPair
类型。 - 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
listBindings
从接口Context
复制的描述枚举命名上下文中绑定的名称,以及绑定到它们的对象。有关详细信息,请参阅Context.listBindings(Name)
。- 指定者:
listBindings
在接口Context
中- 参数:
name
- 要列出的上下文的名称- 返回:
-
此上下文中绑定的枚举。枚举的每个元素都是
Binding
类型。 - 抛出:
NamingException
- 如果遇到命名异常
-
listBindings
从接口Context
复制的描述枚举命名上下文中绑定的名称,以及绑定到它们的对象。不包括任何子上下文的内容。如果将绑定添加到此上下文或从中删除,则其对先前返回的枚举的影响是未定义的。
- 指定者:
listBindings
在接口Context
中- 参数:
name
- 要列出的上下文的名称- 返回:
-
此上下文中绑定的枚举。枚举的每个元素都是
Binding
类型。 - 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
destroySubcontext
从接口Context
复制的描述销毁命名上下文并将其从命名空间中删除。有关详细信息,请参阅Context.destroySubcontext(Name)
。- 指定者:
destroySubcontext
在接口Context
中- 参数:
name
- 要销毁的上下文的名称;可能不为空- 抛出:
NameNotFoundException
- 如果中间上下文不存在NotContextException
- 如果名称已绑定但未命名上下文,或未命名适当类型的上下文ContextNotEmptyException
- 如果命名上下文不为空NamingException
- 如果遇到命名异常
-
destroySubcontext
从接口Context
复制的描述销毁命名上下文并将其从命名空间中删除。与该名称关联的任何属性也将被删除。中间上下文不会被破坏。这个方法是幂等的。即使终端原子名称未绑定到目标上下文中,它也会成功,但如果任何中间上下文不存在,则会抛出
NameNotFoundException
。在联合命名系统中,来自一个命名系统的上下文可以绑定到另一个命名系统中的名称。随后可以使用复合名称查找外部上下文并对其执行操作。但是,使用此复合名称破坏上下文的尝试将失败并返回
NotContextException
,因为外部上下文不是它所绑定的上下文的“子上下文”。相反,使用unbind()
删除外部上下文的绑定。销毁外部上下文需要destroySubcontext()
在来自外部上下文的“本地”命名系统的上下文上执行。- 指定者:
destroySubcontext
在接口Context
中- 参数:
name
- 要销毁的上下文的名称;可能不为空- 抛出:
NameNotFoundException
- 如果中间上下文不存在NotContextException
- 如果名称已绑定但未命名上下文,或未命名适当类型的上下文ContextNotEmptyException
- 如果命名上下文不为空NamingException
- 如果遇到命名异常- 参见:
-
createSubcontext
从接口Context
复制的描述创建并绑定一个新的上下文。有关详细信息,请参阅Context.createSubcontext(Name)
。- 指定者:
createSubcontext
在接口Context
中- 参数:
name
- 要创建的上下文的名称;可能不为空- 返回:
- 新创建的上下文
- 抛出:
NameAlreadyBoundException
- 如果名称已经绑定InvalidAttributesException
- 如果创建子上下文需要指定强制属性NamingException
- 如果遇到命名异常
-
createSubcontext
从接口Context
复制的描述创建并绑定一个新的上下文。使用给定的名称创建一个新上下文并将其绑定到目标上下文(由名称的终端原子组件以外的所有内容命名)。所有中间上下文和目标上下文必须已经存在。- 指定者:
createSubcontext
在接口Context
中- 参数:
name
- 要创建的上下文的名称;可能不为空- 返回:
- 新创建的上下文
- 抛出:
NameAlreadyBoundException
- 如果名称已经绑定InvalidAttributesException
- 如果创建子上下文需要指定强制属性NamingException
- 如果遇到命名异常- 参见:
-
lookupLink
从接口Context
复制的描述检索命名对象,除了名称的终端原子组件之外的链接。有关详细信息,请参阅Context.lookupLink(Name)
。- 指定者:
lookupLink
在接口Context
中- 参数:
name
- 要查找的对象的名称- 返回:
-
绑定到
name
的对象,不遵循终端链接(如果有) - 抛出:
NamingException
- 如果遇到命名异常
-
lookupLink
从接口Context
复制的描述检索命名对象,除了名称的终端原子组件之外的链接。如果绑定到name
的对象不是链接,则返回对象本身。- 指定者:
lookupLink
在接口Context
中- 参数:
name
- 要查找的对象的名称- 返回:
-
绑定到
name
的对象,不遵循终端链接(如果有)。 - 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
getNameParser
从接口Context
复制的描述检索与命名上下文关联的解析器。有关详细信息,请参阅Context.getNameParser(Name)
。- 指定者:
getNameParser
在接口Context
中- 参数:
name
- 从中获取解析器的上下文的名称- 返回:
- 可以将复合名称解析为其原子组件的名称解析器
- 抛出:
NamingException
- 如果遇到命名异常
-
getNameParser
从接口Context
复制的描述检索与命名上下文关联的解析器。在命名空间联合中,不同的命名系统将以不同的方式解析名称。此方法允许应用程序获取解析器,以使用特定命名系统的命名约定将名称解析为其原子组件。在任何单一命名系统中,此方法返回的NameParser
对象必须相等(使用equals()
测试)。- 指定者:
getNameParser
在接口Context
中- 参数:
name
- 从中获取解析器的上下文的名称- 返回:
- 可以将复合名称解析为其原子组件的名称解析器
- 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
composeName
将此上下文的名称与相对于此上下文的名称组合在一起。由于初始上下文可能永远不会相对于除自身以外的任何上下文命名,因此prefix
参数的值必须为空名称 (""
)。- 指定者:
composeName
在接口Context
中- 参数:
name
- 相对于此上下文的名称prefix
- 此上下文相对于其祖先之一的名称- 返回:
prefix
和name
的组成- 抛出:
NamingException
- 如果遇到命名异常
-
composeName
将此上下文的名称与相对于此上下文的名称组合在一起。由于初始上下文可能永远不会相对于除自身以外的任何上下文命名,因此prefix
参数的值必须为空名称。- 指定者:
composeName
在接口Context
中- 参数:
name
- 相对于此上下文的名称prefix
- 此上下文相对于其祖先之一的名称- 返回:
prefix
和name
的组成- 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
addToEnvironment
从接口Context
复制的描述将新的环境属性添加到此上下文的环境中。如果该属性已存在,则其值将被重写。有关环境属性的更多详细信息,请参阅类描述。- 指定者:
addToEnvironment
在接口Context
中- 参数:
propName
- 要添加的环境属性的名称;不能为空propVal
- 要添加的属性的值;不能为空- 返回:
- 该属性的先前值,如果该属性之前不在环境中,则为 null
- 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
removeFromEnvironment
从接口Context
复制的描述从此上下文的环境中删除环境属性。有关环境属性的更多详细信息,请参阅类描述。- 指定者:
removeFromEnvironment
在接口Context
中- 参数:
propName
- 要删除的环境属性的名称;不能为空- 返回:
- 属性的先前值,如果属性不在环境中则为 null
- 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
getEnvironment
从接口Context
复制的描述检索对此上下文有效的环境。有关环境属性的更多详细信息,请参阅类描述。调用者不应对返回的对象进行任何更改:它们对上下文的影响是未定义的。可以使用
addToEnvironment()
和removeFromEnvironment()
更改此上下文的环境。- 指定者:
getEnvironment
在接口Context
中- 返回:
- 这个上下文的环境;永不为空
- 抛出:
NamingException
- 如果遇到命名异常- 参见:
-
close
从接口Context
复制的描述关闭此上下文。此方法立即释放此上下文的资源,而不是等待它们被垃圾收集器自动释放。此方法是幂等的:在已经关闭的上下文中调用它没有任何效果。不允许在封闭的上下文中调用任何其他方法,这会导致未定义的行为。
- 指定者:
close
在接口Context
中- 抛出:
NamingException
- 如果遇到命名异常
-
getNameInNamespace
从接口Context
复制的描述在其自己的命名空间中检索此上下文的全名。许多命名服务在各自的命名空间中都有一个对象的“全名”概念。例如,LDAP 条目具有专有名称,而 DNS 记录具有完全限定名称。此方法允许客户端应用程序检索此名称。此方法返回的字符串不是 JNDI 复合名称,不应直接传递给上下文方法。在全名概念没有意义的命名系统中,抛出
OperationNotSupportedException
。- 指定者:
getNameInNamespace
在接口Context
中- 返回:
- 此上下文在其自己的命名空间中的名称;永不为空
- 抛出:
OperationNotSupportedException
- 如果命名系统没有全名的概念NamingException
- 如果遇到命名异常
-