JNDI全稱 Java Naming and Directory Interface
JNDI 是Java平臺的一個標準擴展,提供了一組接口、類和關于命名空間的概念。如同其它很多Java技術一樣,JDNI是provider-based的技術,暴露了一個API和一個服務供應接口(SPI)。這意味著任何基于名字的技術都能通過JNDI而提供服務,只要JNDI支持這項技術。JNDI目前所支持的技術包括LDAP、CORBA Common Object Service(COS)名字服務、RMI、NDS、DNS、Windows注冊表等等。很多J2EE技術,包括EJB都依靠JNDI來組織和定位實體。
JDNI通過綁定的概念將對象和名稱聯系起來。在一個文件系統中,文件名被綁定給文件。在DNS中,一個IP地址綁定一個URL。在目錄服務中,一個對象名被綁定給一個對象實體。
JNDI中的一組綁定作為上下文來引用。每個上下文暴露的一組操作是一致的。例如,每個上下文提供了一個查找操作,返回指定名字的相應對象。每個上下文都提供了綁定和撤除綁定名字到某個對象的操作。JNDI使用通用的方式來暴露命名空間,即使用分層上下文以及使用相同命名語法的子上下文。
jndi的用途:
1。你可以用jndi來得到object類的屬性
如:Attribute attr =directory.getAttributes(personName).get("email");
String email = (String)attr.get();
2。你可以用jndi來搜索對象
如:foxes = directory.search("o=Wiz,c=US", "sn=Fox", controls);
查找誰的名字叫Fox在wiz部門的員工?
3。你可以用jndi通過naming/directory服務查詢像printers和databases的對象
如:查詢 Printer
Printer printer = (Printer)namespace.lookup(printerName);
printer.print(document);
4。你可以用jndi列表出命名空間的特殊級別的內容
如:
NamingEnumeration list = namespace.list("o=Widget, c=US");
while (list.hasMore()) {
NameClassPair entry = (NameClassPair)list.next();
display(entry.getName(), entry.getClassName());
}
以上根據jndi文檔翻譯的
地址:
http://java.sun.com/products/jndi/overview.html
tomcat數據庫連接池配置中的
java:comp/env代表你的JVM的環境,comp=computer env=environment


JNDI(The Java Naming and Directory Interface,Java命名和目錄接口)是一組在Java應用中訪問命名和目錄服務的API。命名服務將名稱和對象聯系起來,使得我們可以用名稱訪問對象。目錄服務是一種命名服務,在這種服務里,對象不但有名稱,還有屬性。
命名或目錄服務使你可以集中存儲共有信息,這一點在網絡應用中是重要的,因為這使得這樣的應用更協調、更容易管理。例如,可以將打印機設置存儲在目錄服務中,以便被與打印機有關的應用使用

JNDI概述
我們大家每天都不知不覺地使用了命名服務。例如,當你在web瀏覽器輸入URL,http://java.sun.com時, DNS(Domain Name System,域名系統)將這個符號URL名轉換成通訊標識(IP地址)。命名系統中的對象可以是DNS記錄中的名稱、應用服務器中的EJB組件 (Enterprise JavaBeans Component)、LDAP(Lightweight Directory Access Protocol)中的用戶Profile。
目錄服務是命名服務的自然擴展。兩者之間的關鍵差別是目錄服務中對象可以有屬性(例如,用戶有 email地址),而命名服務中對象沒有屬性。因此,在目錄服務中,你可以根據屬性搜索對象。JNDI允許你訪問文件系統中的文件,定位遠程RMI注冊的對象,訪問象LDAP這樣的目錄服務,定位網絡上的EJB組件。
對于象LDAP 客戶端、應用launcher、類瀏覽器、網絡管理實用程序,甚至地址薄這樣的應用來說,JNDI是一個很好的選擇。
JNDI架構
JNDI架構提供了一組標準的獨立于命名系統的API,這些API構建在與命名系統有關的驅動之上。這一層有助于將應用與實際數據源分離,因此不管應用
訪問的是LDAP、RMI、DNS、還是其他的目錄服務。換句話說,JNDI獨立于目錄服務的具體實現,只要你有目錄的服務提供接口(或驅動),你就可以使用目錄。


JNDI 是一組API,它用命名/目錄服務增強了網絡應用。本文中的示例說明了用JNDI開發基于目錄的應用是多么容易。它也說明了如何用同樣的API訪問不同的命名/目錄服務。開發者不必學習不同的API。在某些情況下,例如,在RMI和CORBA應用中,JNDI允許你部署時才選擇命名服務。
JNDI未來將增加的功能包括:與標準的Java SASL API(JSR-28,http://jcp.org/aboutJava/communityprocess/review/jsr028/) 的集成、支持國際化域名、支持安全DNS。