基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
javax.naming.Context
更新时间:2026-07-22 17:45:59
javax.naming.Context 是连接配置的上下文接口。
描述
javax.naming.Context 由一组名称到对象的绑定组成,并包含检查和更新这些绑定的方法。
名称
作为参数传递给 Context 方法的每个名称都与上下文相关。空名称用于命名上下文本身。名称参数永远不能为空。
大多数方法都有重载版本,一种采用 Name 参数,另一种采用 String。这些重载版本是等效的,如果 Name 和 String 参数只是同名的不同表示,那么相同方法的重载版本的行为是相同的。
异常
此接口中的所有方法都可以抛出 NamingException 或其任何子类。
并发访问
不能保证 Context 实例与多个线程的并发访问是同步的。如果需要并发访问单个 Context 实例的线程,则应该在它们之间实现同步并提供必要的锁定。操作不同 Context 实例的多个线程不需要同步。请注意,当传递空名称时,查找方法将返回一个表示相同命名上下文的新 Context 实例。
出于并发控制的目的,如果枚举在使用中或该操作生成的引用仍在使用中时,返回 NamingEnumeration 的 Context 操作被视为未完成。
参数
服务提供程序不会修改传递给 Context 接口或其子接口方法的 Name 参数。服务提供程序可以在操作期间保留对 Name 的引用,包括方法结果的枚举和生成引用的处理。在此期间,调用者不应修改 Name 所绑定的对象。任何此类方法返回的 Name 归调用者所有。调用者可以随后对 Name 进行修改,而服务提供程序则不能修改。
环境属性
JNDI 应用程序需要一种方式来传达各种首选项和属性,这些首选项和属性定义了访问命名和目录服务的环境。例如,上下文可能需要指定安全凭证才能访问服务。另一种方式叫做上下文的环境,用于提供服务器配置信息。Context 接口提供了检索和更新此环境的方法。
当上下文方法从一个上下文进行到下一个上下文时,环境是从父上下文继承的。一个上下文的环境变化不会直接影响其他上下文的环境。
环境属性的使用或有效性的验证是依赖于实现的。例如,服务提供者使用一些与安全相关的属性来"登录"到目录。此登录过程可能发生在创建上下文时,或者第一次在上下文上调用方法时。何时以及是否发生这种情况取决于实现。在上下文中添加或删除环境属性时,对所做更改的有效性的验证再次取决于实现。例如,某些属性的验证可能会在进行更改时发生,或者在对上下文执行下一个操作时发生,或者根本不会发生。
任何引用上下文的对象都可以检查该上下文的环境。除非具有保护措施,否则不应将明文密码之类的敏感信息存储在上下文中。
资源文件
为了简化设置 JNDI 应用程序所需的环境,应用程序组件和服务提供者可以与资源文件一起分发。JNDI 资源文件是属性文件格式的文件,其中包含键/值对列表。键是属性的名称,值是为该属性定义的格式的字符串。
JNDI 类库读取资源文件并使属性值可用。JNDI 资源文件包括两种 :提供程序和应用程序。
提供者资源文件
每个服务提供程序都有一个可选资源,其中列出了特定于该提供程序的属性。此资源的名称是:
[prefix/]jndiprovider.properties
其中 prefix 是提供程序上下文实现的包名称,每个句点 (".") 都转换为斜杠 ("/")。
在 JNDI 类库中,以下方法使用 JNDI 工厂列表的标准 JNDI 属性:
java.naming.factory.objectjava.naming.factory.statejava.naming.factory.controljava.naming.factory.url.pkgs
在确定这些属性的值时,JNDI 库将查阅提供程序资源文件。服务提供程序者的文件应明确说明允许使用哪些属性,而文件中的其他属性将被忽略。
应用资源文件
部署应用程序时,它的类路径中通常会有多个代码库目录和 JAR。JNDI 在类路径中定位(使用 ClassLoader.getResources())所有名为 jndi.properties 的应用程序资源文件。此外,如果 Java 安装目录包含内置属性文件(通常是 conf/jndi.properties),JNDI 会将其视为附加的应用程序资源文件。这些文件中包含的所有属性都放置在初始上下文的环境中,这个环境之后可以被其他上下文继承。
对于在多个应用程序资源文件中都可以找到属性,JNDI 使用最先找到的值。在一些情况下,它会连接所有值。例如,如果在三个 jndi.properties 资源文件中找到"java.naming.factory.object"属性,则对象工厂列表是来自所有三个文件的属性值的串联。在搜索工厂类时,JNDI 会自动收集和使用所有这些导出列表。
属性搜索算法
当 JNDI 构造初始上下文时,上下文的环境将使用传递给构造函数的环境参数中定义的属性、系统属性和应用程序资源文件进行初始化。这个初始环境之后可以由其他上下文实例继承。
当 JNDI 类库需要确定属性的值时,它会将以下两个来源的值按照顺序进行合并:
正在其上操作的上下文的环境。
正在其上操作的上下文的提供程序资源文件 (
jndiprovider.properties)。
对于同时存在于这两个源中的属性,JNDI 使用以下方式确定属性的值:
如果该属性是指定 JNDI 工厂列表的标准 JNDI 属性之一,则这些值将连接到一个以冒号分隔的列表中。
对于其他属性,仅使用最先找到的值。
当服务提供程序需要确定某一属性的值时,通常直接从环境中获取该值。服务提供程序可以定义特定于提供程序的属性以放置在自己的提供程序资源文件中。在这种情况下,它应该合并值。通过这种方式,每个服务提供程序开发人员都可以指定一个工厂列表以供该服务提供者使用。工厂列表可以由应用程序的部署方指定的应用程序资源进行修改,而这些资源又可以由用户进行修改。
方法
| 方法名 | 返回值类型 | Oracle 模式是否支持 | MySQL 模式是否支持 |
|---|---|---|---|
| lookup(Name name) | Object | 否 | 否 |
| lookup(String name) | Object | 否 | 否 |
| bind(Name name,Object obj) | void | 否 | 否 |
| bind(String name,Object obj) | void | 否 | 否 |
| rebind(Name name,Object obj) | void | 否 | 否 |
| rebind(String name,Object obj) | void | 否 | 否 |
| unbind(Name name) | void | 否 | 否 |
| unbind(String name) | void | 否 | 否 |
| rename(Name oldName,Name newName) | void | 否 | 否 |
| rename(String oldName,String newName) | void | 否 | 否 |
| list(Name name) | NamingEnumeration<NameClassPair> | 否 | 否 |
| list(String name) | NamingEnumeration<NameClassPair> | 否 | 否 |
| listBindings(Name name) | NamingEnumeration<Binding> | 否 | 否 |
| listBindings(String name) | NamingEnumeration<Binding> | 否 | 否 |
| destroySubcontext(Name name) | void | 否 | 否 |
| destroySubcontext(String name) | void | 否 | 否 |
| createSubcontext(Name name) | Context | 否 | 否 |
| createSubcontext(String name) | Context | 否 | 否 |
| lookupLink(Name name) | Object | 否 | 否 |
| lookupLink(String name) | Object | 否 | 否 |
| getNameParser(Name name) | NameParser | 否 | 否 |
| getNameParser(String name) | NameParser | 否 | 否 |
| composeName(Name name) | Name | 否 | 否 |
| composeName(String name) | Name | 否 | 否 |
| addToEnvironment(String propName,Object propVal) | Object | 否 | 否 |
| removeFromEnvironment(String propName) | Object | 否 | 否 |
| getEnvironment() | Hashtable | 否 | 否 |
| close() | void | 否 | 否 |
| getNameInNamespace() | String | 否 | 否 |