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


JNDI(The Java Naming and Directory Interface,Java命名和目錄接口)是一組在Java應(yīng)用中訪(fǎng)問(wèn)命名和目錄服務(wù)的API。命名服務(wù)將名稱(chēng)和對(duì)象聯(lián)系起來(lái),使得我們可以用名稱(chēng)訪(fǎng)問(wèn)對(duì)象。目錄服務(wù)是一種命名服務(wù),在這種服務(wù)里,對(duì)象不但有名稱(chēng),還有屬性。
命名或目錄服務(wù)使你可以集中存儲(chǔ)共有信息,這一點(diǎn)在網(wǎng)絡(luò)應(yīng)用中是重要的,因?yàn)檫@使得這樣的應(yīng)用更協(xié)調(diào)、更容易管理。例如,可以將打印機(jī)設(shè)置存儲(chǔ)在目錄服務(wù)中,以便被與打印機(jī)有關(guān)的應(yīng)用使用

JNDI概述
我們大家每天都不知不覺(jué)地使用了命名服務(wù)。例如,當(dāng)你在web瀏覽器輸入U(xiǎn)RL,http://java.sun.com時(shí), DNS(Domain Name System,域名系統(tǒng))將這個(gè)符號(hào)URL名轉(zhuǎn)換成通訊標(biāo)識(shí)(IP地址)。命名系統(tǒng)中的對(duì)象可以是DNS記錄中的名稱(chēng)、應(yīng)用服務(wù)器中的EJB組件 (Enterprise JavaBeans Component)、LDAP(Lightweight Directory Access Protocol)中的用戶(hù)Profile。
目錄服務(wù)是命名服務(wù)的自然擴(kuò)展。兩者之間的關(guān)鍵差別是目錄服務(wù)中對(duì)象可以有屬性(例如,用戶(hù)有 email地址),而命名服務(wù)中對(duì)象沒(méi)有屬性。因此,在目錄服務(wù)中,你可以根據(jù)屬性搜索對(duì)象。JNDI允許你訪(fǎng)問(wèn)文件系統(tǒng)中的文件,定位遠(yuǎn)程RMI注冊(cè)的對(duì)象,訪(fǎng)問(wèn)象LDAP這樣的目錄服務(wù),定位網(wǎng)絡(luò)上的EJB組件。
對(duì)于象LDAP 客戶(hù)端、應(yīng)用launcher、類(lèi)瀏覽器、網(wǎng)絡(luò)管理實(shí)用程序,甚至地址薄這樣的應(yīng)用來(lái)說(shuō),JNDI是一個(gè)很好的選擇。
JNDI架構(gòu)
JNDI架構(gòu)提供了一組標(biāo)準(zhǔn)的獨(dú)立于命名系統(tǒng)的API,這些API構(gòu)建在與命名系統(tǒng)有關(guān)的驅(qū)動(dòng)之上。這一層有助于將應(yīng)用與實(shí)際數(shù)據(jù)源分離,因此不管應(yīng)用
訪(fǎng)問(wèn)的是LDAP、RMI、DNS、還是其他的目錄服務(wù)。換句話(huà)說(shuō),JNDI獨(dú)立于目錄服務(wù)的具體實(shí)現(xiàn),只要你有目錄的服務(wù)提供接口(或驅(qū)動(dòng)),你就可以使用目錄。


JNDI 是一組API,它用命名/目錄服務(wù)增強(qiáng)了網(wǎng)絡(luò)應(yīng)用。本文中的示例說(shuō)明了用JNDI開(kāi)發(fā)基于目錄的應(yīng)用是多么容易。它也說(shuō)明了如何用同樣的API訪(fǎng)問(wèn)不同的命名/目錄服務(wù)。開(kāi)發(fā)者不必學(xué)習(xí)不同的API。在某些情況下,例如,在RMI和CORBA應(yīng)用中,JNDI允許你部署時(shí)才選擇命名服務(wù)。
JNDI未來(lái)將增加的功能包括:與標(biāo)準(zhǔn)的Java SASL API(JSR-28,http://jcp.org/aboutJava/communityprocess/review/jsr028/) 的集成、支持國(guó)際化域名、支持安全DNS。