999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于LDAP的面向?qū)ο竽夸浽L問(wèn)模型及其實(shí)現(xiàn)

2007-01-01 00:00:00劉繼來(lái)趙亞萍董亞波
計(jì)算機(jī)時(shí)代 2007年6期

摘要:LDAP提供了標(biāo)準(zhǔn)的接口用于目錄數(shù)據(jù)的訪問(wèn),但是這類(lèi)接口針對(duì)目錄信息樹(shù)中的條目進(jìn)行操作,屬于較低層次的接口;同時(shí),由于業(yè)務(wù)實(shí)體和目錄條目之間不完全是一對(duì)一的關(guān)系,基于該標(biāo)準(zhǔn)接口開(kāi)發(fā)的軟件很難滿(mǎn)足非功能性需求。為此,文章闡述了面向?qū)ο竽夸浽L問(wèn)操作封裝的必要性,并提出了針對(duì)目錄服務(wù)的LDAP目錄訪問(wèn)模型及其實(shí)現(xiàn)技術(shù)。

關(guān)鍵詞:LDAP;目錄訪問(wèn);目錄信息樹(shù);對(duì)象/條目映射;類(lèi)型轉(zhuǎn)換

0 引言

構(gòu)建一個(gè)典型的企業(yè)應(yīng)用需要數(shù)據(jù)庫(kù)和目錄服務(wù)的合作以共同承擔(dān)信息資源的存儲(chǔ)。LDAP目錄服務(wù)適合存儲(chǔ)相對(duì)靜態(tài)的,存在大量讀操作的信息資源。隨著網(wǎng)絡(luò)應(yīng)用的普及,它的作用日益重要,如它既是數(shù)字化校園中統(tǒng)一認(rèn)證的重要支撐體,也是數(shù)字化校園中基礎(chǔ)信息的主要存儲(chǔ)體。

很多利用LDAP目錄服務(wù)的網(wǎng)絡(luò)應(yīng)用直接在LDAP接口上開(kāi)發(fā)。這樣開(kāi)發(fā)出來(lái)的應(yīng)用其兼容性差;其次,開(kāi)發(fā)效率低,開(kāi)發(fā)人員必須同時(shí)兼顧業(yè)務(wù)邏輯和LDAP的知識(shí);最后,應(yīng)用代碼和目錄服務(wù)的耦合度高,不利于底層目錄服務(wù)產(chǎn)品的更換。因此,有必要尋找一種新的基于LDAP的應(yīng)用模式。

1 基于LDAP的面向?qū)ο竽夸浽L問(wèn)模型

在典型的三層網(wǎng)絡(luò)應(yīng)用軟件系統(tǒng)中,業(yè)務(wù)服務(wù)層是應(yīng)用軟件系統(tǒng)的核心部分,它可以細(xì)分為四個(gè)子層,分別是業(yè)務(wù)接口子層、業(yè)務(wù)處理子層、數(shù)據(jù)實(shí)體子層和數(shù)據(jù)訪問(wèn)子層。前面兩層因?yàn)楦鷺I(yè)務(wù)緊密結(jié)合,不具有可抽象性。而數(shù)據(jù)實(shí)體子層和數(shù)據(jù)訪問(wèn)子層的封裝是模型需要解決的主要問(wèn)題。

本文給出的模型由接口層和目錄訪問(wèn)層組成。接口層是應(yīng)用系統(tǒng)與模型的交互界面,抽象目錄訪問(wèn)操作是應(yīng)用系統(tǒng)業(yè)務(wù)實(shí)體的父類(lèi),業(yè)務(wù)實(shí)體的具體訪問(wèn)操作全部委托給下面的目錄訪問(wèn)層。目錄訪問(wèn)層即數(shù)據(jù)訪問(wèn)子層實(shí)現(xiàn)了許多具體目錄訪問(wèn)操作,如對(duì)象/條目映射(O/E映射)、數(shù)據(jù)類(lèi)型轉(zhuǎn)換等等,同時(shí)封裝了底層的LDAP目錄服務(wù)存儲(chǔ)機(jī)制,如維護(hù)與LDAP目錄服務(wù)的連接、對(duì)LDAP目錄服務(wù)的訪問(wèn)等等。

1.1 接口層

接口層提供了一套面向?qū)ο竽P偷某橄竽夸浽L問(wèn)操作集合,包括簡(jiǎn)單地創(chuàng)建對(duì)象、讀取對(duì)象、更新對(duì)象、刪除對(duì)象,以及條件或關(guān)聯(lián)的多對(duì)象實(shí)例操作。

目錄訪問(wèn)對(duì)象只提供目錄訪問(wèn)操作接口,其真正操作被委托給下層即目錄訪問(wèn)層的目錄訪問(wèn)管理器。這種處理模式結(jié)合了對(duì)象層和中間人兩種模式。在對(duì)象層模式中,每個(gè)業(yè)務(wù)實(shí)體對(duì)象繼承了@抽象的PersistentObject類(lèi),可執(zhí)行必要的CRUD操作。這種模式下,在每個(gè)業(yè)務(wù)對(duì)象類(lèi)中都要寫(xiě)一些數(shù)據(jù)服務(wù)層規(guī)范的訪問(wèn)代碼,維護(hù)比較困難,但是這種模式易于實(shí)現(xiàn)。在中間人模式中,中間人可以從數(shù)據(jù)服務(wù)層中讀取業(yè)務(wù)實(shí)體對(duì)象或?qū)?duì)象寫(xiě)入數(shù)據(jù)服務(wù)層,中間人必須知道每個(gè)業(yè)務(wù)實(shí)體對(duì)象的格式,依據(jù)數(shù)據(jù)服務(wù)層提供的訪問(wèn)規(guī)范生成語(yǔ)句去讀寫(xiě)。這種模式將數(shù)據(jù)服務(wù)層訪問(wèn)代碼和業(yè)務(wù)實(shí)體對(duì)象類(lèi)分離開(kāi)來(lái),是一種最具伸縮性的解決方案,但是需要很多基礎(chǔ)部件。

系統(tǒng)中需要持久到目錄服務(wù)的業(yè)務(wù)對(duì)象必須繼承于該接口,業(yè)務(wù)對(duì)象的實(shí)際存取操作由目錄訪問(wèn)層實(shí)現(xiàn)。因此,業(yè)務(wù)對(duì)象和目錄訪問(wèn)層之間是一種松散的耦合關(guān)系。

1.2 目錄訪問(wèn)層

目錄訪問(wèn)層從邏輯上由兩部分組成:構(gòu)建時(shí)(Build-time)部分和運(yùn)行時(shí)(Run-time)部分。構(gòu)建時(shí)部分解決系統(tǒng)開(kāi)發(fā)時(shí)所需要解決的問(wèn)題。對(duì)于本模型,所需要解決的問(wèn)題就是目錄訪問(wèn)對(duì)象和目錄條目的映射以及它們的屬性之間的映射,因此,在構(gòu)建時(shí)需要提供這兩類(lèi)映射信息,它們分別是O/E(對(duì)象/條目)映射信息和屬性映射信息。

運(yùn)行時(shí)部分解決系統(tǒng)運(yùn)行時(shí)需要解決的問(wèn)題,包括對(duì)O/E映射和屬性映射的解析、抽象目錄訪問(wèn)的解析以及數(shù)據(jù)的存取操作。這部分主要由目錄訪問(wèn)管理器、O/E映射管理器、屬性映射管理器、數(shù)據(jù)類(lèi)型管理器、目錄訪問(wèn)描述器和運(yùn)行時(shí)管理器組成。

目錄訪問(wèn)管理器是本模型的總管,它負(fù)責(zé)接收目錄訪問(wèn)對(duì)象所請(qǐng)求的目錄訪問(wèn)操作,從O/E映射管理器和屬性映射管理器中獲取目錄訪問(wèn)對(duì)象的映射信息,對(duì)目錄訪問(wèn)操作進(jìn)行解析,調(diào)用目錄訪問(wèn)描述器將面向?qū)ο蟮哪夸浽L問(wèn)操作映射到目錄服務(wù)層中可用的目錄訪問(wèn)操作,最后將目錄訪問(wèn)操作委派給運(yùn)行時(shí)管理器完成。

O/E映射管理器負(fù)責(zé)目錄訪問(wèn)對(duì)象與目錄信息樹(shù)中條目的映射管理。在系統(tǒng)啟動(dòng)時(shí),該管理器讀取O/E映射配置信息,在內(nèi)存中保存配置信息的副本。當(dāng)目錄訪問(wèn)管理器向其發(fā)送請(qǐng)求時(shí),將配置信息提供給目錄訪問(wèn)管理器。

屬性映射管理器負(fù)責(zé)目錄訪問(wèn)對(duì)象的屬性與目錄信息樹(shù)中條目的屬性之間的映射管理。在系統(tǒng)啟動(dòng)時(shí),該管理器讀取屬性映射配置信息,在內(nèi)存中保存配置信息的副本。當(dāng)目錄訪問(wèn)管理器向其發(fā)送請(qǐng)求時(shí),將配置信息提供給目錄訪問(wèn)管理器。

數(shù)據(jù)類(lèi)型管理器負(fù)責(zé)目錄訪問(wèn)對(duì)象中的數(shù)據(jù)類(lèi)型與目錄服務(wù)層中的數(shù)據(jù)類(lèi)型之間的映射管理。由于目錄訪問(wèn)對(duì)象所使用的數(shù)據(jù)類(lèi)型與條目所使用的數(shù)據(jù)類(lèi)型并不完全相同,因此有必要進(jìn)行映射以滿(mǎn)足目錄訪問(wèn)對(duì)象和條目的各種需要。該管理器服務(wù)于屬性映射管理器。

目錄訪問(wèn)描述器它將面向?qū)ο蟮哪夸浽L問(wèn)操作映射為目錄服務(wù)層中相應(yīng)的目錄訪問(wèn)操作。面向?qū)ο蟮哪夸浽L問(wèn)操作與目錄服務(wù)層的目錄訪問(wèn)操作并不完全相同,如一個(gè)面向?qū)ο蟮哪夸浽L問(wèn)操作對(duì)應(yīng)著目錄服務(wù)層的一組相關(guān)操作,因此,需要進(jìn)行這樣的映射。該目錄訪問(wèn)描述器服務(wù)于目錄訪問(wèn)管理器。

運(yùn)行時(shí)管理器面向?qū)ο蟮哪夸浽L問(wèn)操作最終要轉(zhuǎn)換為目錄訪問(wèn)層能接受的操作才能使業(yè)務(wù)對(duì)象得到持久化,運(yùn)行時(shí)管理器就是將上面轉(zhuǎn)換后的操作真正地送給目錄服務(wù)層進(jìn)行運(yùn)算。同時(shí),負(fù)責(zé)對(duì)象標(biāo)識(shí)管理和目錄連接管理等運(yùn)行時(shí)環(huán)境的管理。出于效率的考慮,在運(yùn)行時(shí)管理器中可以進(jìn)行必要的優(yōu)化,如設(shè)置連接池等等。

2 關(guān)鍵技術(shù)

2.1 數(shù)據(jù)類(lèi)型轉(zhuǎn)換

LDAP的屬性類(lèi)型和Java的數(shù)據(jù)類(lèi)型之間存在著一定的對(duì)應(yīng)關(guān)系,LDAP中給定的各種語(yǔ)法類(lèi)型都對(duì)應(yīng)于Java語(yǔ)言中的String類(lèi)型。當(dāng)將對(duì)象數(shù)據(jù)模型中的值存到LDAP目錄服務(wù)中時(shí),需要將Java語(yǔ)言中定義的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為String類(lèi)型;反之,當(dāng)LDAP目錄服務(wù)中的數(shù)據(jù)存放到對(duì)象中時(shí),需要將String類(lèi)型轉(zhuǎn)換為對(duì)象中原來(lái)定義的類(lèi)型。因此,需要一個(gè)類(lèi)型轉(zhuǎn)換器來(lái)完成這些工作。

類(lèi)型轉(zhuǎn)換器需要獲取數(shù)據(jù)的類(lèi)型配置信息,然后根據(jù)這些配置信息將數(shù)據(jù)轉(zhuǎn)換為String類(lèi)型,反之亦然。我們選用XML描述數(shù)據(jù)的類(lèi)型配置信息,將數(shù)據(jù)類(lèi)型分成三類(lèi):簡(jiǎn)單數(shù)據(jù)類(lèi)型、復(fù)雜數(shù)據(jù)類(lèi)型和數(shù)組。具體的類(lèi)型描述規(guī)范。

2.2 O/E映射

對(duì)象模型向LDAP信息模型轉(zhuǎn)換的基礎(chǔ)是對(duì)象映射為目錄條目,對(duì)象的屬性映射為條目的屬性。為了實(shí)現(xiàn)模型轉(zhuǎn)換,O/E映射需要兩類(lèi)信息,即對(duì)象類(lèi)元信息和對(duì)象域元信息。對(duì)象類(lèi)元信息存放實(shí)體類(lèi)上下文信息。對(duì)象域元信息描述了對(duì)象類(lèi)的屬性配置信息:如果是基本類(lèi)型則可以對(duì)應(yīng)為相應(yīng)目錄服務(wù)的屬性(但并不一定是一一對(duì)應(yīng));如果是實(shí)體對(duì)象,則需要在對(duì)象域元信息中填寫(xiě)相應(yīng)信息,如對(duì)象之間的關(guān)系等等。

2.3 表達(dá)能力的設(shè)計(jì)

目錄訪問(wèn)查詢(xún)操作分為簡(jiǎn)單查詢(xún)、復(fù)雜查詢(xún)和助手類(lèi)操作。簡(jiǎn)單查詢(xún)實(shí)現(xiàn)對(duì)單個(gè)對(duì)象的CRUD操作,復(fù)雜查詢(xún)則處理批量對(duì)象的操作,助手類(lèi)操作包括用戶(hù)認(rèn)證、新增用戶(hù)等LDAP常規(guī)操作。

簡(jiǎn)單查詢(xún)的實(shí)現(xiàn)可以采用兩種方式:第一種是將操作賦予對(duì)象本身,這種處理方式符合面向?qū)ο蟮牧?xí)慣;第二種是提供一個(gè)專(zhuān)門(mén)處理目錄訪問(wèn)操作的工具類(lèi),作為目錄訪問(wèn)操作的代理,執(zhí)行用戶(hù)的對(duì)象式查詢(xún)語(yǔ)句。具體采用哪種方式可以有中間件設(shè)計(jì)人員確定。

本文采用第一種方式實(shí)現(xiàn),即目錄訪問(wèn)操作作為對(duì)象的行為來(lái)實(shí)現(xiàn)目錄的訪問(wèn),具體定義示例如下:

/*

*判斷存儲(chǔ)空間是否存在指定實(shí)體Bean實(shí)例

*@param entity實(shí)體Bean實(shí)例,不能為空,否則拋出異常

*@throws如果實(shí)例的主鍵屬性未設(shè)置則拋出異常

*/

public boolean entityExists(Entity entity)throws XDOException;

3 結(jié)束語(yǔ)

本文從普遍性出發(fā),給出了解決通用目錄訪問(wèn)所涉及到的技術(shù)內(nèi)容。作為通用目錄訪問(wèn)產(chǎn)品的開(kāi)發(fā)者,也可以將文中所給模型作為參考模型,采用熟悉的語(yǔ)言和環(huán)境實(shí)現(xiàn)。本模型及其中間件被用于浙江大學(xué)數(shù)字化校園應(yīng)用中,取得了良好的效果。

主站蜘蛛池模板: 日韩人妻少妇一区二区| 久久综合干| 91小视频在线观看| 国产成人a毛片在线| 久久伊人操| 91蜜芽尤物福利在线观看| 一级成人a毛片免费播放| 四虎永久在线精品国产免费| 亚洲天堂777| 中文成人在线视频| 亚洲视频色图| 成人国内精品久久久久影院| 亚洲视频影院| 99久久国产精品无码| 国产亚洲成AⅤ人片在线观看| 久久综合亚洲鲁鲁九月天| 麻豆精品在线视频| 青青青伊人色综合久久| 狠狠亚洲五月天| 国产午夜一级毛片| 中文字幕免费在线视频| 国产综合色在线视频播放线视| 国产成人无码AV在线播放动漫 | 第一页亚洲| 69av在线| 亚洲人成成无码网WWW| 爽爽影院十八禁在线观看| jijzzizz老师出水喷水喷出| 狼友视频一区二区三区| 久久黄色小视频| 久久semm亚洲国产| 色婷婷在线播放| 四虎影视永久在线精品| 国产一级一级毛片永久| 免费观看国产小粉嫩喷水| 日韩免费毛片视频| 亚洲一区二区三区中文字幕5566| 国产精品亚洲专区一区| 国产美女在线免费观看| 最近最新中文字幕在线第一页| 国产精品视频导航| 伊人精品成人久久综合| 亚洲三级片在线看| 国产日韩丝袜一二三区| 91精品在线视频观看| 四虎永久免费在线| 国产区成人精品视频| 中文字幕调教一区二区视频| 亚洲成人在线网| 操美女免费网站| 国产第一页免费浮力影院| 国产成人精品高清在线| 伊人久久福利中文字幕| 国产精品一线天| 日日噜噜夜夜狠狠视频| 亚洲中文精品人人永久免费| 九九视频免费看| 国产精品第页| 亚洲欧洲日韩综合色天使| 香蕉色综合| 亚洲欧美一区二区三区麻豆| 亚洲一区二区黄色| 国产一级小视频| 日韩国产 在线| 激情无码字幕综合| 欧美精品黑人粗大| 欧美在线视频不卡第一页| 欧美成人午夜视频| 亚洲午夜18| 亚洲成a人片| AⅤ色综合久久天堂AV色综合| 国产青榴视频在线观看网站| 亚洲成aⅴ人在线观看| 这里只有精品在线播放| 伊人国产无码高清视频| 2048国产精品原创综合在线| 亚洲欧美另类专区| 国产高清无码麻豆精品| 国产一区二区免费播放| 国产福利在线免费| 中文字幕在线看| 波多野结衣中文字幕一区二区|