LDAP是輕量目錄訪問(wèn)協(xié)議,英文全稱是Lightweight Directory Access Protocol,一般都簡(jiǎn)稱為L(zhǎng)DAP。它是基于X.500標(biāo)準(zhǔn)的,但是簡(jiǎn)單多了并且可以根據(jù)需要定制。與X.500不同,LDAP支持TCP/IP,這對(duì)訪問(wèn)Internet是必須的。LDAP的核心規(guī)范在RFC中都有定義,所有與LDAP相關(guān)的RFC都可以在LDAPman RFC網(wǎng)頁(yè)中找到。
簡(jiǎn)單說(shuō)來(lái),LDAP是一個(gè)得到關(guān)于人或者資源的集中、靜態(tài)數(shù)據(jù)的快速方式。
LDAP是一個(gè)用來(lái)發(fā)布目錄信息到許多不同資源的協(xié)議。通常它都作為一個(gè)集中的地址本使用,不過(guò)根據(jù)組織者的需要,它可以做得更加強(qiáng)大。
1.2. LDAP是電話簿
LDAP其實(shí)是一電話簿,類似于我們所使用諸如NIS(Network Information Service)、DNS (Domain Name Service)等網(wǎng)絡(luò)目錄,也類似于你在花園中所看到的樹木。
1.3. LDAP是不是數(shù)據(jù)庫(kù)
不少LDAP開發(fā)人員喜歡把LDAP與關(guān)系數(shù)據(jù)庫(kù)相比,認(rèn)為是另一種的存貯方式,然后在讀性能上進(jìn)行比較。實(shí)際上,這種對(duì)比的基礎(chǔ)是錯(cuò)誤的。LDAP和關(guān)系數(shù)據(jù)庫(kù)是兩種不同層次的概念,后者是存貯方式(同一層次如網(wǎng)格數(shù)據(jù)庫(kù),對(duì)象數(shù)據(jù)庫(kù)),前者是存貯模式和訪問(wèn)協(xié)議。LDAP是一個(gè)比關(guān)系數(shù)據(jù)庫(kù)抽象層次更高的存貯概念,與關(guān)系數(shù)據(jù)庫(kù)的查詢語(yǔ)言SQL屬同一級(jí)別。LDAP最基本的形式是一個(gè)連接數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)方式。該數(shù)據(jù)庫(kù)為讀查詢作了優(yōu)化。因此它可以很快地得到查詢結(jié)果,不過(guò)在其它方面,例如更新,就慢得多。
從另一個(gè)意義上 LDAP是實(shí)現(xiàn)了指定的數(shù)據(jù)結(jié)構(gòu)的存貯,它是一種特殊的數(shù)據(jù)庫(kù)。但是LDAP和一般的數(shù)據(jù)庫(kù)不同,明白這一點(diǎn)是很重要的。 LDAP對(duì)查詢進(jìn)行了優(yōu)化,與寫性能相比LDAP的讀性能要優(yōu)秀很多。
就象Sybase、Oracle、Informix或Microsoft的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是用于處理查詢和更新關(guān)系型數(shù)據(jù)庫(kù)那樣,LDAP服務(wù)器也是用來(lái)處理查詢和更新LDAP目錄的。換句話來(lái)說(shuō)LDAP目錄也是一種類型的數(shù)據(jù)庫(kù),但不是關(guān)系型數(shù)據(jù)庫(kù)。要特別注意的是,LDAP通常作為一個(gè)hierarchal數(shù)據(jù)庫(kù)使用,而不是一個(gè)關(guān)系數(shù)據(jù)庫(kù)。因此,它的結(jié)構(gòu)用樹來(lái)表示比用表格好。正因?yàn)檫@樣,就不能用SQL語(yǔ)句了。
2.1. LDAP的優(yōu)勢(shì)
2.1.1 跨平臺(tái)
LDAP最大的優(yōu)勢(shì)是:可以在任何計(jì)算機(jī)平臺(tái)上,用很容易獲得的而且數(shù)目不斷增加的LDAP的客戶端程序訪問(wèn)LDAP目錄。而且也很容易定制應(yīng)用程序?yàn)樗由螸DAP的支持。
LDAP協(xié)議是跨平臺(tái)的和標(biāo)準(zhǔn)的協(xié)議,因此應(yīng)用程序就不用為L(zhǎng)DAP目錄放在什么樣的服務(wù)器上操心了。實(shí)際上,LDAP得到了業(yè)界的廣泛認(rèn)可,因?yàn)樗荌nternet的標(biāo)準(zhǔn)。產(chǎn)商都很愿意在產(chǎn)品中加入對(duì)LDAP的支持,因?yàn)樗麄兏静挥每紤]另一端(客戶端或服務(wù)端)是怎么樣的。LDAP服務(wù)器可以是任何一個(gè)開發(fā)源代碼或商用的LDAP目錄服務(wù)器(或者還可能是具有LDAP界面的關(guān)系型數(shù)據(jù)庫(kù)),因?yàn)榭梢杂猛瑯拥膮f(xié)議、客戶端連接軟件包和查詢命令與LDAP服務(wù)器進(jìn)行交互。與LDAP不同的是,如果軟件產(chǎn)商想在軟件產(chǎn)品中集成對(duì)DBMS的支持,那么通常都要對(duì)每一個(gè)數(shù)據(jù)庫(kù)服務(wù)器單獨(dú)定制。
2.1.2 費(fèi)用及維護(hù)
不象很多商用的關(guān)系型數(shù)據(jù)庫(kù),你不必為L(zhǎng)DAP的每一個(gè)客戶端連接或許可協(xié)議付費(fèi)。
大多數(shù)的LDAP服務(wù)器安裝起來(lái)很簡(jiǎn)單,也容易維護(hù)和優(yōu)化。
2.1.3 復(fù)制技術(shù)
LDAP服務(wù)器可以用"推"或"拉"的方法復(fù)制部分或全部數(shù)據(jù),例如:可以把數(shù)據(jù)"推"到遠(yuǎn)程的辦公室,以增加數(shù)據(jù)的安全性。復(fù)制技術(shù)是內(nèi)置在LDAP服務(wù)器中的而且很容易配置。如果要在DBMS中使用相同的復(fù)制功能,數(shù)據(jù)庫(kù)產(chǎn)商就會(huì)要你支付額外的費(fèi)用,而且也很難管理。
2.1.4 允許使用ACI
LDAP允許你根據(jù)需要使用ACI(一般都稱為ACL或者訪問(wèn)控制列表)控制對(duì)數(shù)據(jù)讀和寫的權(quán)限。例如,設(shè)備管理員可以有權(quán)改變員工的工作地點(diǎn)和辦公室號(hào)碼,但是不允許改變記錄中其它的域。ACI可以根據(jù)誰(shuí)訪問(wèn)數(shù)據(jù)、訪問(wèn)什么數(shù)據(jù)、數(shù)據(jù)存在什么地方以及其它對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)控制。因?yàn)檫@些都是由LDAP目錄服務(wù)器完成的,所以不用擔(dān)心在客戶端的應(yīng)用程序上是否要進(jìn)行安全檢查。
2.2. LDAP存儲(chǔ)什么數(shù)據(jù)
LDAP對(duì)于這樣存儲(chǔ)這樣的信息最為有用:也就是數(shù)據(jù)需要從不同的地點(diǎn)讀取,但是不需要經(jīng)常更新。例如,這些信息存儲(chǔ)在LDAP目錄中是十分有效的:
l 公司員工的電話號(hào)碼簿和組織結(jié)構(gòu)圖
l 客戶的聯(lián)系信息
l 計(jì)算機(jī)管理需要的信息,包括NIS映射、email假名,等等
l 軟件包的配置信息
l 公用證書和安全密匙
2.3. 什么時(shí)候該用LDAP存儲(chǔ)數(shù)據(jù)
大多數(shù)的LDAP服務(wù)器都為讀密集型的操作進(jìn)行專門的優(yōu)化。因此,當(dāng)從LDAP服務(wù)器中讀取數(shù)據(jù)的時(shí)候會(huì)比從專門為OLTP優(yōu)化的關(guān)系型數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)快一個(gè)數(shù)量級(jí)。也是因?yàn)閷iT為讀的性能進(jìn)行優(yōu)化,大多數(shù)的LDAP目錄服務(wù)器并不適合存儲(chǔ)需要需要經(jīng)常改變的數(shù)據(jù)。例如,用LDAP服務(wù)器來(lái)存儲(chǔ)電話號(hào)碼是一個(gè)很好的選擇,但是它不能作為電子商務(wù)站點(diǎn)的數(shù)據(jù)庫(kù)服務(wù)器。
如果下面每一個(gè)問(wèn)題的答案都是"是",那么把數(shù)據(jù)存在LDAP中就是一個(gè)好主意。
l 需要在任何平臺(tái)上都能讀取數(shù)據(jù)嗎?
l 每一個(gè)單獨(dú)的記錄項(xiàng)是不是每一天都只有很少的改變?
l 可以把數(shù)據(jù)存在平面數(shù)據(jù)庫(kù)(flat database)而不是關(guān)系型數(shù)據(jù)庫(kù)中嗎?換句話來(lái)說(shuō),也就是不管什么范式不范式的,把所有東西都存在一個(gè)記錄中(差不多只要滿足第一范式)。
最后一個(gè)問(wèn)題可能會(huì)唬住一些人,其實(shí)用平面數(shù)據(jù)庫(kù)去存儲(chǔ)一些關(guān)系型的數(shù)據(jù)也是很一般的。例如,一條公司員工的記錄就可以包含經(jīng)理的登錄名。用LDAP來(lái)存儲(chǔ)這類信息是很方便的。一個(gè)簡(jiǎn)單的判斷方法:如果可以把保數(shù)據(jù)存在一張張的卡片里,就可以很容易地把它存在LDAP目錄里。
3.1 信息模型:描述LDAP的信息表示方式
在LDAP中信息以樹狀方式組織,在樹狀信息中的基本數(shù)據(jù)單元是條目,而每個(gè)條目由屬性構(gòu)成,屬性中存儲(chǔ)有屬性值;LDAP中的信息模式,類似于面向?qū)ο蟮母拍,在LDAP中每個(gè)條目必須屬于某個(gè)或多個(gè)對(duì)象類(Object Class),每個(gè)Object Class由多個(gè)屬性類型組成,每個(gè)屬性類型有所對(duì)應(yīng)的語(yǔ)法和匹配規(guī)則;對(duì)象類和屬性類型的定義均可以使用繼承的概念。每個(gè)條目創(chuàng)建時(shí),必須定義所屬的對(duì)象類,必須提供對(duì)象類中的必選屬性類型的屬性值,在LDAP中一個(gè)屬性類型可以對(duì)應(yīng)多個(gè)值。
在LDAP中把對(duì)象類、屬性類型、語(yǔ)法和匹配規(guī)則統(tǒng)稱為Schema,在LDAP中有許多系統(tǒng)對(duì)象類、屬性類型、語(yǔ)法和匹配規(guī)則,這些系統(tǒng)Schema在LDAP標(biāo)準(zhǔn)中進(jìn)行了規(guī)定,同時(shí)不同的應(yīng)用領(lǐng)域也定義了自己的Schema,同時(shí)用戶在應(yīng)用時(shí),也可以根據(jù)需要自定義Schema。這有些類似于XML,除了XML標(biāo)準(zhǔn)中的XML定義外,每個(gè)行業(yè)都有自己標(biāo)準(zhǔn)的DTD或DOM定義,用戶也可以自擴(kuò)展;也如同XML,在LDAP中也鼓勵(lì)用戶盡量使用標(biāo)準(zhǔn)的Schema,以增強(qiáng)信息的互聯(lián)互通。
在Schema中最難理解的是匹配規(guī)則,這是LDAP中為了加快查詢的速度,針對(duì)不同的數(shù)據(jù)類型,可以提供不同的匹配方法,如針對(duì)字符串類型的相等、模糊、大于小于均提供自己的匹配規(guī)則。
3.2 命名模型:描述LDAP中的數(shù)據(jù)如何組織
LDAP中的命名模型,也即LDAP中的條目定位方式。在LDAP中每個(gè)條目均有自己的DN和RDN。DN是該條目在整個(gè)樹中的唯一名稱標(biāo)識(shí),RDN是條目在父節(jié)點(diǎn)下的唯一名稱標(biāo)識(shí),如同文件系統(tǒng)中,帶路徑的文件名就是DN,文件名就是RDN。
3.3 功能模型:描述LDAP中的數(shù)據(jù)操作訪問(wèn)
在LDAP中共有四類10種操作:查詢類操作,如搜索、比較;更新類操作,如添加條目、刪除條目、修改條目、修改條目名;認(rèn)證類操作,如綁定、解綁定;其它操作,如放棄和擴(kuò)展操作。除了擴(kuò)展操作,另外9種是LDAP的標(biāo)準(zhǔn)操作;擴(kuò)展操作是LDAP中為了增加新的功能,提供的一種標(biāo)準(zhǔn)的擴(kuò)展框架,當(dāng)前已經(jīng)成為L(zhǎng)DAP標(biāo)準(zhǔn)的擴(kuò)展操作,有修改密碼和StartTLS擴(kuò)展,在新的RFC標(biāo)準(zhǔn)和草案中正在增加一些新的擴(kuò)展操作,不同的LDAP廠商也均定義了自己的擴(kuò)展操作。
3.4 安全模型:描述LDAP中的安全機(jī)制
LDAP中的安全模型主要通過(guò)身份認(rèn)證、安全通道和訪問(wèn)控制來(lái)實(shí)現(xiàn)。
3.4.1 身份認(rèn)證
在LDAP中提供三種認(rèn)證機(jī)制,即匿名、基本認(rèn)證和SASL(Simple Authentication and Secure Layer)認(rèn)證。匿名認(rèn)證即不對(duì)用戶進(jìn)行認(rèn)證,該方法僅對(duì)完全公開的方式適用;基本認(rèn)證均是通過(guò)用戶名和密碼進(jìn)行身份識(shí)別,又分為簡(jiǎn)單密碼和摘要密碼認(rèn)證;SASL認(rèn)證即LDAP提供的在SSL和TLS安全通道基礎(chǔ)上進(jìn)行的身份認(rèn)證,包括數(shù)字證書的認(rèn)證。
3.4.2 通訊安全
在LDAP中提供了基于SSL/TLS的通訊安全保障。SSL/TLS是基于PKI信息安全技術(shù),是目前Internet上廣泛采用的安全服務(wù)。LDAP通過(guò)StartTLS方式啟動(dòng)TLS服務(wù),可以提供通訊中的數(shù)據(jù)保密性、完整性保護(hù);通過(guò)強(qiáng)制客戶端證書認(rèn)證的TLS服務(wù),同時(shí)可以實(shí)現(xiàn)對(duì)客戶端身份和服務(wù)器端身份的雙向驗(yàn)證。
3.4.3 訪問(wèn)控制
雖然LDAP目前并無(wú)訪問(wèn)控制的標(biāo)準(zhǔn),但從一些草案中或是事實(shí)上LDAP產(chǎn)品的訪問(wèn)控制情況,我們不難看出:LDAP訪問(wèn)控制異常的靈活和豐富,在LDAP中是基于訪問(wèn)控制策略語(yǔ)句來(lái)實(shí)現(xiàn)訪問(wèn)控制的,這不同于現(xiàn)有的關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)和應(yīng)用系統(tǒng),它是通過(guò)基于訪問(wèn)控制列表來(lái)實(shí)現(xiàn)的,無(wú)論是基于組模式或角色模式,都擺脫不了這種限制。
在使用關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)應(yīng)用時(shí),往往是通過(guò)幾個(gè)固定的數(shù)據(jù)庫(kù)用戶名訪問(wèn)數(shù)據(jù)庫(kù)。對(duì)于應(yīng)用系統(tǒng)本身的訪問(wèn)控制,通常是需要建立專門的用戶表,在應(yīng)用系統(tǒng)內(nèi)開發(fā)針對(duì)不同用戶的訪問(wèn)控制授權(quán)代碼,這樣一旦訪問(wèn)控制策略變更時(shí),往往需要代碼進(jìn)行變更。總之一句話,關(guān)系型數(shù)據(jù)庫(kù)的應(yīng)用中用戶數(shù)據(jù)管理和數(shù)據(jù)庫(kù)訪問(wèn)標(biāo)識(shí)是分離的,復(fù)雜的數(shù)據(jù)訪問(wèn)控制需要通過(guò)應(yīng)用來(lái)實(shí)現(xiàn)。
而對(duì)于LDAP,用戶數(shù)據(jù)管理和訪問(wèn)標(biāo)識(shí)是一體的,應(yīng)用不需要關(guān)心訪問(wèn)控制的實(shí)現(xiàn)。這是由于在LDAP中的訪問(wèn)控制語(yǔ)句是基于策略語(yǔ)句來(lái)實(shí)現(xiàn)的,無(wú)論是訪問(wèn)控制的數(shù)據(jù)對(duì)象,還是訪問(wèn)控制的主體對(duì)象,均是與這些對(duì)象在樹中的位置和對(duì)象本身的數(shù)據(jù)特征相關(guān)。
在LDAP中,可以把整個(gè)目錄、目錄的子樹、制定條目、特定條目屬性集或符合某過(guò)濾條件的條目作為控制對(duì)象進(jìn)行授權(quán);可以把特定用戶、屬于特定組或所有目錄用戶作為授權(quán)主體進(jìn)行授權(quán);最后,還可以定義對(duì)特定位置(例如IP地址或DNS名稱)的訪問(wèn)權(quán)。
LDAP是實(shí)現(xiàn)了指定的數(shù)據(jù)結(jié)構(gòu)的存貯,它包括以下可以用關(guān)系數(shù)據(jù)庫(kù)實(shí)現(xiàn)的結(jié)構(gòu)要求:樹狀組織、條目認(rèn)證、類型定義、許可樹形記錄拷貝。
4.1 樹狀組織
無(wú)論是X500還是LDAP都是采用樹狀方式進(jìn)行記錄。每一個(gè)樹目錄都有一個(gè)樹根的入口條目,子記錄全部是這一根條目的子孫。這是目錄與關(guān)系數(shù)據(jù)類型最大的區(qū)別(關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用結(jié)構(gòu)也可實(shí)現(xiàn)樹狀記錄)。因此,把目錄看作是更高級(jí)的樹狀數(shù)據(jù)庫(kù)也未嘗不可,只不過(guò)除此外,它不能實(shí)現(xiàn)關(guān)系存貯的重要功能。
4.2 條目和條目認(rèn)證
LDAP是以條目作為認(rèn)證的根據(jù)。ROOT的權(quán)限認(rèn)證與目錄本身無(wú)關(guān),但除此外所有條目的認(rèn)證權(quán)限由條目本身的密碼進(jìn)行認(rèn)證。LDAP可以配置成各種各樣不同的父子條目權(quán)限繼承方式。
每一個(gè)條目相當(dāng)于一個(gè)單一的平面文本記錄,由條目自身或指定的條目認(rèn)證進(jìn)行訪問(wèn)控制。因此,LDAP定義的存貯結(jié)構(gòu)等同于一批樹狀組織的平面數(shù)據(jù)庫(kù),并提供相應(yīng)的訪問(wèn)控制。
條目中的記錄以名-值對(duì)的形式存在,每一個(gè)名值對(duì)必須由數(shù)據(jù)樣式schema預(yù)定義。因此,LDAP可以看作是以規(guī)定的值類型以名值對(duì)形式存貯在一系列以樹狀組織的平面數(shù)據(jù)庫(kù)的記錄的集合。
4.3 數(shù)據(jù)樣式(schema)
數(shù)據(jù)樣式schema是針對(duì)不同的應(yīng)用,由用戶指定(設(shè)計(jì))類和屬性類型預(yù)定義,條目中的類(objectclass)和屬性必須在在LDAP服務(wù)器啟動(dòng)時(shí)載入內(nèi)存的schema已有定義。因此,AD活動(dòng)目錄中的條目記錄就必須符合Active Directory的schema中。如果已提供的schema中的定義不夠用,用戶可以自行定義新的schema.
在http://ldap.akbkhome.com/index.php中可以看到常用的schema。
4.4 對(duì)象類型(objectClass)
因?yàn)長(zhǎng)DAP目錄可以定制成存儲(chǔ)任何文本或二進(jìn)制數(shù)據(jù),到底存什么要由你自己決定。LDAP目錄用對(duì)象類型(objectclass)的概念來(lái)定義運(yùn)行哪一類的對(duì)象使用什么屬性。在幾乎所有的LDAP服務(wù)器中,你都要根據(jù)自己的需要擴(kuò)展基本的LDAP目錄的功能,創(chuàng)建新的對(duì)象類型或者擴(kuò)展現(xiàn)存的對(duì)象類型。
條目中的記錄通過(guò)objectclass實(shí)現(xiàn)分類,objectClass是一個(gè)繼承性的類定義,每一個(gè)類定義指定必須具備的屬性。如某一條目指定必須符合某個(gè)類型,則它必須具備超類所指定的屬性。
通過(guò)objectclass分類,分散的條目中的記錄就實(shí)際上建立了一個(gè)索引結(jié)構(gòu),為高速的讀查詢打下了基礎(chǔ)。Objectclass也是過(guò)濾器的主要查詢對(duì)象。
4.5 過(guò)濾器和語(yǔ)法
LDAP是一個(gè)查詢?yōu)橹鞯挠涗浗Y(jié)構(gòu),無(wú)論是何種查詢方式,最終都由過(guò)濾器缺點(diǎn)查詢的條件。過(guò)濾器相當(dāng)于SQL中的WHERE子句。任何LDAP的類過(guò)濾和字符串都必須放在括號(hào)內(nèi),如(objectclass=*),指列出所有類型的記錄(不過(guò)分類)。
可以使用=,>=,<=,~=(約等于)進(jìn)行比較,如(number<=100)。合并條件是最怪的,必須把操作符放在兩個(gè)操作對(duì)象的前面而不是中間,單一操作對(duì)象用括號(hào)括起來(lái)。如
l A與B,不是A&B,而是(&(A)(B))。
l 或使用"|"表示;
l 非使用"!"表示。
l 對(duì)于"與",或"或"在操作符后可以跟多個(gè)條件表達(dá)式,但非后則只參是單個(gè)表達(dá)式。
詳見RFC1558。
4.6 樹移植
LDAP最重要的特性和要求并不是讀性能,而是擴(kuò)展性。這一特性是通過(guò)樹移植和樹復(fù)制實(shí)現(xiàn)的。按LDAP的RFC要求,LDAP目錄應(yīng)該可以任意地在不同的目錄間連接、合并并實(shí)現(xiàn)自動(dòng)復(fù)制,及自動(dòng)性同步。這意味著用戶可以在任一LDAP中訪問(wèn)條目,而不用管其中某一部分是否復(fù)制自全世界另一目錄中的記錄,同時(shí)另一目錄中的記錄同樣在正常運(yùn)作。
這一特性如果在關(guān)系數(shù)據(jù)庫(kù)中實(shí)現(xiàn),意味著要使用程序化的非規(guī)范化預(yù)復(fù)制。類似于匯總賬目的設(shè)計(jì)。
4.7 LDIF交換文件
LDIF是LDAP約定的記錄交換格式,以平面文本的形式存在,是大部分LDAP內(nèi)容交換的基礎(chǔ),如拷貝、添加、修改等操作,都是基于LDIF文件進(jìn)行操作。
4.8 JAVA或CORBA對(duì)象串行化存儲(chǔ)
網(wǎng)絡(luò)高效率的訪問(wèn)加上JAVA的跨平臺(tái)能力,當(dāng)把JAVA或CORBA對(duì)象串行化后存儲(chǔ)到LDAP目錄上時(shí),可以產(chǎn)生非同一般的集成效果--實(shí)際上,這正是EJB和.NET的網(wǎng)絡(luò)定位基礎(chǔ)技術(shù)。
使用JAVA或CORBA對(duì)象存儲(chǔ)時(shí),必須首先讓LDAP服務(wù)支持該對(duì)象定義,也就是說(shuō)包含qmail.schema或corba.schema。
JAVA必須存儲(chǔ)在objectclass=javacontainer的條目中,而且必須帶有cn屬性,這意味著除非該JAVA類專門實(shí)現(xiàn)了DirContext接口,對(duì)于大多數(shù)JAVA類來(lái)說(shuō),只能采用DirContext代替Context實(shí)現(xiàn)bind的添加操作。取出JAVA類相對(duì)要簡(jiǎn)單得多,只需使用context.lookup()獲得該對(duì)象的句柄,然后強(qiáng)制造型成所需要的對(duì)象就可以了,如:
Person p=(Person)contex.lookup("cn=elvis,dc=daifu,dc=com");
這個(gè)句法在EJB的程序中,是經(jīng)常用到的。
使用CORBA的跨語(yǔ)言性質(zhì),使用CORBA存儲(chǔ)對(duì)象比JAVA更加誘人,這意味著所存儲(chǔ)的對(duì)象可以被任何語(yǔ)言編寫的客戶端訪問(wèn)。其實(shí),微軟的.net說(shuō)到底也非常簡(jiǎn)單,無(wú)非是把COM對(duì)象存儲(chǔ)到微軟自家的目錄ActiveDirectory里面,從而可以在網(wǎng)絡(luò)范圍內(nèi)使用任何微軟平臺(tái)的語(yǔ)言進(jìn)行對(duì)象訪問(wèn)而已。眾所周知,COM就是與CORBA相對(duì)的微軟規(guī)范。
使用對(duì)象串行化技術(shù),可以把常用對(duì)象如某個(gè)打印機(jī),某個(gè)客戶直接存儲(chǔ)到LDAP中,然后快速獲取該對(duì)象的引用,這樣,就比把對(duì)象信息存儲(chǔ)到關(guān)系數(shù)據(jù)庫(kù)中,分別取出屬性,然后再初始化對(duì)象操作的做法,效率要高得多了。這是LDAP目前比普通關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)要優(yōu)秀的地方,而對(duì)象數(shù)據(jù)庫(kù)還不成熟