我是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涉及哪里?
答案 0 :(得分:2)
a)JNDI API:我们编写应用程序并使用JNDI API来进行查找等。现在,谁实现了JNDI API?它们本身是完整的实现,即由JDK提供商本身或服务提供商实现吗?
通过whoeveer注册了ObjectFactory.
在JRE应用程序中,这可能不会超出JRE本身。在Servlet或J2EE容器中,它肯定会扩展为包含容器本身,java:comp
资源,也可能包括Web应用程序本身。
b)JNDI SPI:究竟是什么?
服务提供商必须实施服务提供商接口。
JNDI SPI是否特定于服务,例如LDAP服务器?
是
谁提供JNDI SPI的实现。
几乎完全是JRE本身。
这些JNDI SPI是否在应用程序端使用
它们至少可以ObjectFactory,
,但它并不常见。
(如果我正在编写一个简单的应用程序来从LDAP进行查找,那么这个jar应该在应用程序中)
没有
编辑重新提问:
在上面的例子中,我们主要使用javax.naming。* stuff;谁实现了它们?
JRE,特别是您指定的工厂类及其朋友。
- SPI涉及哪里?
醇>
工厂类和朋友实施SPI。