1. JNDI 概念 (网上没有合适文章)
1.1 命名概念
JNDI即Java Naming and Directory Interface(JAVA命名和目录接口),那么java命名目的就是为了记录一些不方便记录的内容,就像人的名字或DNS中的域名与IP的关系。
1.2 名字的概念
一个命名的展示由名字和分隔符提现,例如:同样命名空间也是
1.3 绑定
在上面的示例中,一个标识符最终都要绑定到具体的内容:例如/usr/hello绑定的是hello目录;sales.wiz.com绑定的是x.x.x.x样式的IP地址
1.4 JNDI结构
[
JNDI由JNDI API、命名管理、JNDI SPI(service provider interface)服务提供的接口。我们的应用可以通过JNDI的API去访问相关服务提供的接口。
我们要使用JNDI,必须要有服务提供方,我们常用的就是JDBC驱动提供数据库连接服务,然后我们配置JNDI连接。
JDK也为我们提供了一些服务接口:
- LDAP (Lightweight Directory Access Protocol) 轻量级目录访问协议
- CORBA (Common Object Request Broker Architecture) 公共对象请求代理结构服务
- RMI(Java Remote Method Invocation)JAVA远程远程方法调用注册
- DNS(Domain Name Service)域名服务
2. JNDI示例
JNDI的范例程序也很少,在网上广泛流传的是一些与应用服务器结合的实例,如在Tomcat、JBoss、WebLogic中配置了JNDI的数据源,然后在程序中去发现使用。这些例子大家都会,有没有应用服务器的程序中使用JNDI技术呢?下面给个例子:
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Hashtable;
public class TestFileSystemJNDI {
public static void main(String[] args) throws NamingException {
Hashtable env = new Hashtable();
String name = "F:\\fscontext-1_2-beta3.zip";
//文件系统服务的提供者
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
Context ctx = new InitialContext(env);
//通过上下文查找名称对应的对象
Object obj = ctx.lookup(name);
System.out.println("名称:[" + name + "]绑定的对象是:" + obj);
}
}
运行结果:
名称:[F:\fscontext-1_2-beta3.zip]绑定的对象是:F:\fscontext-1_2-beta3.zip
注意,JNDI的概念说的明白,你需要有这个服务,才可以用JNDI API来获取。
因此还需要安装文件系统服务。这个例子我不用安装什么服务,下载个文件服务包就行了。其中的两个jar文件就包中的。 fscontext.jar、providerutil.jar