public interface Context
大多数方法都有一个重载版本,以Name
参数和一个以String
。这些重载版本是等价的,如果Name
和String
参数是不同的表示相同的名字,然后重载版本相同的方法相同的行为。在下面的方法描述中,只有一个版本是完全记录的。第二个版本,而不是有一个链接到第一个:相同的文档适用于两个。
系统支持联邦,String名称参数Context方法复合的名字。名称参数的实例CompositeName作为复合材料的名称,而不是Name参数实例CompositeName作为化合物的名字(这可能是复合的名字CompoundName或其他实现实例)。这让NameParser.parse()结果可以作为方法参数的Context。对于JNDI 1.2之前,所有的参数被视为复合名字的名字。
此外,系统支持联邦,所有名字返回从list()和listBindings()一NamingEnumeration复合名称表示为字符串。看名字的字符串的语法CompositeName。
对于那些不支持联邦系统,命名参数(无论Name或String形式)和名在NamingEnumeration可能在自己的命名空间名称,而不是在一个复合的命名空间名称,服务提供者的自由裁量权。
lookup
方法,当通过一个空名,将返回一个新的上下文实例表示相同的命名上下文。
对并发控制的目的,一方面操作,返回一个NamingEnumeration不认为已经完成,枚举是仍在使用,或在任何的操作仍然是产生转介。
JNDI的应用需要的沟通方式不同的偏好和属性定义的环境中,命名和目录服务的访问。例如,一个上下文可能需要安全凭据的规范,以访问服务。另一个上下文可能需要提供服务器配置信息。这些被称为一个上下文的环境。的Context接口提供检索和更新这个环境的方法。
环境是从父上下文继承的,因为上下文方法从一个上下文到下一个。一个上下文的环境的变化不直接影响到其他上下文。
它是实现依赖于环境属性时,使用和/或验证的有效性。例如,服务提供商使用一些与安全相关的属性来“登录”目录。此登录过程可能会发生在创建上下文的时间,或在上下文中调用方法的第一次。何时,以及是否发生这种情况,是依赖于实现的。当环境属性被添加或从上下文中删除时,验证更改的有效性再次依赖于实现。例如,对某些属性的验证可能在发生更改时发生,或在上下文中执行下一个操作时,或根本不进行验证。
任何上下文的引用的任何对象都可以检查上下文的环境。敏感信息,如明文密码不应被存储在那里,除非执行是已知的,以保护它。
为了简化设置通过JNDI的应用所需的环境的任务,应用程序组件和服务提供商可能会随着资源文件的分布。JNDI资源文件的属性文件格式的文件(见java.util.Properties
),包含一个键/值对列表。关键是属性的名称(如“java。命名。工厂对象”)和价值是在属性定义的格式字符串。这里是一个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,前缀是供应商的背景下实施的包的名称(S),每一期(“。”)转换为一个斜杠(“/”)。例如,假设一个服务提供者定义上下文实现的类的名称 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存在并且是可读的,是把它作为一个额外的应用程序的资源文件。(java.home表示目录的
java.home系统性能。命名)所有属性包含在这些文件放置到初始上下文环境。这种环境是继承的其他情况下。当
对于每个属性出现在多个应用程序的资源文件,JNDI使用第一价值发现,在少数情况下,这样做是有意义的,它将所有的值(详见下文)。例如,如果“java。命名。工厂对象”的财产在三jndi.properties资源文件发现,对象工厂名单是从所有三个文件的连接属性值。使用这个方案,每个部署组件是负责列出它的出口的工厂。JNDI的自动收集和使用这些出口商品目录搜索时,工厂类。
当JNDI类库需要确定一个属性的值,它通过合并从两个来源的价值,为:
当服务提供商需要确定属性的值时,它通常会直接从环境中取这个值。服务提供程序可以将要放置在其自己的提供程序资源文件中的特定属性定义为。在这种情况下,它应该合并值,如前一段所述。
这样,每个服务提供程序开发人员可以指定一个与该服务提供商一起使用的工厂列表。这些可以由应用程序或applet部署人员指定的应用程序资源修改,这反过来又可以由用户修改。
Modifier and Type | Field and Description |
---|---|
static String |
APPLET
保持用于指定初始上下文构造函数的名称的环境属性的名称,用于在搜索其他属性时使用的程序属性。
|
static String |
AUTHORITATIVE
常数,用于指定服务的权威性是环境属性的名称要求。
|
static String |
BATCHSIZE
保持属性的名称,用于指定通过服务协议返回数据时使用的批处理大小的名称。
|
static String |
DNS_URL
常数,用于指定要使用的JNDI URL中的DNS主机和域名持有环境属性的名称(例如,“DNS:/ / somehost /奇才。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。命名。工厂。最初的“。
static final String OBJECT_FACTORIES
该常数的值是“java。命名。工厂的对象。”。
static final String STATE_FACTORIES
该常数的值是“java。命名。工厂。”。
static final String URL_PKG_PREFIXES
该常数的值是“java。命名。工厂。URL。中心”。
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。命名。供应商。网址”。
static final String DNS_URL
该常数的值是“java。命名。DNS。网址”。
static final String AUTHORITATIVE
该常数的值是“java。命名。权威”。
static final String BATCHSIZE
该常数的值是“java BATCHSIZE。命名。”。
static final String REFERRAL
该常数的值是“java。命名。推荐”。
static final String SECURITY_PROTOCOL
该常数的值是“java。命名。安全。协议”。
static final String SECURITY_AUTHENTICATION
该常数的值是“java。命名。安全认证”。
static final String SECURITY_PRINCIPAL
该常数的值是“java。命名。安全。主”。
static final String SECURITY_CREDENTIALS
该常数的值是“java。命名。安全。凭据”。
static final String LANGUAGE
该常数的值是“java语言。命名。”。
static final String APPLET
该常数的值是“java 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
-绑定的对象可能是空的;
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
-绑定的对象可能是空的;
NameAlreadyBoundException
如果名字已绑定
InvalidAttributesException
如果对象没有提供所有必需的属性
NamingException
-如果遇到一个命名的例外
void rebind(Name name, Object obj) throws NamingException
如果对象是一个DirContext,任何现有的属性相关的名称与对象替换。否则,任何与名称相关联的现有属性保持不变。
name
-绑定的名称;不能为空
obj
-绑定的对象可能是空的;
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
-绑定的对象可能是空的;
InvalidAttributesException
如果对象没有提供所有必需的属性
NamingException
-如果遇到一个命名的例外
void unbind(Name name) throws NamingException
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
已绑定
NamingException
-如果遇到一个命名的例外
rename(String, String)
,
bind(Name, Object)
,
rebind(Name, Object)
void rename(String oldName, String newName) throws NamingException
rename(Name, Name)
详情。
oldName
-现有绑定的名称不能为空;
newName
-新的绑定名称不能为空;
NameAlreadyBoundException
已绑定
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
如果的形式创作需要强制属性规范
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
名字对象相对于这样的背景下,其结果是对同一对象的名称,但相对于祖先背景。没有名字可能是空的。
例如,如果这种情况下被称为“天才。com”相对于初始上下文,然后
composename(“东”、“天才。com”)可能返回
"east.wiz.com"
。如果不是这方面的“组织研究”,然后
composename(“用户/简”、“组织/研究”)可能返回
"org/research/user/jane"
而
composename(“用户/简”,“研究”)返回
"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
-如果遇到一个命名的例外
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.