【发布时间】:2015-06-03 09:36:41
【问题描述】:
我是 JNDI 的新手,我阅读了 oracle 的在线资料:
http://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index.html
它说 JNDI 有两个 API 即:
1) JNDI API
2) JNDI SPI
此外,它说要使用 JNDI,我们应该有 JNDI 类以及服务提供者。
据我了解,服务提供者是实际的资源(命名或目录),例如LDAP 或 DNS(我的理解是否正确)?
我有以下疑问:
a) JNDI API:我们编写应用程序并使用 JNDI API 进行查找等。现在,谁来实现 JNDI API?它们本身是完整的实现,即由 JDK 提供者自己实现还是由服务提供者实现?
b) JNDI SPI:它到底是什么? JNDI SPI 是否特定于服务,例如LDAP 服务器?谁提供 JNDI SPI 的实现。仅供参考,我看到了 javax.naming.spi 的源代码(以及其他),我看到有一些接口和一些类。这些 JNDI SPI 是否在应用程序端使用(例如,如果我正在编写一个简单的应用程序来从 LDAP 进行查找,那么这个 jar 是否会在应用程序中)
非常感谢任何帮助。
编辑:
这是一个简单的 JNDI 程序。
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class JNDIExample {
public static void main(String s[]) {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
// Is "com.sun.jndi.fscontext.RefFSContextFactory" the SPI API?
// What exactly is this?
Context ctx = new InitialContext(env);
try {
// Create the initial context
Context ctx = new InitialContext(env);
// Look up an object
Object obj = ctx.lookup(name);
// Print it
System.out.println(name + " is bound to: " + obj);
} catch (NamingException e) {
System.err.println("Problem looking up " + name + ": " + e);
}
}
}
关于上面的例子,我有以下疑问:
在上面这个例子中,我们主要使用
javax.naming.*的东西;谁来实现它们?SPI 在哪里参与?
【问题讨论】:
-
不要对非代码文本使用代码格式。