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());
}