over 3 years ago

JNDI(Java Naming and Directory Interface),簡單而言它提供了尋找資源和其他物件的方式,其API雖然是歸屬在Java SE specification,但其功能被使用的最多卻是在Java EE當中,扮演了相當吃重的角色。

Naming and Directory概念

Naming指的是給予一個實體"名字",進而此名字和實體連結了(bind)而產生關係。舉例來說,在file system上naming一個檔名"contact.txt",其內容為人名和電話號碼。如此一來檔名和內容產生了關連,也因為此關連讓你可以使用其檔名"contact.txt"告訴filesystem在任何時間點取出電話號碼。Directory則是Naming的延伸,除了能取得該物件外,更能取得其屬性。同樣的用file sytem的例子來解釋,屬性可以是檔案大小,建立日期等等。更多的解釋可參考The JNDI Tutorial: Trail Map中的Naming and Directory Concepts。

常見的Naming and Directory service有LDAP(Lightweight Directory Access Protocol)提供帳號整合的服務,DNS(Domain name system)提供查詢主機位址服務等等。

JNDI使用方式

JNDI的資源控管是由Context object來負責,提供資源的一方透過它的API bind加到Context裡;使用資源的一方透過它API中的lookup來獲得資源。然而Context本身為interface,實作的class則需透過Context initial factory來提供,可以是com.sun.jndi.ldap.LdapCtxFactory來使用LDAP,也可以是com.example.jndi.dns.DnsContextFactory來使用DNS(此兩者都在jre裡的rt.jar)等等。下圖為來自JNDI Overview中的JDNI architecture,Client端透過不同的factory和JNDI的API,可以很輕易使用不同的Naming and Directory的服務來獲取資源。

以下收集JDNI在不同情況之下,所使用的範例

← oh-my-zsh和vim的theme color JCConf TW 2014 →
 
comments powered by Disqus