# JNDI

JNDI(Java Naming and Directory Interface) 是 Java 提供的 Java 命名和目录接口 。通过调用 JNDIAPI 应用程序可以定位资源和其他程序对象。 JNDIJava EE 的重要部分,需要注意的是它并不只是包含了 DataSource(JDBC 数据源)JNDI 可访问的现有的目录及服务有: JDBCLDAPRMIDNSNISCORBA

Naming Service 命名服务:

命名服务将名称和对象进行关联,提供通过名称找到对象的操作,例如:DNS 系统将计算机名和 IP 地址进行关联、文件系统将文件名和文件句柄进行关联等等。

Directory Service 目录服务:

目录服务是命名服务的扩展,除了提供名称和对象的关联,还允许对象具有属性。目录服务中的对象称之为目录对象。目录服务提供创建、添加、删除目录对象以及修改目录对象属性等操作。

Reference 引用:

在一些命名服务系统中,系统并不是直接将对象存储在系统中,而是保持对象的引用。引用包含了如何访问实际对象的信息。

更多 JNDI 相关概念参考: Java 技术回顾之 JNDI:命名和目录服务基本概念

# JNDI 目录服务

访问 JNDI 目录服务时会通过预先设置好环境变量访问对应的服务, 如果创建 JNDI 上下文 ( Context ) 时未指定 环境变量 对象, JNDI 会自动搜索 系统属性(System.getProperty())applet 参数应用程序资源文件(jndi.properties)

使用 JNDI 创建目录服务对象代码片段:

// 创建环境变量对象
Hashtable env = new Hashtable();
// 设置 JNDI 初始化工厂类名
env.put(Context.INITIAL_CONTEXT_FACTORY, "类名");
// 设置 JNDI 提供服务的 URL 地址
env.put(Context.PROVIDER_URL, "url");
// 创建 JNDI 目录服务对象
DirContext context = new InitialDirContext(env);

Context.INITIAL_CONTEXT_FACTORY(初始上下文工厂的环境属性名称) 指的是 JNDI 服务处理的具体类名称,如: DNS 服务可以使用 com.sun.jndi.dns.DnsContextFactory 类来处理, JNDI 上下文工厂类必须实现 javax.naming.spi.InitialContextFactory 接口,通过重写 getInitialContext 方法来创建服务。

javax.naming.spi.InitialContextFactory:

package javax.naming.spi;
public interface InitialContextFactory {
    public Context getInitialContext(Hashtable<?,?> environment) throws NamingException;
}
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

尘落 微信支付

微信支付

尘落 支付宝

支付宝

尘落 贝宝

贝宝