我是新來的JNDI和我由Oracle看了網上的材料:JNDI澄清:JNDI API,JNDI SPI,服務提供商
http://docs.oracle.com/javase/jndi/tutorial/getStarted/overview/index.html
它說JNDI有兩個API的即:
1) JNDI API
2) JNDI SPI
此外,它說使用JNDI,我們應該有JNDI類以及服務提供者。據我所知,服務提供商是實際的資源(命名或目錄),例如, LDAP或DNS(這是我的理解是否正確)?
我有如下疑點:
一)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涉及到哪裏?
請勿對不是代碼的文本使用代碼格式。 – EJP