JNDI

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 常見問題

誰應該使用 JNDI?

任何需要訪問有關用戶、機器、網絡和服務的信息的 Java 應用程序。用戶信息包括安全憑證、電話、電子郵件地址、通信地址和應用程序首選項(application preferences)。機器信息包括網絡地址、機器配置等。另外就是任何需要導出對象或者需要訪問其他應用程序或服務導出的對象的 Java 應用程序。這樣的例子包括打印程序、日曆和聯網的文件系統。

現在我可以使用 JNDI 嗎?

是的,Sun Microsystems 已經將 JNDI 作爲一個 Java Standard Extension 發佈了。Sun Microsystems 還爲很多命名服務和目錄服務(如 LDAP, NIS, CORBA (COS) Naming 和文件)發佈了無縫地插入在 JNDI 後面的服務提供程序。這些服務提供程序以及其他供應商提供的服務提供程序都可從 下載 處得到。

JNDI 用於 Java 平臺中的什麼地方?

HotJava Views 1.1 使用 JNDI 來訪問 LDAP。像 Enterprise JavaBeans, Java Message Service, JDBC 2.0 這樣的 Enterprise API 將 JNDI 用於命名和目錄用途。RMI over IIOP 應用程序可以使用 JNDI 來訪問 CORBA (COS) 命名服務。

誰將提供 JNDI 的實現?

在寫這篇文章時,IBM, Novell, Sun 和 WebLogic 已經爲 JNDI 提供了服務提供程序。我們維護有一個公共可用的服務提供程序的 列表

JNDI 爲哪些協議提供了接口?

JNDI 本身獨立於任何特定目錄訪問協議。單獨的服務提供程序決定所支持的協議。將會有不同供應商提供的流行協議(比如 LDAP, NDS, DNS 和 NIS(YP))的提供程序實現。

JNDI 與 LDAP 的關係如何?

JNDI 提供目錄和命名的一個優良的面向對象的抽象。開發人員使用 JNDI 可以開發出使用 LDAP 或其他訪問協議的查詢來檢索結果;但是他們並不侷限於 LDAP,也不是必須開發與 LDAP 相關的應用程序。JNDI 支持 LDAP v3 中的關鍵功能。

JNDI 與 Netscape 的 Java LDAP API 的關係如何?

Netscape 的 API 是特定於 LDAP 的。它用於對 LDAP 目錄的低級別訪問。它暴露應用程序一般不需要知道的協議細節。

JNDI 是 Java 程序的一個普通目錄 API。它類似用於訪問文件的 java.io.File 類。可能會有一些需要在協議級別處理文件的管理程序(比如 NFS),但是所有的 Java 應用程序一般都使用 File 類來訪問文件系統。類似地,大多數 Java 程序應該使用 JNDI 來訪問目錄。需要在協議級別處理目錄內容的應用程序可能會選擇使用 Netscape 的 API。

JNDI 與用於命名的 OMG 的 CORBA 標準的關係如何?

Java CORBA 應用程序可以使用 JNDI 來訪問 CORBA (COS) 名稱服務,以及其他命名服務和目錄服務。它爲應用程序提供一個接口,用於訪問所有這些命名服務和目錄服務。

通過使用 JNDI,Java CORBA 應用程序還可以使用像 LDAP 這樣的分佈式企業級服務來存儲對象引用。

JNDI 與 Microsoft 的 ADSI 的關係如何?

Java ADSI 包允許 Java 程序基於 COM 模型訪問 Active Directory。儘管它可用於訪問其他目錄,但是它是一個以 Windows 爲中心的解決方案。

JNDI 提供 Java 應用程序使用 Java 對象模型來訪問目錄,而不管這些應用程序是運行在 Windows 上,還是在訪問 Active Directory。例如,您可以處理像 AWT 和 JavaBeans 組件這樣的對象,將它們綁定到目錄中,然後再返回來查找它們,而不用做任何轉換或者處理數據表示問題。

什麼是 XFN,它與 JNDI 的關係如何?

XFN 就是 X/Open Federated Naming,即一個基於 C 的標準,用於訪問多個有可能聯盟的命名服務和目錄服務。熟悉 XFN 的程序員會發現使用 JNDI 很容易。

安全性如何?

不同目錄對待安全性的方式不同。JNDI 允許應用程序與特定於目錄的安全系統協同工作。在未來,基於 JNDI 的應用程序將能夠爲 Java 平臺開發的任何單點登錄機制的優勢。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章