public interface Context
大多数方法都有超载版本,一个使用一个Name
参数,一个采用String
。 这些重载版本是等效的,因为如果Name
和String
参数只是相同名称的不同表示,那么相同方法的重载版本行为相同。 在下面的方法描述中,只有一个版本被完整记录。 第二个版本代替了第一个链接:相同的文档适用于两者。
对于支持联合的系统,String个名称参数Context个方法是复合名称。 名称是CompositeName实例被看作是复合名称,而Name个参数不属于的CompositeName实例为化合物名称治疗(其可能是CompoundName实例或化合物名称的其它实施方式)的参数。 这样可以将NameParser.parse()的结果用作Context方法的参数。 在JNDI 1.2之前,所有的名称参数被视为复合名称。
此外,对于支持联合的系统, NamingEnumeration从list()和listBindings()返回的所有名称都是以字符串表示的复合名称。 有关名称的字符串语法,请参阅CompositeName 。
对于不支持联合的系统,名称参数(在Name或String表单中)和NamingEnumeration中返回的名称可能是其自己的命名空间中的名称,而不是复合命名空间中的名称,由服务提供商决定。
lookup
方法在传递一个空名时将返回一个表示相同命名上下文的新Context实例。
为了并发控制的目的,返回NamingEnumeration的上下文操作在枚举仍在使用中或者仍然遵循该操作生成的任何引用时,不被认为已经完成。
JNDI应用程序需要一种方式来传达定义访问命名和目录服务的环境的各种首选项和属性。 例如,上下文可能需要指定安全凭据才能访问该服务。 另一个上下文可能需要提供服务器配置信息。 这些被称为上下文的环境 。 Context接口提供检索和更新此环境的方法。
随着上下文方法从一个上下文进入下一个环境,环境是从父上下文继承的。 对一个环境的环境的改变不会直接影响其他环境的环境。
当环境属性被使用和/或验证有效性时,它是实现依赖的。 例如,服务提供商使用某些与安全性相关的属性来“登录”目录。 此登录过程可能会在上下文创建时发生,或者在上下文首次调用方法时发生。 何时,以及是否发生这种情况是依赖于实现的。 当环境属性从上下文中添加或删除时,验证更改的有效性再次取决于实现。 例如,某些属性的验证可能在更改时发生,或在下一个操作在上下文中执行时,或根本不发生。
任何具有对上下文的引用的对象都可以检查该上下文的环境。 敏感信息(如明文密码)不应存储在那里,除非已知实现保护它。
为了简化设置JNDI应用程序所需环境的任务,应用程序组件和服务提供程序可能与资源文件一起分发。 JNDI资源文件是属性文件格式的文件(请参阅java.util.Properties
),其中包含键/值对列表。 关键是属性的名称(例如“java.naming.factory.object”),该值是为该属性定义的格式的字符串。 以下是JNDI资源文件的示例:
java.naming.factory.object=com.sun.jndi.ldap.AttrsToCorba:com.wiz.from.Person java.naming.factory.state=com.sun.jndi.ldap.CorbaToAttrs:com.wiz.from.Person java.naming.factory.control=com.sun.jndi.ldap.ResponseControlFactory
JNDI类库读取资源文件,并使属性值免费使用。
因此,JNDI资源文件应该被认为是“世界可读”的,敏感信息(如明文密码)不应存储在那里。
有两种JNDI资源文件: 提供者和应用程序 。
[ prefix/] jndiprovider.properties其中, prefix是提供者的上下文实现的包名,每个句点(“。”)转换为斜杠(“/”)。 例如,假设一个服务提供者定义一个类名为com.sun.jndi.ldap.LdapCtx的上下文实现 。 此提供程序的提供程序资源名为com/sun/jndi/ldap/jndiprovider.properties 。 如果该类不在包中,则该资源的名称仅为jndiprovider.properties 。
JNDI类库中的某些方法使用指定JNDI工厂列表的标准JNDI属性:
ClassLoader.getResources()
)名为jndi.properties的所有应用程序资源文件 。
此外,如果文件java.home /lib/jndi.properties存在且可读,则JNDI将其视为其他应用程序资源文件。
( java.home表示由java.home系统属性命名的目录 。)这些文件中包含的所有属性都放置在初始上下文的环境中。
然后,这种环境由其他上下文继承。
对于在多个应用程序资源文件中找到的每个属性,JNDI使用发现的第一个值,或者在少数情况下,将其连接起来(详细信息如下)。 例如,如果在三个jndi.properties资源文件中找到“java.naming.factory.object”属性,则对象工厂列表是来自所有三个文件的属性值的连接。 使用此方案,每个可部署组件负责列出其出口的工厂。 搜索工厂类时,JNDI会自动收集并使用所有这些导出列表。
当JNDI类库需要确定一个属性的值时,它按照以下顺序合并来自以下两个来源的值:
当服务提供商需要确定属性的值时,通常会直接从环境中获取该值。 服务提供商可以将供应商特定的属性定义为放置在其自己的提供商资源文件中。 在这种情况下,它应该合并上一段所述的值。
以这种方式,每个服务提供商开发人员可以指定要与该服务提供商一起使用的工厂列表。 这些可以由应用程序或小应用程序的部署程序指定的应用程序资源修改,而应用程序或小应用程序可以由用户修改。
Modifier and Type | Field and Description |
---|---|
static String |
APPLET
包含指定用于搜索其他属性时要使用的初始上下文构造函数的小程序的环境属性的常量的常量。
|
static String |
AUTHORITATIVE
用于指定所请求的服务的权威性的环境属性的名称的常量。
|
static String |
BATCHSIZE
包含用于指定通过服务协议返回数据时使用的批量大小的环境属性名称的常量。
|
static String |
DNS_URL
持有用于指定用于JNDI URL上下文的DNS主机和域名的环境属性的名称的常量(例如“dns://somehost/wiz.com”)。
|
static String |
INITIAL_CONTEXT_FACTORY
用于指定要使用的初始上下文工厂的环境属性的名称的常量。
|
static String |
LANGUAGE
包含用于指定与服务一起使用的首选语言的环境属性名称的常量。
|
static String |
OBJECT_FACTORIES
用于指定要使用的对象工厂列表的环境属性的名称的常量。
|
static String |
PROVIDER_URL
包含用于指定服务提供商要使用的配置信息的环境属性的名称的常量。
|
static String |
REFERRAL
持有用于指定如何处理服务提供商遇到的引用的环境属性的名称的常量。
|
static String |
SECURITY_AUTHENTICATION
持有用于指定要使用的安全级别的环境属性的名称的常量。
|
static String |
SECURITY_CREDENTIALS
包含用于指定用于验证呼叫者到服务的主体的凭据的环境属性的名称的常量。
|
static String |
SECURITY_PRINCIPAL
持有用于指定主体的身份的环境属性的常量,用于验证对该服务的呼叫者。
|
static String |
SECURITY_PROTOCOL
用于指定要使用的安全协议的环境属性的名称的常量。
|
static String |
STATE_FACTORIES
用于指定要使用的状态工厂列表的环境属性的名称的常量。
|
static String |
URL_PKG_PREFIXES
持有环境属性名称的常量,用于指定在URL上下文工厂中加载时使用的包前缀列表。
|
Modifier and Type | Method and Description |
---|---|
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)
销毁命名上下文并将其从命名空间中删除。
|
Hashtable<?,?> |
getEnvironment()
检索此环境有效的环境。
|
String |
getNameInNamespace()
在其自己的命名空间中检索此上下文的全名。
|
NameParser |
getNameParser(Name name)
检索与命名上下文关联的解析器。
|
NameParser |
getNameParser(String name)
检索与命名上下文关联的解析器。
|
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)
取消绑定命名对象。
|
static final String INITIAL_CONTEXT_FACTORY
该常量的值为“java.naming.factory.initial”。
static final String OBJECT_FACTORIES
该常量的值为“java.naming.factory.object”。
static final String STATE_FACTORIES
该常量的值为“java.naming.factory.state”。
static final String URL_PKG_PREFIXES
该常量的值为“java.naming.factory.url.pkgs”。
NamingManager.getObjectInstance(java.lang.Object, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>)
, NamingManager.getURLContext(java.lang.String, java.util.Hashtable<?, ?>)
, ObjectFactory
, addToEnvironment(String, Object)
, removeFromEnvironment(String)
, APPLET
, Constant Field Values
static final String PROVIDER_URL
该常量的值为“java.naming.provider.url”。
static final String DNS_URL
该常量的值为“java.naming.dns.url”。
static final String AUTHORITATIVE
该常量的值为“java.naming.authoritative”。
static final String BATCHSIZE
该常量的值为“java.naming.batchsize”。
static final String REFERRAL
该常量的值为“java.naming.referral”。
static final String SECURITY_PROTOCOL
该常量的值为“java.naming.security.protocol”。
static final String SECURITY_AUTHENTICATION
该常量的值为“java.naming.security.authentication”。
static final String SECURITY_PRINCIPAL
该常量的值为“java.naming.security.principal”。
static final String SECURITY_CREDENTIALS
该常量的值为“java.naming.security.credentials”。
static final String LANGUAGE
该常量的值为“java.naming.language”。
static final String APPLET
该常量的值为“java.naming.applet”。
addToEnvironment(String, Object)
, removeFromEnvironment(String)
, InitialContext
, Constant Field Values
Object lookup(Name name) throws NamingException
name
- 要查找的对象的名称
NamingException
- 如果遇到命名异常
lookup(String)
,
lookupLink(Name)
Object lookup(String name) throws NamingException
lookup(Name)
。
name
- 要查找的对象的名称
NamingException
- 如果遇到命名异常
void bind(Name name, Object obj) throws NamingException
name
- 要绑定的名称
可能不是空的
obj
- 要绑定的对象;
可能为null
NameAlreadyBoundException
- 如果名称已经绑定
InvalidAttributesException
- 如果对象没有提供所有必需属性
NamingException
- 如果遇到命名异常
bind(String, Object)
,
rebind(Name, Object)
,
DirContext.bind(Name, Object, javax.naming.directory.Attributes)
void bind(String name, Object obj) throws NamingException
bind(Name, Object)
。
name
- 要绑定的名称
可能不是空的
obj
- 要绑定的对象;
可能为null
NameAlreadyBoundException
- 如果名称已经绑定
InvalidAttributesException
- 如果对象没有提供所有必需属性
NamingException
- 如果遇到命名异常
void rebind(Name name, Object obj) throws NamingException
如果对象是DirContext ,与该名称关联的任何现有属性将替换为对象的属性。 否则,与名称关联的任何现有属性都保持不变。
name
- 要绑定的名称
可能不是空的
obj
- 要绑定的对象;
可能为null
InvalidAttributesException
- 如果对象没有提供所有必需属性
NamingException
- 如果遇到命名异常
rebind(String, Object)
, bind(Name, Object)
, DirContext.rebind(Name, Object, javax.naming.directory.Attributes)
, DirContext
void rebind(String name, Object obj) throws NamingException
rebind(Name, Object)
。
name
- 要绑定的名称
可能不是空的
obj
- 要绑定的对象;
可能为null
InvalidAttributesException
- 如果对象没有提供所有必需属性
NamingException
- 如果遇到命名异常
void unbind(Name name) throws NamingException
name
中的终端原子名称 - 由name
的末端原子部分name
。
这种方法是幂等的。 即使终端原子名称未绑定在目标上下文中,也可以成功,但如果任何中间上下文不存在,则抛出NameNotFoundException 。
与名称相关联的任何属性都将被删除。 中间上下文不变。
name
- 取消绑定的名称
可能不是空的
NameNotFoundException
- 如果中间上下文不存在
NamingException
- 如果遇到命名异常
unbind(String)
void unbind(String name) throws NamingException
unbind(Name)
。
name
- 取消绑定的名称
可能不是空的
NameNotFoundException
- 如果中间上下文不存在
NamingException
- 如果遇到命名异常
void rename(Name oldName, Name newName) throws NamingException
oldName
- 现有绑定的名称;
可能不是空的
newName
- 新绑定的名称;
可能不是空的
NameAlreadyBoundException
- 如果
newName已经绑定
NamingException
- 如果遇到命名异常
rename(String, String)
,
bind(Name, Object)
,
rebind(Name, Object)
void rename(String oldName, String newName) throws NamingException
rename(Name, Name)
。
oldName
- 现有绑定的名称;
可能不是空的
newName
- 新绑定的名称;
可能不是空的
NameAlreadyBoundException
- 如果
newName已经绑定
NamingException
- 如果遇到命名异常
NamingEnumeration<NameClassPair> list(Name name) throws NamingException
如果将绑定添加到此上下文或从此上下文中删除,则其对先前返回的枚举的影响是未定义的。
name
- 要列出的上下文的名称
NamingException
- 如果遇到命名异常
list(String)
, listBindings(Name)
, NameClassPair
NamingEnumeration<NameClassPair> list(String name) throws NamingException
list(Name)
。
name
- 要列出的上下文的名称
NamingException
- 如果遇到命名异常
NamingEnumeration<Binding> listBindings(Name name) throws NamingException
如果将绑定添加到此上下文或从此上下文中删除,则其对先前返回的枚举的影响是未定义的。
name
- 要列出的上下文的名称
NamingException
- 如果遇到命名异常
listBindings(String)
, list(Name)
, Binding
NamingEnumeration<Binding> listBindings(String name) throws NamingException
listBindings(Name)
。
name
- 要列出的上下文的名称
NamingException
- 如果遇到命名异常
void destroySubcontext(Name name) throws NamingException
这种方法是幂等的。 即使终端原子名称未绑定在目标上下文中,也可以成功,但如果任何中间上下文不存在,则抛出NameNotFoundException 。
在联合命名系统中,来自一个命名系统的上下文可能绑定到另一个命名系统中的名称。 随后可以使用复合名称查找并执行对外部上下文的操作。 然而,企图破坏使用此复合名称将失败,并NotContextException的情况下,因为外部上下文不是在它所在的上下文的“子上下文”。 相反,请使用unbind()删除外部上下文的绑定。 销毁外部上下文要求destroySubcontext()被从外部上下文的“本机”命名系统的上下文进行。
name
- 要销毁的上下文的名称;
可能不是空的
NameNotFoundException
- 如果中间上下文不存在
NotContextException
- 如果名称是绑定的,但不指定上下文,或者不指定适当类型的上下文
ContextNotEmptyException
- 如果命名上下文不为空
NamingException
- 如果遇到命名异常
destroySubcontext(String)
void destroySubcontext(String name) throws NamingException
destroySubcontext(Name)
。
name
- 要销毁的上下文的名称;
可能不是空的
NameNotFoundException
- 如果中间上下文不存在
NotContextException
- 如果名称是绑定的,但没有命名上下文,或者不指定适当类型的上下文
ContextNotEmptyException
- 如果命名上下文不为空
NamingException
- 如果遇到命名异常
Context createSubcontext(Name name) throws NamingException
name
- 要创建的上下文的名称;
可能不是空的
NameAlreadyBoundException
- 如果名称已经绑定
InvalidAttributesException
- 如果创建子上网需要规定强制属性
NamingException
- 如果遇到命名异常
createSubcontext(String)
,
DirContext.createSubcontext(javax.naming.Name, javax.naming.directory.Attributes)
Context createSubcontext(String name) throws NamingException
createSubcontext(Name)
。
name
- 要创建的上下文的名称;
可能不是空的
NameAlreadyBoundException
- 如果名称已经绑定
InvalidAttributesException
- 如果
InvalidAttributesException
创建需要规定强制属性
NamingException
- 如果遇到命名异常
Object lookupLink(Name name) throws NamingException
name
- 要查找的对象的名称
NamingException
- 如果遇到命名异常
lookupLink(String)
Object lookupLink(String name) throws NamingException
lookupLink(Name)
。
name
- 要查找的对象的名称
NamingException
- 如果遇到命名异常
NameParser getNameParser(Name name) throws NamingException
name
- 从中获取解析器的上下文的名称
NamingException
- 如果遇到命名异常
getNameParser(String)
, CompoundName
NameParser getNameParser(String name) throws NamingException
getNameParser(Name)
。
name
- 从中获取解析器的上下文的名称
NamingException
- 如果遇到命名异常
Name composeName(Name name, Name prefix) throws NamingException
name
)相对于此上下文,和名称( prefix
这相对于它的一个祖先上下文),则此方法返回使用适合于所涉及的命名系统(S)的语法的两个名字的组成。
也就是说,如果name
命名相对于该上下文的对象,则结果是相同对象的名称,但相对于祖先上下文。
没有一个名字可能为空。
例如,如果这个上下文相对于初始上下文命名为“wiz.com”,那么
composeName("east", "wiz.com")
可能会返回"east.wiz.com"
。
如果这个上下文被命名为“org / research”,那么
composeName("user/jane", "org/research")
可能会返回"org/research/user/jane"
composeName("user/jane", "research")
返回"research/user/jane"
。
name
- 相对于此上下文的名称
prefix
- 此上下文相对于其祖先之一的名称
prefix
和
name
NamingException
- 如果遇到命名异常
composeName(String, String)
String composeName(String name, String prefix) throws NamingException
composeName(Name, Name)
。
name
- 相对于此上下文的名称
prefix
- 此上下文相对于其祖先之一的名称
prefix
和
name
NamingException
- 如果遇到命名异常
Object addToEnvironment(String propName, Object propVal) throws NamingException
propName
- 要添加的环境属性的名称;
可能不为空
propVal
- 要添加的属性的值;
可能不为空
NamingException
- 如果遇到命名异常
getEnvironment()
,
removeFromEnvironment(String)
Object removeFromEnvironment(String propName) throws NamingException
propName
- 要删除的环境属性的名称;
可能不为空
NamingException
- 如果遇到命名异常
getEnvironment()
,
addToEnvironment(String, Object)
Hashtable<?,?> getEnvironment() throws NamingException
调用者不应该对返回的对象进行任何更改:它们对上下文的影响是未定义的。 可以使用addToEnvironment()和removeFromEnvironment()更改此上下文的环境。
NamingException
- 如果遇到命名异常
addToEnvironment(String, Object)
,
removeFromEnvironment(String)
void close() throws NamingException
该方法是幂等的:在已经关闭的上下文中调用它没有任何效果。 不允许在封闭上下文中调用任何其他方法,并导致未定义的行为。
NamingException
- 如果遇到命名异常
String getNameInNamespace() throws NamingException
许多命名服务对于各自的命名空间中的对象都有一个“全名”概念。 例如,LDAP条目具有可分辨名称,DNS记录具有完全限定名称。 此方法允许客户端应用程序检索此名称。 此方法返回的字符串不是JNDI组合名称,不应直接传递给上下文方法。 在命名系统中,全名概念没有意义, OperationNotSupportedException被抛出。
OperationNotSupportedException
- 如果命名系统没有全名的概念
NamingException
- 如果遇到命名异常