日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《精通J2EE网络编程》中讲的JNDI 6.1 什么是JNDI

發布時間:2024/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《精通J2EE网络编程》中讲的JNDI 6.1 什么是JNDI 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
6.1 什么是JNDI?
Java命名和目錄接口(the Java naming and directory interface,JNDI)是一組在Java應用中訪問命名和目錄服務的API。命名服務將名稱和對象聯系起來,使得讀者可以用名稱訪問對象。目錄服務是一種命名服務,在這種服務里,對象不但有名稱,還有屬性。 命名或目錄服務使讀者可以集中存儲共有信息,這一點在網絡應用中是非常重要的,因為這使得這樣的應用更協調、更容易管理。例如,可以將打印機設置存儲在目錄服務中,以便被與打印機有關的應用使用。 本章將在學習了解JNDI的基本特點后,用代碼示例的方式詳細講解JNDI,使讀者可以了解和使用JNDI。 6.1 ?什么是JNDI 在一個企業中,命名服務為讀者的應用程序在網絡上定位對象提供了一種方法。一個命名服務將對象和名稱聯系在了一起,并且可以通過它們指定的名稱找到相應的對象。 JNDI是Java命名和目錄接口,是一個為Java應用程序提供命名服務的應用程序編程接口(API)。它為開發人員提供了查找和訪問各種命名和目錄服務的通用、統一的接口,類似于JDBC都是構建在抽象層上。要使用JNDI,必須要安裝jdk 1.3以上版本。 JNDI包含了大量的命名和目錄服務,它使用通用接口來訪問不同種類的服務,可以同時連接到多個命名或目錄服務上并建立起邏輯關聯。 6.1.1 ?命名服務 命名服務是一種服務,它提供了為給定的數據集創建一個標準名字的能力。它允許把名稱同Java對象或資源關聯起來,而不必指出對象或資源的物理ID。這類似于字典結構(或者是Java的map結構),該結構中鍵映射到值。例如在Internet上的域名服務(domain naming service,DNS)就是提供將域名映射到IP地址的命名服務,在打開網站時一般都是在瀏覽器中輸入名字,通過DNS找到相應的IP地址,然后打開。 所有的因特網通信都使用TCP、UDP或IP協議。IP地址由4個字節32位二進制數字組成,數字和名字相比,對于人來說名字比數字要容易記憶,但對于計算機來講,它更善于處理數字。 其實所有的命名服務都提供DNS這種基本功能,即一個系統向命名服務注冊,命名服務提供一個值到另一個值的映射。然后,另外一個系統訪問命名服務就可以取得映射信息。這種交互關系對分布式企業級應用來講顯得非常重要。 在Java中,基本的名字操作包含在Context接口中。 6.1.2 ?目錄服務 目錄服務是一種特殊類型的數據庫,與SQL Server、Access、Oracle等關系數據庫管理系統相反,構造目錄服務的目的是為了處理基于行為的事務,并且使用一種關系信息模型。目錄服務將命名服務的概念進一步引申為提供具有層次結構的信息庫,這一信息庫除了包含一對一的關系外,還有信息的層次結構。對目錄服務而言,這種層次結構通常用于優化搜索操作,并且也可以按實際情況進行分布或者跨網絡復制。 一個目錄服務通常擁有一個名字服務(但是一個名字服務不必具有一個目錄服務)。如電話簿就是一個典型的目錄服務,一般先在電話簿里找到相關的人名,再找到這個人的電話號碼。 每一種目錄服務都可以存儲有關用戶名、用戶密碼、用戶組(如有關訪問控制的??? 信息)、以太網地址、IP地址等信息。它所支持的信息和操作會因為所使用的目錄服務的不同而不同。遺憾的是,訪問不同目錄服務的協議也會不同,所以讀者需要了解多???? 種API。 這就是JNDI的起源,就像JDBC一樣,JNDI充當不同名稱和目錄服務的通用API或者說是前端,然后使用不同的后端適配器來連接實際服務。如圖6-1顯示了JNDI和LDAP如何共同合作,為客戶提供一種完美的解決方案。 在這里,使用JNDI完成與LDAP服務器之間的通信,對開發者來說他們只擔心一個特殊協議(LDAP)和一個API(JNDI),而由開發商給他們自己的各個協議提供LDAP接口。事實上對這些流行的目錄服務中來說,都有產品可讓開發者通過LDAP與這些目錄服務通信。 JNDI是J2EE技術中的一個完整的組件。它支持通過一個單一的方法訪問不同的、新的和已經存在的服務的方法。這種支持允許任何服務提供商執行通過標準服務提供商接口(SPI)協定插入JNDI框架。另外,JNDI允許Weblogic服務器上的Java應用程序通過插入適當的服務提供者來訪問像LDAP這樣的標準化方式的外部目錄服務。 基本的目錄服務操作包含在DirContext接口中。 6.1.3? LDAP的介紹 輕量目錄訪問協議(lightweight directory access protocol,LDAP)是在20世紀90年代早期作為標準目錄協議進行開發的。它是目前最流行的目錄協議,與廠商跟平臺無關。 LDAP可以追溯到X.500協議,而X.500協議最初是基于OSI網絡協議發展起來的。LDAP的第3版協議是在RFC2251中定義的,并且已經非常成熟,它的最新補充部分包含LDAP的XML規范,稱為目錄服務標記語言。 Java語言通過使用LDAP API,如Netscape Directory 服務器可以直接使用LDAP,或者通過JNDI來使用LDAP。JNDI是J2SE中的標準API,是通用的API,不必綁定到LDAP。 LDAP定義客戶應當如何訪問服務器中的數據,它并不指定數據應當如何存儲在服務器上。大多數情況下,開發者只需要和一個專為LDAP設計的目錄服務,或現有目錄服務的LDAP前端打交道。LDAP能夠成為任何數據存儲類型的前端。目前最流行的目錄服務有NIS、NDS、Active Directory等都有某種類型的LDAP前端。 LDAP和關系數據庫是兩種不同層次的概念,后者是存儲方式(同一層次如網格數據庫,對象數據庫),前者是存儲模式和訪問協議。LDAP是一個比關系數據庫抽象層次更高的存儲概念,與關系數據庫的查詢語言SQL屬于同一級別。LDAP最基本的形式是一個連接數據庫的標準方式,該數據庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其他方面,例如更新操作等就慢得多。 從另一個意義上來講,LDAP是實現了指定的數據結構的存儲,它是一種特殊的數據庫。但是LDAP和一般的數據庫不同,明白這一點是很重要的。LDAP對查詢進行了優化,與寫性能相比,LDAP的讀性能要優秀很多。LDAP服務器也是用來處理查詢和更新LDAP目錄的。換句話說,LDAP目錄也是一種類型的數據庫,但不是關系型數據庫。要特別注意的是,LDAP通常作為一個hierarchal數據庫使用,而不是一個關系數據庫。 1.LDAP數據 在LDAP中,數據被組織成一棵樹的形式,叫做目錄信息樹(directory information tree,DIT)。DIT中的第一個“葉子”叫做一個條目(entry),第一個條目叫根條目(root entry)。 一個條目是由一個區分名稱DN(distinguished name)和任意一個屬性/值對組成。DN是一個條目的名字,它必須是唯一的,它類似于一個關系型數據庫的唯一關鍵字。DN也表明了該條目與DIT樹的其他部分之間的關系,它類似于這種方式:一個文件的全路徑名表明硬盤上的一個特定文件與系統中的其他文件之間的關系。當從根目錄讀取文件時,讀取系統上的文件路徑是從左到右讀取的,但是當從根目錄讀取DN時,是從右到左讀DN的。如: uid = jordan,ou = nba,o = american 表示定義了在組織american中的小組為nba的用戶jordan的用戶。其中一個DN名的最左邊部分叫相對區分名稱RDN(relative distinguished name),它由一個條目內的屬性/值組成,如前面的uid = jordan是RDN,后面的可有可無。 LDAP通常使用簡寫形式的助記符表示其名稱,常用的LDAP屬性及其定義如表6-1所示。 LDAP屬性及其定義
LDAP屬性 定義
o Organization:組織
ou Organization unit:組織單元
續表
LDAP屬性 定義
uid Userid:用戶id
cn Common name:常見名稱
sn
givenname 首名
dn Distinguished Name:區分名稱
mail E-mail Address:電子郵件地址
其中一個屬性可以有一個或多個值,如一個用戶可以有多個mail。 2.LDAP的功能 到目前為止,我們已經介紹了LDAP行程注冊部分,其實LDAP中還包括很多其他的用途,總的來說LDAP的功能包括遠程服務的注冊、訪問控制、黃頁服務器和配置??? 數據。 (1)遠程服務器注冊 這是本章中使用LDAP時所涉及的內容,前面已經談到過該項功能。LDAP允許遠程服務器注冊其可用性,然后允許客戶機獲得該注冊信息,并且可使用該服務器。在某些情況下(如RMI),這可能意味著將可序列化的對象保存在LDAP中,并且在此后可以檢索這些已保存的對象。這類似于rmiregistry的使用方法,但它能搜索LDAP,而rmiregistry卻不能,并且當停止并重新啟動rmiregistry后,原來注冊的對象無效,必須重新注冊所有對象。 (2)訪問控制 許多企業應用程序都會對訪問它們服務的用戶進行控制。這可能像Web應用登錄頁面那樣簡單,也可能像使用數字簽名那樣復雜。不論是使用哪種方法,那些待檢查的信息總需要保存到某個地方,有一種選擇是將這些信息保存到LDAP內。例如,可以將用戶保存在LDAP中。 (3)黃頁服務器 黃頁服務器的作用類似于電話目錄,因此稱為黃頁。它提供信息搜索功能,可以使LDAP根據條目的屬性內容進行信息搜索。如對于用戶姓名、計算機和打印機等,均可以使用LDAP存儲公司內所有員工的這些信息,然后根據名字為某個特定名字的用戶以及檢索他們的用戶ID搜索。 (4)配置數據 LDAP可以充當配置信息的資源中心,這些配置信息在應用程序運行時使用。這類似于在Java應用程序中使用屬性文件,但是這并不僅僅是每一個應用程序的屬性文件,而是作為一個可用來訪問并且還必須進行維護的單一的信息庫中心。如一些特定應用程序使用的共享數據庫名稱可以保存到LDAP中。因此,如果數據庫名稱發生變更時,對于所有需要遷移到新數據庫的應用程序來講僅僅需要維護一個地方。 3.使用LDAP 為了使用LDAP,需要完成以下4個步驟。 (1)連接到LDAP服務器 要使用LDAP,必須首先獲取一個到LDAP的連接。為了完成LDAP的連接,需要知道運行LDAP的主機和要連接的端口,這有點類似于將電話線插到墻壁的電話孔后才能夠與別人打電話。 (2)綁定到LDAP服務器 對于LDAP,通常至少有兩種方法來綁定(登錄)到LDAP服務器,匿名(LDAP3以上版本)或者作為特定用戶。綁定有些類似于使用電話公司設置的電話線撥打朋友的電話。匿名登錄僅僅能夠訪問到一些公共數據。如果應用程序作為特定用戶登錄時,就可以訪問公共數據和特定為該用戶設置的可訪問的所有數據。而為某個用戶設置可訪問的數據是由LDAP服務器的訪問控制列表(access control list,ACL)決定。ACL控制哪個用戶能夠讀、寫或者修改該ACL所關聯的任何數據。一個條目內的不同屬性可以與多個不同的ACL相關聯。因此,不同的用戶就能夠看到不同的數據項,除此之外,某些特定的屬性可以與多個ACL相關聯,如一個ACL可以向一個用戶組提供讀的權限,但是另一個ACL可以向另一個用戶組提供寫的權限。 (3)在LDAP服務器上執行所需的任何操作 這些操作主要包括搜索服務器、增加新條目、修改條目、刪除條目等。 (4)釋放LDAP服務器的連接 當應用程序連接到LDAP并完成其相關工作后,該應用程序應該關閉連接以釋放系統資源。

總結

以上是生活随笔為你收集整理的《精通J2EE网络编程》中讲的JNDI 6.1 什么是JNDI的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。