JNDI 说明:JNDI API、JNDI SPI、服务提供者
JNDI clarification: JNDI API, JNDI SPI, Service Provider
我是 JNDI 的新手,我阅读了 oracle 的在线 material:
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哪里涉及到这个?
a) JNDI API: We write application and use JNDI API's to do lookup etc. Now, who does implement JNDI API? Are they complete implementation in itself i.e implemented by JDK providers themselves or by service providers?
由已在 JRE 应用程序中注册 ObjectFactory.
的人提供,这可能不会超出 JRE 本身。在 Servlet 或 J2EE 容器中,它肯定会扩展到包括容器本身,用于 java:comp
资源,可能还有 Web 应用程序本身。
b) JNDI SPI: what exactly is it?
这是服务提供者必须实现的服务提供者接口。
Are JNDI SPI specific to a service e.g. LDAP server?
是的。
Who provides implementations of JNDI SPI.
几乎完全是 JRE 本身。
Are these JNDI SPI's used in the application side
至少可以达到 ObjectFactory,
,但这并不常见。
(like If i am writing a simple application to do lookup from LDAP, so would this jar be in application)
没有
编辑关于你的新问题:
In this above example we are mainly using javax.naming.* stuff; who implements them?
JRE,特别是您指定的工厂 class 及其朋友。
- Where is the SPI involved in this?
工厂class和朋友实现了SPI。
我是 JNDI 的新手,我阅读了 oracle 的在线 material:
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哪里涉及到这个?
a) JNDI API: We write application and use JNDI API's to do lookup etc. Now, who does implement JNDI API? Are they complete implementation in itself i.e implemented by JDK providers themselves or by service providers?
由已在 JRE 应用程序中注册 ObjectFactory.
的人提供,这可能不会超出 JRE 本身。在 Servlet 或 J2EE 容器中,它肯定会扩展到包括容器本身,用于 java:comp
资源,可能还有 Web 应用程序本身。
b) JNDI SPI: what exactly is it?
这是服务提供者必须实现的服务提供者接口。
Are JNDI SPI specific to a service e.g. LDAP server?
是的。
Who provides implementations of JNDI SPI.
几乎完全是 JRE 本身。
Are these JNDI SPI's used in the application side
至少可以达到 ObjectFactory,
,但这并不常见。
(like If i am writing a simple application to do lookup from LDAP, so would this jar be in application)
没有
编辑关于你的新问题:
In this above example we are mainly using javax.naming.* stuff; who implements them?
JRE,特别是您指定的工厂 class 及其朋友。
- Where is the SPI involved in this?
工厂class和朋友实现了SPI。