国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中的命名與目錄接口JNDI基本操作方法概覽

2019-11-26 14:28:08
字體:
來源:轉載
供稿:網友

對jndi總體的理解:

jndi(java naming and directory Interface)它提供了一套使用命名和目錄服務的接口。用戶可以通過它來使用命名和目錄服務。就像jdbc一樣。jndi包括命名服務和目錄服務兩部分,其中目錄服務包含目錄對象directory object,它包含若干屬性對象。提供了對屬性的很多操作。
命名和目錄服務:

命名和目錄服務我們一直在使用,如操作系統的文件系統,它給我們提供對文件的操作,查詢,添加刪除等功能。DNS服務將url同ip地址綁定在了一起。命名和目錄系統的最主要的功能是將name和對象綁定。在它的基礎之上還提供更多的功能如lookup,search.而且存儲的對象是有一定層次結構的。使用這樣的服務我們可以對對象更加有效的管理和操作。
命名服務將一個名稱映射到一個對象。RMI Registry和CORBA Naming Service都是命名服務。
目錄服務也存放對象,但目錄服務識別這些對象的相關屬性??梢杂庙椖繉傩詠硭阉髂夸洝?br />在20世紀90年代早期,輕量級的目錄訪問協議(LightWeightDiretoryAccessProtocol,LDAP)被作為一種標準的目錄協議被開發出來,JNDI能夠訪問LDAP。
j2se為jndi提供了5個擴展包:

  • javax.naming;為訪問命名服務提供的api
  • javax.naming.directory;為訪問目錄服務提供了基本的接口
  • javax.naming.event;支持命名和目錄服務中的事件通知
  • javax.naming.ldap; 支持ldap的包,
  • javax.naming.spi;提供了不同命名和目錄服務可以掛接他們的實現的方法。

context: context是一套name-to-object的綁定(bindings),可以理解為層次或目錄,它還可已包括下一層subContext。在使用命名和目錄服務時獲得initial context是對整個名字空間操作的入口。在目錄服務中是DirContext.
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());}