Java術語
英文全稱是:Java Naming and Directory Interface 術語解釋:一組幫助做多個命名和目錄服務接口的API。 JNDI(Java Naming and Directory Interface)是SUN公司提供的一種標準的Java命名系統接口,JNDI提供統一的客戶端API,通過不同的訪問提供者接口JNDI SPI的實現,由管理者將JNDI API映射爲特定的命名服務和目錄系統,使得Java應用程序可以和這些命名服務和目錄服務之間進行交互。集羣JNDI實現了高可靠性JNDI[8],通過服務器的集羣,保證了JNDI的負載平衡和錯誤恢復。在全局共享的方式下,集羣中的一個應用服務器保證本地JNDI樹的獨立性,並擁有全局的JNDI樹。每個應用服務器在把部署的服務對象綁定到自己本地的JNDI樹的同時,還綁定到一個共享的全局JNDI樹,實現全局JNDI和自身JNDI的聯繫。 JNDI(Java Naming and Directory Interface)是一個應用程序設計的API,爲開發人員提供了查找和訪問各種命名和目錄服務的通用、統一的接口,類似JDBC都是構建在抽象層上。 JNDI可訪問的現有的目錄及服務有: DNS、XNam 、Novell目錄服務、LDAP(Lightweight Directory Access Protocol 輕型目錄訪問協議)、 CORBA對象服務、文件系統、Windows XP/2000/NT/Me/9x的註冊表、RMI、DSML v1&v2、NIS。 JNDI優點: 包含了大量的命名和目錄服務,使用通用接口來訪問不同種類的服務; 可以同時連接到多個命名或目錄服務上; 建立起邏輯關聯,允許把名稱同Java對象或資源關聯起來,而不必指導對象或資源的物理ID。 JNDI程序包: javax.naming:命名操作; javax.naming.directory:目錄操作; javax.naming.event:在命名目錄服務器中請求事件通知; javax.naming.ldap:提供LDAP支持; javax.naming.spi:允許動態插入不同實現。 利用JNDI的命名與服務功能來滿足企業級APIs對命名與服務的訪問,諸如EJBs、JMS、JDBC 2.0以及IIOP上的RMI通過JNDI來使用CORBA的命名服務。 JNDI與JDBC: JNDI提供了一種統一的方式,可以用在網絡上查找和訪問服務。通過指定一個資源名稱,該名稱對應於數據庫或命名服務中的一個紀錄,同時返回數據庫連接建立所必須的信息。 代碼示例: try{ Context cntxt = new InitialContext(); DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt"); } catch(NamingException ne){ ... } JNDI與JMS: 消息通信是軟件組件或應用程序用來通信的一種方法。JMS就是一種允許應用程序創建、發送、接收、和讀取消息的JAVA技術。 代碼示例: try{ Properties env = new Properties(); InitialContext inictxt = new InitialContext(env); TopicConnectionFactory connFactory = (TopicConnectionFactory) inictxt.lookup("TTopicConnectionFactory"); ... } catch(NamingException ne){ ... } 訪問特定目錄:舉個例子,人是個對象,他有好幾個屬性,諸如這個人的姓名、電話號碼、電子郵件地址、郵政編碼等屬性。通過getAttributes()方法 Attribute attr = directory.getAttributes(personName).get("email"); String email = (String)attr.get(); 通過使用JNDI讓客戶使用對象的名稱或屬性來查找對象: foxes = directory.search("o=Wiz,c=US", "sn=Fox", controls); 通過使用JNDI來查找諸如打印機、數據庫這樣的對象,查找打印機的例子: Printer printer = (Printer)namespace.lookup(printerName); printer.print(document); 瀏覽命名空間: NamingEnumeration list = namespace.list("o=Widget, c=US"); while (list.hasMore()) { NameClassPair entry = (NameClassPair)list.next(); display(entry.getName(), entry.getClassName()); } 參考資料: http://java.sun.com/products/jndi/examples.html http://java.sun.com/products/jndi/serviceproviders.html 常用的JNDI操作: 常用的JNDI操作: void bind(String sName,Object object);――綁定:把名稱同對象關聯的過程 void rebind(String sName,Object object);――重新綁定:用來把對象同一個已經存在的名稱重新綁定 void unbind(String sName);――釋放:用來把對象從目錄中釋放出來 void lookup(String sName,Object object);――查找:返回目錄總的一個對象 void rename(String sOldName,String sNewName);――重命名:用來修改對象名稱綁定的名稱 NamingEnumeration listBinding(String sName);――清單:返回綁定在特定上下文中對象的清單列表 NamingEnumeration list(String sName); 代碼示例:重新得到了名稱、類名和綁定對象。 NamingEnumeration namEnumList = ctxt.listBinding("cntxtName"); ... while ( namEnumList.hasMore() ) { Binding bnd = (Binding) namEnumList.next(); String sObjName = bnd.getName(); String sClassName = bnd.getClassName(); SomeObject objLocal = (SomeObject) bnd.getObject(); } |
JNDI解釋
JNDI
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.