軟件體系結(jié)構(gòu)-第3章_第1頁(yè)
軟件體系結(jié)構(gòu)-第3章_第2頁(yè)
軟件體系結(jié)構(gòu)-第3章_第3頁(yè)
軟件體系結(jié)構(gòu)-第3章_第4頁(yè)
軟件體系結(jié)構(gòu)-第3章_第5頁(yè)
已閱讀5頁(yè),還剩165頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1軟件體系結(jié)構(gòu)北京理工大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院徐進(jìn)第三章2課程內(nèi)容第一章軟件體系結(jié)構(gòu)基本概念第二章軟件體系結(jié)構(gòu)經(jīng)典風(fēng)格第三章軟件體系結(jié)構(gòu)應(yīng)用框架第四章軟件體系結(jié)構(gòu)設(shè)計(jì)模式第五章軟件體系結(jié)構(gòu)研究與發(fā)展3第3章軟件體系結(jié)構(gòu)應(yīng)用框架

3.1客戶/服務(wù)器

3.2瀏覽器/服務(wù)器

3.3中間件

3.3.1

遠(yuǎn)程過(guò)程中間件

3.3.2

消息中間件

3.3.3

數(shù)據(jù)訪問(wèn)中間件

3.3.4

對(duì)象中間件

3.3.5

交易中間件

3.4面向服務(wù)的體系結(jié)構(gòu)

3.5

引擎結(jié)構(gòu)4

在經(jīng)典軟件體系結(jié)構(gòu)的基礎(chǔ)上,有一批當(dāng)前廣為使用的軟件體系結(jié)構(gòu),這些流行的軟件體系結(jié)構(gòu)大都與應(yīng)用問(wèn)題直接相關(guān),并且,是在經(jīng)典結(jié)構(gòu)的基礎(chǔ)上組態(tài)建立的。可以把它們理解為一批應(yīng)用軟件體系結(jié)構(gòu)框架。并且,這些框架結(jié)構(gòu)都有相應(yīng)的軟件獨(dú)立產(chǎn)品或包含在開發(fā)環(huán)境的工具中。各大軟件產(chǎn)品開發(fā)商,都在相互競(jìng)爭(zhēng)地、圍繞這些流行的軟件體系結(jié)構(gòu),發(fā)展自己獨(dú)特性能的構(gòu)造工具和環(huán)境,并不斷創(chuàng)造新的更具優(yōu)勢(shì)的結(jié)構(gòu)概念和輔助環(huán)境工具。軟件體系結(jié)構(gòu)應(yīng)用框架3.1客戶/服務(wù)器(Client/Server)

C/S結(jié)構(gòu)在信息產(chǎn)業(yè)的系統(tǒng)結(jié)構(gòu)中占有重要地位。是隨著網(wǎng)絡(luò)時(shí)代的發(fā)展,從集中式計(jì)算到分布式計(jì)算重大演變的產(chǎn)物。集中式計(jì)算模式使用大型機(jī)或小型機(jī)作為宿主機(jī),與非智能終端相連,實(shí)現(xiàn)運(yùn)行在宿主機(jī)上的應(yīng)用程序。宿主機(jī)上的應(yīng)用程序,既要負(fù)責(zé)用戶的交互,也要負(fù)責(zé)數(shù)據(jù)庫(kù)管理,因此,對(duì)于系統(tǒng)的造價(jià)和性能要求很高。分布式計(jì)算結(jié)構(gòu)的誕生集中式計(jì)算的性價(jià)比不能適應(yīng)大量應(yīng)用系統(tǒng)的需求,隨著微電子技術(shù)的發(fā)展,使計(jì)算機(jī)成本大幅下降,低成本高性能的PC微機(jī)的誕生,加上網(wǎng)絡(luò)技術(shù)的發(fā)展,促成了計(jì)算結(jié)構(gòu)的根本轉(zhuǎn)變。C/S結(jié)構(gòu)的產(chǎn)生,誕生了分布式計(jì)算方式。5返回本章目錄6分布式計(jì)算分布式計(jì)算系統(tǒng)是由多個(gè)自主的處理器,平行地處理所各自獨(dú)立的系統(tǒng)部分,以共同完成一個(gè)業(yè)務(wù)過(guò)程。它們之間不共享存儲(chǔ),僅通過(guò)封裝的接口傳遞消息。C/S結(jié)構(gòu)是分布式系統(tǒng)結(jié)構(gòu)。C/S結(jié)構(gòu)既是指硬件也是指軟件。在軟件中,通常用來(lái)表明一種消息交互的連接形式。7C/S結(jié)構(gòu)的消息傳遞形式

消息傳遞是分布系統(tǒng)結(jié)構(gòu)的基礎(chǔ),即客戶向服務(wù)者發(fā)送消息,客戶是消息的發(fā)送者,也是請(qǐng)求服務(wù)者;而服務(wù)器是消息的接收者,它響應(yīng)消息并執(zhí)行服務(wù),執(zhí)行結(jié)果由客戶自行取回。消息傳遞形式分為同步和異步兩種方式:同步方式:客戶發(fā)出請(qǐng)求時(shí)建立連接并保持連接,直到服務(wù)方處理完成后,取回執(zhí)行結(jié)果異步方式:客戶發(fā)出請(qǐng)求后不占用連接,服務(wù)完成時(shí),客戶得到通知取回結(jié)果8C/S體系結(jié)構(gòu)硬件示意圖Internet客戶機(jī)1打印機(jī)調(diào)制解調(diào)器服務(wù)器其他公用設(shè)備客戶機(jī)2客戶機(jī)3客戶機(jī)4客戶機(jī)5客戶機(jī)通常采用PC機(jī),在自身操作系統(tǒng)控制下執(zhí)行系統(tǒng)的應(yīng)用程序服務(wù)器需要高端計(jì)算機(jī)系統(tǒng),提供多用戶方式下的數(shù)據(jù)庫(kù)服務(wù)、文件服務(wù)、網(wǎng)絡(luò)通信、打印服務(wù)、電傳及傳真等設(shè)備服務(wù)。9

數(shù)據(jù)庫(kù)

應(yīng)用接口

數(shù)據(jù)庫(kù)系統(tǒng)

Core

多用戶操作系統(tǒng)網(wǎng)絡(luò)連接ServerClientC/S體系結(jié)構(gòu)軟件示意圖

用戶界面處理

應(yīng)用系統(tǒng)

數(shù)據(jù)庫(kù)系統(tǒng)

運(yùn)行環(huán)境FormReportSQL

操作系統(tǒng)接口…早期的C/S結(jié)構(gòu)是資源不對(duì)等結(jié)構(gòu),常被稱為“胖客戶機(jī)結(jié)構(gòu)”客戶處理機(jī)擔(dān)任應(yīng)用程序的全部系統(tǒng)處理,包括:操作交互,業(yè)務(wù)界面邏輯、應(yīng)用業(yè)務(wù)邏輯,以及數(shù)據(jù)處理的所有系統(tǒng)功能。服務(wù)處理機(jī)擔(dān)任多個(gè)客戶應(yīng)用的數(shù)據(jù)管理,包括:應(yīng)用請(qǐng)求響應(yīng)服務(wù)、數(shù)據(jù)庫(kù)服務(wù)器、網(wǎng)絡(luò)服務(wù)。10C/S服務(wù)器提供的主要服務(wù)客戶應(yīng)用服務(wù):針對(duì)特定的應(yīng)用執(zhí)行處理邏輯,提供與外界的交互傳輸轉(zhuǎn)發(fā)、向數(shù)據(jù)庫(kù)提交操作請(qǐng)求并接收返回結(jié)果。數(shù)據(jù)庫(kù)服務(wù):數(shù)據(jù)庫(kù)安全性、訪問(wèn)并發(fā)性、與前端客戶應(yīng)用的數(shù)據(jù)完整性,以及數(shù)據(jù)庫(kù)備份與恢復(fù)等系統(tǒng)資源管理。網(wǎng)絡(luò)服務(wù):完成數(shù)據(jù)庫(kù)服務(wù)器和客戶應(yīng)用程序之間的數(shù)據(jù)傳輸。C/S服務(wù)器提供的三種通信方式會(huì)話:類似打電話,建立交換通道,處理完整的業(yè)務(wù)交易過(guò)程消息通訊:處理事件中斷請(qǐng)求的異步進(jìn)程通訊,用消息隊(duì)列實(shí)現(xiàn)進(jìn)程訪問(wèn)(包括本地進(jìn)程和遠(yuǎn)程進(jìn)程)遠(yuǎn)程過(guò)程調(diào)用:處理遠(yuǎn)端另一汲取空間的控制流連接訪問(wèn)的調(diào)用進(jìn)程11C/S服務(wù)器結(jié)構(gòu)示意SQL/ID_APITxRPCM_APIORB專項(xiàng)服務(wù)SNMPCMIPDME分布系統(tǒng)管理(DSM)DirectorySecurityRPCMessaging網(wǎng)絡(luò)操作系統(tǒng)D_FileNetBIOSTCP/IPIPX/SPX傳送堆SNAP2PClientGUI/OOUIDSMOSServerObjectDSMOSGroupWareOLTPDBMS通信服務(wù)GUI/OOUI:圖形用戶接口/面向?qū)ο笥脩艚涌贠bject:對(duì)象服務(wù)GroupWare:群件服務(wù)OLTP(OnLineTransactionProcess)聯(lián)機(jī)事務(wù)處理服務(wù)DBMS(DataBaseManagementSystem)數(shù)據(jù)庫(kù)管理系統(tǒng)服務(wù)12C/S服務(wù)器的5類基本服務(wù):DBMS服務(wù):也叫SQL服務(wù),接受客戶傳來(lái)的SQL要求并找到所需的數(shù)據(jù),通過(guò)網(wǎng)絡(luò)送回每條SQL命令的結(jié)果。其中也包括文件服務(wù),提供數(shù)據(jù)服務(wù)的最原始形式,用于網(wǎng)絡(luò)上共享文件的大數(shù)據(jù)對(duì)象的信息庫(kù)OLTP服務(wù):采用兩階段提交協(xié)議,實(shí)現(xiàn)事務(wù)的完整性以及數(shù)據(jù)的一致性保護(hù)。GroupWare服務(wù):管理以組為單位的分布的信息,組成分的訪問(wèn)通常有:公告板、電子郵件、工作流的等。Object服務(wù):通過(guò)ORB(ObjectRequestBroker),實(shí)現(xiàn)客戶與服務(wù)器對(duì)象訪問(wèn)形式。13?專項(xiàng)服務(wù)(SpecialService):提供沒有統(tǒng)一標(biāo)準(zhǔn)的服務(wù)。包括:SQL/ID_API:提供可跨越多廠商的數(shù)據(jù)訪問(wèn)TxRPC:Tuxedo標(biāo)準(zhǔn)的多種交易遠(yuǎn)程過(guò)程調(diào)用M_API:各廠商的多種電子郵件應(yīng)用接口ORB:

(ObjectRequestBroker)各廠商的對(duì)象請(qǐng)求代理?分布系統(tǒng)管理(DSM):提供自主管理監(jiān)視網(wǎng)絡(luò)運(yùn)行的工作臺(tái),包括:SNMP:簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SimpleNetworkManagementProtocol)CMIP:公共管理信息協(xié)議(CommonManagementInformationProtocol)DME:管理工作臺(tái)(DeskManagementEquip)C/S服務(wù)器的4層通信服務(wù)14?網(wǎng)絡(luò)操作系統(tǒng)(NOS):管理聯(lián)網(wǎng)設(shè)備,提供網(wǎng)絡(luò)資源查找,協(xié)調(diào)網(wǎng)上交互,包括:Directory:目錄名字服務(wù)Security:分布安全認(rèn)證服務(wù)DistributedFile:分布文件查找服務(wù)RPC:遠(yuǎn)程交互服務(wù)Messaging:消息服務(wù)PeertoPeer:對(duì)等服務(wù)?傳輸堆(TransportStack):提供一套普遍適用的傳輸協(xié)議,包括:NetBIOS:網(wǎng)絡(luò)基礎(chǔ)輸入輸出系統(tǒng)TCP/IP:(transmissionControlProtocol/InternetProtocol)IPX/SPX:

(InternetPacketExchange/SequencedPacketExchange)

Novell標(biāo)準(zhǔn)SNA:

(SystemNetwareArchitecture)IBM標(biāo)準(zhǔn)15應(yīng)用界面程序業(yè)務(wù)處理程序輸入數(shù)據(jù)輸出數(shù)據(jù)請(qǐng)求操作業(yè)務(wù)處理開始業(yè)務(wù)存取請(qǐng)求業(yè)務(wù)處理結(jié)束數(shù)據(jù)處理開始數(shù)據(jù)存取請(qǐng)求數(shù)據(jù)處理結(jié)束數(shù)據(jù)存取程序SQL請(qǐng)求開始SQL請(qǐng)求結(jié)束DBMS執(zhí)行SQL數(shù)據(jù)管理業(yè)務(wù)處理數(shù)據(jù)登陸/更新/讀取數(shù)據(jù)請(qǐng)求登陸/更新/讀取操作結(jié)果數(shù)據(jù)業(yè)務(wù)處理結(jié)果數(shù)據(jù)ClientServer業(yè)務(wù)處理請(qǐng)求兩層C/S結(jié)構(gòu)的處理流程集中在Client側(cè)的應(yīng)用系統(tǒng)程序之間,采用的共享內(nèi)存的本地過(guò)程調(diào)用LPC(LocalProcedureCall)訪問(wèn)方式。16服務(wù)器處理應(yīng)用程序C/S結(jié)構(gòu)的傳輸壓力由于全部應(yīng)用程序都在Client端,有時(shí),一個(gè)數(shù)據(jù)查詢的循環(huán)過(guò)程需要很多的、大的數(shù)據(jù)集合,造成大量的數(shù)據(jù)傳輸網(wǎng)絡(luò)壓力。過(guò)程存儲(chǔ)和遠(yuǎn)程調(diào)用:將大循環(huán)的數(shù)據(jù)庫(kù)訪問(wèn)以獨(dú)立過(guò)程的方式存儲(chǔ)在Serve端,叫做“過(guò)程存儲(chǔ)”兩個(gè)空間的進(jìn)程間的訪問(wèn),采用

RPC(RemoteProcedureCall)

遠(yuǎn)程過(guò)程調(diào)用使兩個(gè)地址空間的操作協(xié)同工作,可減少網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)膲毫?。過(guò)程存儲(chǔ)和遠(yuǎn)程調(diào)用示意SQL查詢請(qǐng)求SQL過(guò)程存儲(chǔ)RPC網(wǎng)絡(luò)傳輸ClientServer17遠(yuǎn)程過(guò)程調(diào)用RPC基本原理

RPC是通過(guò)本地進(jìn)程代理,連接網(wǎng)絡(luò)傳輸,發(fā)送過(guò)程調(diào)用請(qǐng)求,通過(guò)遠(yuǎn)端進(jìn)程代理連接執(zhí)行進(jìn)程,并得到響應(yīng)處理的LPC是進(jìn)程間通過(guò)共享內(nèi)存實(shí)現(xiàn)的RPC和LPC本質(zhì)上是相同的調(diào)用方式因?yàn)?,無(wú)論是本地共享內(nèi)存的調(diào)用,還是遠(yuǎn)程網(wǎng)絡(luò)間的通信連接,除了轉(zhuǎn)接方式的不同,其形式都是控制流連接的調(diào)用結(jié)構(gòu)。進(jìn)程代理機(jī)器ARPC網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)程A3進(jìn)程A2進(jìn)程A1LPC任務(wù)進(jìn)程進(jìn)程代理機(jī)器BLPC18服務(wù)器代理:完成數(shù)據(jù)包接收。分析數(shù)據(jù)格式,取出調(diào)用對(duì)象的過(guò)程名、參數(shù)等,搜索被調(diào)用過(guò)程地址,調(diào)用后,取回結(jié)果打包備用??蛻魴C(jī)代理:完成請(qǐng)求信息的打包(對(duì)象、調(diào)用過(guò)程名、參數(shù)),發(fā)送給接收進(jìn)程。進(jìn)程代理服務(wù)器RPC網(wǎng)絡(luò)數(shù)據(jù)包服務(wù)進(jìn)程3服務(wù)進(jìn)程2服務(wù)進(jìn)程1LPC任務(wù)進(jìn)程進(jìn)程代理客戶機(jī)LPCRPC進(jìn)程代理機(jī)制

1919應(yīng)用界面處理輸入數(shù)據(jù)輸出數(shù)據(jù)請(qǐng)求操作業(yè)務(wù)處理開始業(yè)務(wù)存取請(qǐng)求業(yè)務(wù)處理結(jié)束數(shù)據(jù)存取請(qǐng)求數(shù)據(jù)處理SQL請(qǐng)求開始SQL請(qǐng)求結(jié)束DBMS執(zhí)行SQL業(yè)務(wù)處理請(qǐng)求和業(yè)務(wù)處理所需要的全部輸入數(shù)據(jù)登陸/更新/讀取的數(shù)據(jù)請(qǐng)求登陸/更新/讀取的數(shù)據(jù)結(jié)果全部數(shù)據(jù)處理結(jié)束Client應(yīng)用服務(wù)器數(shù)據(jù)服務(wù)器三層C/S結(jié)構(gòu)處理流程server20隨著Internet的發(fā)展廣域網(wǎng)應(yīng)用日益繁多。C/S結(jié)構(gòu)不能適應(yīng)新的需求:?多節(jié)點(diǎn)傳輸?shù)膹V域網(wǎng)應(yīng)用,不能適應(yīng)以特定服務(wù)局域網(wǎng)應(yīng)用為中心的專項(xiàng)應(yīng)用及交互操作方式。需要除了專項(xiàng)應(yīng)用以外,還能夠及時(shí)轉(zhuǎn)換廣域網(wǎng)上的其他應(yīng)用形式和操作訪問(wèn)。?多節(jié)點(diǎn)廣域網(wǎng)的應(yīng)用系統(tǒng),不能要求前端應(yīng)用限定在特定數(shù)據(jù)庫(kù)信息格式的客戶應(yīng)用系統(tǒng)中,需要能以多種數(shù)據(jù)格式、應(yīng)對(duì)各種數(shù)據(jù)訪問(wèn)操作。3.2瀏覽器/服務(wù)器(Browser/Server)返回本章目錄21Internet遠(yuǎn)端客戶機(jī)Intranet

應(yīng)用B遠(yuǎn)端客戶機(jī)廣域網(wǎng)絡(luò)應(yīng)用示意客戶機(jī)1客戶機(jī)2客戶機(jī)n服務(wù)器Intranet

應(yīng)用A客戶機(jī)1客戶機(jī)n服務(wù)器……直接交互式訪問(wèn)跨越廣域網(wǎng)的多種應(yīng)用系統(tǒng)22B/S體系結(jié)構(gòu)技術(shù)要點(diǎn):利用成熟的WWW(WorldWideWeb)技術(shù)沿用和擴(kuò)展C/S體系結(jié)構(gòu)應(yīng)用系統(tǒng)可跨越廣域地區(qū)實(shí)現(xiàn)操作交互客戶端對(duì)服務(wù)端的運(yùn)行系統(tǒng)數(shù)據(jù)庫(kù)不受限23WWW技術(shù)基本原理瀏覽器作為系統(tǒng)前端,僅負(fù)責(zé)操作請(qǐng)求發(fā)送及處理信息展示瀏覽器采用超文本標(biāo)記語(yǔ)言HTML(HypertextMarkupLanguage),以互聯(lián)網(wǎng)絡(luò)上全體共識(shí)的格式展現(xiàn)信息服務(wù)器以多用戶處理方式響應(yīng)瀏覽器請(qǐng)求,執(zhí)行搜索、整理和存儲(chǔ)各種WWW資源工作瀏覽器和服務(wù)器的傳送機(jī)制,仍然是C/S結(jié)構(gòu)的消息傳遞機(jī)制24B/S體系結(jié)構(gòu)邏輯示意客戶瀏覽器3

InternetWeb服務(wù)器應(yīng)用服務(wù)1數(shù)據(jù)服務(wù)3應(yīng)用服務(wù)n……數(shù)據(jù)服務(wù)2數(shù)據(jù)服務(wù)1……

數(shù)據(jù)服務(wù)器數(shù)據(jù)庫(kù)……客戶瀏覽器2客戶瀏覽器1服務(wù)器

Web應(yīng)用服務(wù)器在原有C/S結(jié)構(gòu)上增加Web應(yīng)用服務(wù)器,它除了WWW服務(wù)器的功能外,需要應(yīng)用瀏覽器界面處理、應(yīng)用系統(tǒng)的處理邏輯、和數(shù)據(jù)庫(kù)信息轉(zhuǎn)換數(shù)據(jù)服務(wù)器基本保留C/S結(jié)構(gòu)的數(shù)據(jù)服務(wù)功能25客戶瀏覽器1)用統(tǒng)一資源定位器URL來(lái)識(shí)別對(duì)應(yīng)請(qǐng)求的Web服務(wù)器2)通過(guò)解釋HTML頁(yè)面來(lái)顯示信息3)用超文本傳輸協(xié)議HTTP來(lái)傳輸請(qǐng)求4)取回處理結(jié)果,轉(zhuǎn)換成HTML頁(yè)面信息服務(wù)器各個(gè)業(yè)務(wù)的處理包裝成對(duì)應(yīng)的應(yīng)用服務(wù),并執(zhí)行下列任務(wù):1)驗(yàn)證客戶端的業(yè)務(wù)請(qǐng)求,進(jìn)行界面邏輯處理2)進(jìn)行相應(yīng)的業(yè)務(wù)邏輯處理3)發(fā)送必要的請(qǐng)求給數(shù)據(jù)服務(wù)器,并取回結(jié)果數(shù)據(jù)4)按事先給定的結(jié)果頁(yè)面準(zhǔn)備好執(zhí)行結(jié)果數(shù)據(jù)服務(wù)器對(duì)應(yīng)的數(shù)據(jù)服務(wù)接受數(shù)據(jù)請(qǐng)求,與數(shù)據(jù)庫(kù)及文件系統(tǒng)交互,建立并管理數(shù)據(jù),執(zhí)行檢索、修改、刪除等數(shù)據(jù)操作26兩層B/S體系結(jié)構(gòu)存在的問(wèn)題?每個(gè)應(yīng)用服務(wù)的表示邏輯和處理邏輯緊密相關(guān),使修改牽扯面大,單獨(dú)復(fù)用困難?業(yè)務(wù)信息的顯示格式是以全體共識(shí)的方式直接被瀏覽器取回的,因此,系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)安全性差?Web服務(wù)器權(quán)力集中:處理業(yè)務(wù)加上處理傳輸,使負(fù)載過(guò)大,系統(tǒng)的性能下降,回避風(fēng)險(xiǎn)的能力降低。B/S結(jié)構(gòu)的多層體系結(jié)構(gòu)基于上面的問(wèn)題,對(duì)Web服務(wù)進(jìn)行了分解,分成兩層或多層方式,以減輕壓力,降低風(fēng)險(xiǎn),提高安全性以及可復(fù)用性。27Web服務(wù)器:輸入數(shù)據(jù)校驗(yàn)數(shù)據(jù)規(guī)范化會(huì)話管理等應(yīng)用服務(wù)器:

數(shù)據(jù)訪問(wèn)邏輯

業(yè)務(wù)處理邏輯異步通訊保等數(shù)據(jù)服務(wù)器:

數(shù)據(jù)存取數(shù)據(jù)檢索數(shù)據(jù)修正等服務(wù)器客戶瀏覽器n

Internet

應(yīng)用服務(wù)器業(yè)務(wù)處理1數(shù)據(jù)服務(wù)3業(yè)務(wù)處理n……數(shù)據(jù)服務(wù)2數(shù)據(jù)服務(wù)1……

數(shù)據(jù)服務(wù)器數(shù)據(jù)庫(kù)……客戶瀏覽器2Web服務(wù)器客戶瀏覽器1界面邏輯1界面邏輯n多層B/S體系結(jié)構(gòu)……28?數(shù)據(jù)驗(yàn)證:確保數(shù)據(jù)在提交前的正確有效性?數(shù)據(jù)過(guò)濾:輸入數(shù)據(jù)轉(zhuǎn)換、過(guò)濾空格、大小寫轉(zhuǎn)換等?會(huì)話管理:session保證一項(xiàng)活動(dòng)的集合完整處理,即操作頁(yè)面間正確地傳遞與轉(zhuǎn)發(fā)信息導(dǎo)航控制:保證應(yīng)用程序的頁(yè)面導(dǎo)航控制流?錯(cuò)誤處理:處理出錯(cuò),并控制正確返回?生成顯示信息:根據(jù)任務(wù)請(qǐng)求動(dòng)作,生成顯示信息?輸出格式化:轉(zhuǎn)換為瀏覽器顯示格式數(shù)據(jù)有效驗(yàn)證輸出格式化數(shù)據(jù)過(guò)濾會(huì)話管理生成顯示信息導(dǎo)航控制錯(cuò)誤處理應(yīng)用服務(wù)器Web服務(wù)器結(jié)構(gòu)表示層29應(yīng)用服務(wù)器結(jié)構(gòu)應(yīng)用系統(tǒng)

業(yè)務(wù)處理核心應(yīng)用服務(wù):

構(gòu)件管理器

對(duì)象請(qǐng)求代理

數(shù)據(jù)庫(kù)服務(wù)

安全服務(wù)

事務(wù)管理器

數(shù)據(jù)庫(kù)1

數(shù)據(jù)庫(kù)2

數(shù)據(jù)庫(kù)3?支持將后端的應(yīng)用程序綁定到多種不同的客戶機(jī)?處理事務(wù)在分布式系統(tǒng)的各部分異步通信的機(jī)制?提供核心應(yīng)用服務(wù)?提供描述服務(wù)以及定義服務(wù)接口?安裝應(yīng)用部署機(jī)制應(yīng)用邦定機(jī)制異步通信機(jī)制可定義的服務(wù)接口部署應(yīng)用服務(wù)機(jī)制Web服務(wù)器數(shù)據(jù)服務(wù)器

業(yè)務(wù)層30C/S和B/S結(jié)構(gòu)的物理分布界面邏輯數(shù)據(jù)處理界面邏輯服務(wù)器2業(yè)務(wù)功能業(yè)務(wù)功能應(yīng)用處理服務(wù)器1客戶機(jī)瀏覽器交互操作界面邏輯業(yè)務(wù)功能數(shù)據(jù)處理數(shù)據(jù)處理數(shù)據(jù)處理交互操作交互操作瀏覽器界面邏輯業(yè)務(wù)功能數(shù)據(jù)處理C/S結(jié)構(gòu)B/S結(jié)構(gòu)31?多層體系結(jié)構(gòu)的優(yōu)勢(shì)使系統(tǒng)邏輯上保持相對(duì)獨(dú)立的結(jié)構(gòu),便于維護(hù)和擴(kuò)充允許更靈活地選用軟件平臺(tái)和硬件環(huán)境,以適應(yīng)不斷變化的需求。各層的開發(fā)可以并行,并且能較高地復(fù)用已有的各層部件。表示層通過(guò)業(yè)務(wù)邏輯層與數(shù)據(jù)層交往,隔離了與應(yīng)用邏輯相關(guān)的數(shù)據(jù)結(jié)構(gòu),使系統(tǒng)安全性提高。多層體系結(jié)構(gòu)的不足各層間的通訊效率是系統(tǒng)的最大問(wèn)題,合理規(guī)劃系統(tǒng)的各層位置和作用至關(guān)重要。32中間件的產(chǎn)生中間件的產(chǎn)生與C/S結(jié)構(gòu)的發(fā)展密不可分。由于C/S環(huán)境存在著操作系統(tǒng)、文件格式、網(wǎng)絡(luò)協(xié)議、服務(wù)等相互多元異構(gòu)的問(wèn)題,產(chǎn)生中間的構(gòu)想。中間件的概念

中間件泛指能夠屏蔽操作系統(tǒng)和網(wǎng)絡(luò)差異,為異構(gòu)環(huán)境之間提供通信服務(wù)的軟件,是具有通信和可擴(kuò)展能力的分布式軟件管理框架。3.3中間件返回本章目錄中間件的目標(biāo)在中間件環(huán)境下開發(fā)的程序,具有在相對(duì)穩(wěn)定的應(yīng)用框架獨(dú)立接口,在計(jì)算機(jī)和系統(tǒng)軟件需要升級(jí)換代或者需要與其它符合中間件標(biāo)準(zhǔn)的系統(tǒng)連接時(shí),都無(wú)需內(nèi)部改動(dòng),改變的只是中間件替換或轉(zhuǎn)換接口。33中間件產(chǎn)品支持分布式軟件的管理框架具有標(biāo)準(zhǔn)接口和協(xié)議的通用服務(wù)符合中間件標(biāo)準(zhǔn)的構(gòu)件開發(fā)工具包中間件技術(shù)包括中間件本身的體系結(jié)構(gòu)和實(shí)現(xiàn)技術(shù)中間件的開發(fā)標(biāo)準(zhǔn)能在中間件機(jī)制上運(yùn)行的應(yīng)用系統(tǒng)開發(fā)的相關(guān)技術(shù)中間件技術(shù)的主要精力由于Web技術(shù)的出現(xiàn),使用超文本傳輸?shù)臑g覽器技術(shù),使前端操作的異構(gòu)難題得以解決,因此,中間件技術(shù)的主要精力集中在Web服務(wù)和數(shù)據(jù)服務(wù)器的連接上

異構(gòu)/同構(gòu)環(huán)境34中間件的工作機(jī)理中間件

數(shù)據(jù)服務(wù)A

數(shù)據(jù)服務(wù)B

數(shù)據(jù)服務(wù)W

應(yīng)用服務(wù)1

應(yīng)用服務(wù)2

應(yīng)用服務(wù)n……?無(wú)論數(shù)據(jù)服務(wù)在什么地方、處在什么操作系統(tǒng)、什么數(shù)據(jù)庫(kù)環(huán)境下,應(yīng)用服務(wù)只需訪問(wèn)中間件,由中間件通過(guò)網(wǎng)絡(luò)協(xié)議獲得必要的數(shù)據(jù)服務(wù)。?中間件負(fù)責(zé)完成:通過(guò)網(wǎng)絡(luò)協(xié)議查找數(shù)據(jù)服務(wù)傳送應(yīng)用服務(wù)請(qǐng)求服務(wù)結(jié)果返回到應(yīng)用服務(wù)請(qǐng)求35中間件的基本框架

應(yīng)用接口(API)

中間件服務(wù)層通信,控制,計(jì)算,管理,輸出、信息等

應(yīng)用平臺(tái)層(Unix,NetWare,NT,VAX,OpenVMS等)

傳輸協(xié)議層(TCP/IP,IPX/SPX,NetBIOS,OSI等)傳輸協(xié)議層:提供各種傳輸協(xié)議,實(shí)現(xiàn)各種機(jī)型及網(wǎng)絡(luò)之間的通信應(yīng)用平臺(tái)層:支持中間件運(yùn)行的各種平臺(tái),實(shí)現(xiàn)應(yīng)用跨平臺(tái)操作中間件服務(wù)層:提供中間件的各種標(biāo)準(zhǔn)服務(wù)。(包括6項(xiàng)基本的服務(wù))應(yīng)用接口層:應(yīng)用程序接口定義,包括編程語(yǔ)言、系統(tǒng)環(huán)境和交互機(jī)制第一層第二層第三層第四層36服務(wù)層提供的6項(xiàng)服務(wù):通信服務(wù):能和本地或遠(yuǎn)端應(yīng)用進(jìn)行通信。包括遠(yuǎn)程過(guò)程調(diào)用服務(wù)、消息隊(duì)列服務(wù)、傳輸服務(wù)(郵件、電子數(shù)據(jù)交換等)??刂品?wù):能在本地或遠(yuǎn)端分布環(huán)境中控制程序執(zhí)行。包括:多線程服務(wù)、連續(xù)計(jì)算服務(wù)、目標(biāo)代理服務(wù)、事務(wù)處理等。計(jì)算服務(wù):能進(jìn)行復(fù)雜計(jì)算的國(guó)際化應(yīng)用,包括不同字符集、不同時(shí)區(qū)時(shí)間等同步操作保障機(jī)制。管理服務(wù):包括安全管理服務(wù)、系統(tǒng)管理服務(wù)、網(wǎng)絡(luò)管理服務(wù)。輸出服務(wù):顯示信息服務(wù)和用戶交互服務(wù),包括圖形、終端類型轉(zhuǎn)換、打印轉(zhuǎn)換等。信息服務(wù):能定義存取數(shù)據(jù)信息格式,支持多種存取機(jī)制,包括文件、目錄和數(shù)據(jù)存取。37中間件的分類按照中間件的不同用途,可以分為五類:遠(yuǎn)程過(guò)程調(diào)用中間件:采用調(diào)用遠(yuǎn)端的進(jìn)程方式消息中間件:采用消息機(jī)制的異步遠(yuǎn)端服務(wù)進(jìn)程訪問(wèn)數(shù)據(jù)訪問(wèn)中間件:實(shí)現(xiàn)不同廠家異地?cái)?shù)據(jù)庫(kù)的訪問(wèn)對(duì)象中間件:以對(duì)象組件方式在異構(gòu)環(huán)境下互訪交易中間件:解決分布事務(wù)處理的有關(guān)問(wèn)題中間件的重點(diǎn)發(fā)展趨向目前,基于對(duì)象構(gòu)件的中間件,對(duì)于Internet應(yīng)用的支持占據(jù)主導(dǎo)地位。各種不同用途中間件的集成和綜合是發(fā)展方向。38SkeletonRPCAPI

數(shù)據(jù)服務(wù)過(guò)程

數(shù)據(jù)庫(kù)系統(tǒng)

操作系統(tǒng)StubRPCAPI

應(yīng)用系統(tǒng)

操作系統(tǒng)異構(gòu)環(huán)境數(shù)據(jù)服務(wù)應(yīng)用服務(wù)應(yīng)用服務(wù)通過(guò)產(chǎn)生的stub,對(duì)虛擬的數(shù)據(jù)服務(wù)名字地址編址,并代理向指定的數(shù)據(jù)服務(wù)請(qǐng)求,接收響應(yīng),并取回執(zhí)行結(jié)果。數(shù)據(jù)服務(wù)通過(guò)產(chǎn)生的skeleton,代理接收請(qǐng)求,連接實(shí)際的數(shù)據(jù)服務(wù)執(zhí)行過(guò)程,返回執(zhí)行響應(yīng)。stub和skeleton通過(guò)IDL(InterfaceDescriptionLanguage)編譯產(chǎn)生3.3.1

遠(yuǎn)程過(guò)程調(diào)用RPC(RemoteProcedureCall)中間件返回本章目錄39IDL規(guī)范IDL編譯器Header文件Header文件

應(yīng)用服務(wù)

數(shù)據(jù)服務(wù)StubSkeletonRPC建立連接的方式:提供接口定義語(yǔ)言IDL,用以描述遠(yuǎn)端的數(shù)據(jù)服務(wù)接口。通過(guò)IDL編譯,生成遠(yuǎn)程服務(wù)的本地代理Stub,以及遠(yuǎn)端服務(wù)的Skeleton,建立本地應(yīng)用與遠(yuǎn)端服務(wù)之間的代理連接關(guān)系40遠(yuǎn)程過(guò)程調(diào)用工作流程

應(yīng)用服務(wù)運(yùn)行

應(yīng)用服務(wù)繼續(xù)運(yùn)行

數(shù)據(jù)服務(wù)調(diào)用

服務(wù)過(guò)

程執(zhí)行

過(guò)程返回RPC

RequestRPC

ReplyWait遠(yuǎn)程過(guò)程調(diào)用的特點(diǎn)Request-Wait-Reply的同步調(diào)用方式對(duì)于多網(wǎng)絡(luò)連接、網(wǎng)絡(luò)故障、可移植性、緩沖流量等問(wèn)題,沒有相應(yīng)的處理。413.3.2

消息中間件MOM(MessageOrientedMiddleware)?消息中間件(也稱:消息隊(duì)列中間件)是為滿足異步遠(yuǎn)程分布系統(tǒng)而設(shè)立的。?消息中間件是以TCP/IP網(wǎng)絡(luò)為基礎(chǔ),處于網(wǎng)絡(luò)應(yīng)用層,建立在網(wǎng)絡(luò)應(yīng)用程序(NAP)之下,提供分布式應(yīng)用服務(wù)的。?消息中間件的異步通信是按照消息隊(duì)列轉(zhuǎn)發(fā)的工作原理實(shí)現(xiàn)的。NAPMOMTCPIPX.25SLIPPPP……應(yīng)用層傳輸層網(wǎng)絡(luò)層網(wǎng)絡(luò)接口返回本章目錄42消息的基本概念消息:定義的一個(gè)數(shù)據(jù)結(jié)構(gòu),由消息頭信息和體信息組成頭信息:起控制作用。包括標(biāo)識(shí)、類型、隊(duì)列名、時(shí)間等體信息:應(yīng)用程序通信的數(shù)據(jù),對(duì)中間件無(wú)意義隊(duì)列名:包括目的隊(duì)列名和返回隊(duì)列名目的隊(duì)列名:接收消息的隊(duì)列名返回隊(duì)列名:需要得到反饋消息的才有此項(xiàng)?消息分為3類:請(qǐng)求消息:向進(jìn)程發(fā)請(qǐng)求數(shù)據(jù),要求對(duì)方有應(yīng)答應(yīng)答消息:對(duì)請(qǐng)求消息的響應(yīng)通知消息:不需要應(yīng)答的消息消息中間件的兩種消息機(jī)制消息傳遞機(jī)制消息隊(duì)列機(jī)制43消息傳遞機(jī)制也叫“發(fā)布/訂閱”(publish/subscribe)準(zhǔn)異步方式發(fā)布:數(shù)據(jù)服務(wù)將提供的服務(wù)以主題方式發(fā)布到中間件,并在中間件的控制下提供服務(wù)訂閱:應(yīng)用服務(wù)可向中間件登記感興趣的主題,并通過(guò)中間件收到相應(yīng)主題的數(shù)據(jù)服務(wù)。

數(shù)據(jù)服務(wù)1消息路由……中間件數(shù)據(jù)服務(wù)A……主題登記主題登記主題登記主題發(fā)布主題發(fā)布主題發(fā)布準(zhǔn)異步:要求在建立連接的基礎(chǔ)上通信,保持一定程度的同步方式,能有效容錯(cuò)。本地應(yīng)用遠(yuǎn)程應(yīng)用

數(shù)據(jù)服務(wù)1

數(shù)據(jù)服務(wù)n數(shù)據(jù)服務(wù)B數(shù)據(jù)服務(wù)M44允許在不建立連接的情況下發(fā)送和接收消息。服務(wù)請(qǐng)求以及對(duì)應(yīng)的響應(yīng)執(zhí)行服務(wù),都需要保存在消息中間件的隊(duì)列機(jī)制中。中間件的隊(duì)列機(jī)制,包括:隊(duì)列管理、消息觸發(fā)、消息通道代理、消息路由排隊(duì)和消息隊(duì)列接口。消息隊(duì)列機(jī)制本地應(yīng)用消息隊(duì)列接口隊(duì)列管理消息路由排隊(duì)消息通道代理消息觸發(fā)中間件隊(duì)列管理消息路由排隊(duì)消息通道代理消息觸發(fā)消息隊(duì)列接口遠(yuǎn)程應(yīng)用網(wǎng)絡(luò)應(yīng)用隊(duì)列組傳輸隊(duì)列組應(yīng)用隊(duì)列組傳輸隊(duì)列組45消息隊(duì)列管理消息路由排隊(duì)消息通道代理負(fù)責(zé)創(chuàng)建和刪除隊(duì)列,控制和維護(hù)消息路由排隊(duì)和消息通道。記錄活動(dòng)日志。按照路由算法,安排消息排隊(duì)的去向。算法:如果消息隊(duì)列名屬于本地,則放入對(duì)應(yīng)的應(yīng)用隊(duì)列,否則放入對(duì)應(yīng)的傳輸隊(duì)列。采用握手式通信,連接接收方和發(fā)送方,傳送消息并負(fù)責(zé)接收消息的應(yīng)答。探測(cè)和獲得網(wǎng)絡(luò)故障,負(fù)責(zé)暫存消息并待恢復(fù)網(wǎng)絡(luò)連接時(shí)重發(fā)消息。46消息觸發(fā)機(jī)制消息到達(dá)與應(yīng)用程序的活動(dòng)狀態(tài)并不總是一致的。觸發(fā)機(jī)制用以激活處于休眠狀態(tài)的應(yīng)用程序。在應(yīng)用隊(duì)列中的消息,在滿足一定的條件時(shí),才觸發(fā)相應(yīng)的應(yīng)用執(zhí)行程序。為達(dá)到動(dòng)態(tài)觸發(fā),該機(jī)制中設(shè)有啟動(dòng)隊(duì)列和觸發(fā)消息,以及觸發(fā)監(jiān)控器。

應(yīng)用隊(duì)列滿足條件判斷

應(yīng)用程序

觸發(fā)監(jiān)控器啟動(dòng)隊(duì)列接收消息觸發(fā)消息取出消息激活命令滿足條件47消息隊(duì)列接口提供一組中間件接口函數(shù),以操作消息隊(duì)列ConnectQM()完成運(yùn)行進(jìn)程到隊(duì)列管理器的連接OpenQueue()打開一個(gè)消息隊(duì)列SendRequest()將請(qǐng)求消息放入發(fā)送消息隊(duì)列ReceiveRequest()從接收消息隊(duì)列讀取請(qǐng)求消息SendReply()將應(yīng)答消息發(fā)送到發(fā)送消息隊(duì)列ReceiveReply()從接收消息隊(duì)列讀取應(yīng)答消息SendReport()將通知消息放入發(fā)送消息隊(duì)列ReceiveReport()從發(fā)送消息隊(duì)列讀取通知消息PropertySet()設(shè)置一個(gè)消息隊(duì)列對(duì)象的屬性PropertyQuery()查詢一個(gè)消息隊(duì)列對(duì)象的屬性CloseQueue()關(guān)閉一個(gè)打開的隊(duì)列DisconnectQM()將運(yùn)行進(jìn)程與隊(duì)列管理器斷開48消息隊(duì)列算法①通過(guò)消息隊(duì)列接口接收消息②檢查目的隊(duì)列名中的隊(duì)列管理器名是否本地地址③是本地地址,將消息列入對(duì)應(yīng)名字的應(yīng)用隊(duì)列,轉(zhuǎn)⑦④不是本地地址,將消息列入對(duì)應(yīng)名字的傳輸隊(duì)列⑤消息通道代理將傳輸隊(duì)列中的消息傳遞給遠(yuǎn)程中間件系統(tǒng)⑥遠(yuǎn)程的中間件同樣執(zhí)行該算法的過(guò)程⑦應(yīng)用程序通過(guò)消息隊(duì)列接口,從應(yīng)用隊(duì)列中獲取消息493.3.3

數(shù)據(jù)訪問(wèn)中間件要點(diǎn):

數(shù)據(jù)庫(kù)中間件,負(fù)責(zé)完成對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的操作優(yōu)化、用戶連接、安全保障,以及實(shí)現(xiàn)對(duì)不同廠商數(shù)據(jù)庫(kù)的訪問(wèn)等。

實(shí)現(xiàn)透明訪問(wèn)和操縱局域網(wǎng)、Internet環(huán)境中各種分布、異構(gòu)的數(shù)據(jù)資源的中間系統(tǒng),達(dá)到提高數(shù)據(jù)庫(kù)整體運(yùn)行效率的目的。簡(jiǎn)而言之,數(shù)據(jù)庫(kù)中間件是指一切連接應(yīng)用程序和數(shù)據(jù)庫(kù)的軟件。

不僅限于對(duì)不同廠商的數(shù)據(jù)庫(kù),實(shí)現(xiàn)透明訪問(wèn)和操縱分布、異構(gòu)的數(shù)據(jù)資源,而且包括完成對(duì)數(shù)據(jù)庫(kù)訪問(wèn)的操作優(yōu)化、多用戶連接、安全保障,強(qiáng)調(diào)提高數(shù)據(jù)庫(kù)整體運(yùn)行效率的目標(biāo)。返回本章目錄50數(shù)據(jù)訪問(wèn)中間件的提出針對(duì)的第一個(gè)問(wèn)題:

在三層應(yīng)用體系結(jié)構(gòu)誕生之前,開放式數(shù)據(jù)庫(kù)互聯(lián)技術(shù)(ODBC)已經(jīng)被普遍應(yīng)用,其目標(biāo)是分布環(huán)境下透明訪問(wèn)異種數(shù)據(jù)庫(kù)。由于應(yīng)對(duì)不同數(shù)據(jù)庫(kù),采用不同驅(qū)動(dòng)統(tǒng)一接口的策略,沒能解決每個(gè)客戶機(jī)上需要下載相應(yīng)驅(qū)動(dòng)程序的問(wèn)題。Client1ApplicationServerODBCOracleDB2SQLSerever??????????OracleDB-driverDB2DB-driverSQLServerDB-driverClient2ApplicationClientnApplication51

隨著三層應(yīng)用體系的B/S結(jié)構(gòu)的發(fā)展,瀏覽器通過(guò)下載的Applet生成操作交互界面,在服務(wù)器上,是由中間件來(lái)負(fù)責(zé)數(shù)據(jù)的傳輸、安全驗(yàn)證以及并發(fā)控制等工作的。而數(shù)據(jù)庫(kù)中間件可以實(shí)現(xiàn)同網(wǎng)絡(luò)中的任意種數(shù)據(jù)庫(kù)系統(tǒng)連接并完成信息存取,這樣就解決了每個(gè)客戶機(jī)上需要下載相應(yīng)驅(qū)動(dòng)程序的問(wèn)題。Browser1Browser2BrowsernServertransmissionSecurityConcur……OracleDB2SQLSerever??????????ODBC52針對(duì)的第二個(gè)問(wèn)題:三層應(yīng)用結(jié)構(gòu)仍然存在DBMS的管理問(wèn)題:要求在訪問(wèn)網(wǎng)絡(luò)數(shù)據(jù)庫(kù)時(shí),先建立連接(包括:?jiǎn)?dòng)服務(wù)進(jìn)程、前期檢查等多項(xiàng)操作),之后,當(dāng)對(duì)數(shù)據(jù)庫(kù)的操作完成后,立即斷開連接(包括:后處理等多項(xiàng)操作),這樣,一個(gè)任務(wù)的多項(xiàng)數(shù)據(jù)訪問(wèn)操作,頻繁地建立和斷開操作,消耗了系統(tǒng)大量的資源。針對(duì)的第三個(gè)問(wèn)題:

互聯(lián)網(wǎng)上的應(yīng)用數(shù)量很多,與數(shù)據(jù)庫(kù)連接的應(yīng)用量也就很大,而在建立的每個(gè)連接后,接收客戶輸入以及處理相應(yīng)事務(wù)邏輯時(shí),相應(yīng)的連接始終是保持著并處于空閑狀態(tài)。這樣,大量的連接請(qǐng)求會(huì)占用有限的連接資源,使系統(tǒng)處于等待狀態(tài),阻礙數(shù)據(jù)訪問(wèn)。53針對(duì)的第四個(gè)問(wèn)題:

對(duì)于多個(gè)用戶來(lái)說(shuō),即使是同一個(gè)操作,建立連接以及操作的方式都必須單獨(dú)進(jìn)行,實(shí)際上它們?cè)谥貜?fù)相同的工作,以建立它們各自的連接。這實(shí)際上是無(wú)意義的工作負(fù)擔(dān),且造成網(wǎng)絡(luò)擁塞。針對(duì)的第五個(gè)問(wèn)題:

在網(wǎng)絡(luò)環(huán)境下,通過(guò)數(shù)據(jù)庫(kù)的底層連接需要一直保持到操作結(jié)束,整個(gè)操作過(guò)程由于帶寬和流量的問(wèn)題,網(wǎng)絡(luò)風(fēng)險(xiǎn)難測(cè),一旦底層連接失敗,會(huì)造成數(shù)據(jù)丟失。并且通信線路也處于無(wú)意義的占用狀態(tài),造成通訊堵塞。54解決問(wèn)題的途徑解決數(shù)據(jù)庫(kù)訪問(wèn)效率優(yōu)化問(wèn)題,也是數(shù)據(jù)訪問(wèn)中間件的主要任務(wù)。其主要思路是四個(gè)方面:1)連接池2)虛擬連接3)開辟緩沖區(qū),使用數(shù)據(jù)庫(kù)鏡像技術(shù)4)遠(yuǎn)程方法調(diào)用RMI(RemoteMethodInvoke)551)對(duì)象連接池

建立連接池,設(shè)置一些連接管理模塊,預(yù)先在DBMS和這些模塊之間建立好連接,叫做連接池。每個(gè)連接可以對(duì)應(yīng)一個(gè)控制線程的多個(gè)對(duì)象實(shí)現(xiàn)。這樣可以減少聯(lián)接斷開的次數(shù)。對(duì)象實(shí)現(xiàn)a對(duì)象實(shí)現(xiàn)b對(duì)象實(shí)現(xiàn)d對(duì)象實(shí)現(xiàn)cConnectmoduleapplicatrionDBMS562)虛擬連接

使用獨(dú)立的數(shù)據(jù)庫(kù)連接管理進(jìn)程,提供專門的連接管理,用虛擬的連接隔離真實(shí)的連接和斷開,實(shí)現(xiàn)更合理的真正的連接斷開操作。

虛連接機(jī)制與連接池配合使用,有連接請(qǐng)求時(shí),檢查該請(qǐng)求是否已經(jīng)建立了連接,斷開請(qǐng)求時(shí),檢查有否等待的連接需要。VirtualConnectDB-ConnectConnectmoduleConnectmoduleConnectmoduleConnectmoduleDBMS573)開辟緩沖區(qū),使用數(shù)據(jù)庫(kù)鏡像技術(shù)VirtualConnectDB-ConnectConnectmodule緩沖區(qū)緩存鏡像分兩種方式:?

客戶端緩存鏡像:客戶需要信息時(shí),通過(guò)比較版本判斷緩存信息的有效性,若無(wú)效,則通知遠(yuǎn)程服務(wù)器索取信息,更新客戶緩存。?

服務(wù)器緩存鏡像:采用雙向緩存技術(shù),支持異步讀寫。無(wú)論客戶有無(wú)信息需求,服務(wù)器主動(dòng)定時(shí)從數(shù)據(jù)庫(kù)中讀取新信息,隨時(shí)保持與數(shù)據(jù)庫(kù)信息的一致。58RMI請(qǐng)求端RMI服務(wù)端stubskeleton遠(yuǎn)程引用層遠(yuǎn)程引用層

傳輸層

傳輸層虛擬連接網(wǎng)絡(luò)連接當(dāng)請(qǐng)求遠(yuǎn)程數(shù)據(jù)庫(kù)訪問(wèn)時(shí),請(qǐng)求先傳送stub,stub作為請(qǐng)求對(duì)象的代理,接受請(qǐng)求并傳送請(qǐng)求到服務(wù)器數(shù)據(jù)庫(kù)訪問(wèn)代理skeleton,由skeleton進(jìn)行方法調(diào)用。這樣,只有代理之間的消息傳輸才占用網(wǎng)絡(luò)信道。4)遠(yuǎn)程方法調(diào)用RMI(RemoteMethodInvoke),屬于構(gòu)件技術(shù)范圍。利用構(gòu)件之間RMI,屏蔽與數(shù)據(jù)庫(kù)的直接連接,提取數(shù)據(jù)庫(kù)操作請(qǐng)求和響應(yīng)請(qǐng)求的獨(dú)立構(gòu)件方法,采用兩個(gè)中間件相接。服務(wù)連接59數(shù)據(jù)訪問(wèn)中間件的三種類型本地中間件:為特定數(shù)據(jù)庫(kù)而設(shè)計(jì),能提供最佳性能的訪問(wèn)方式,例如:Sybase的數(shù)據(jù)庫(kù)中間件。呼叫層轉(zhuǎn)移:(Call

LayerIn-terface,CLI)為多種數(shù)據(jù)庫(kù)提供統(tǒng)一的接口,基于X/Open(UNIX標(biāo)準(zhǔn))的開放SQL標(biāo)準(zhǔn),轉(zhuǎn)換“呼叫”為對(duì)應(yīng)的任意種數(shù)據(jù)庫(kù)。例如:ODBC和JDBC。數(shù)據(jù)庫(kù)網(wǎng)關(guān):對(duì)系統(tǒng)內(nèi)部數(shù)據(jù),提供訪問(wèn)不同數(shù)據(jù)庫(kù)模型的轉(zhuǎn)換方式。利用統(tǒng)一形式數(shù)據(jù)格式和標(biāo)準(zhǔn)應(yīng)用程序接口,集成多個(gè)數(shù)據(jù)庫(kù),并進(jìn)出轉(zhuǎn)換統(tǒng)一信息格式的數(shù)據(jù)庫(kù)訪問(wèn)。主要技術(shù)包括:ODBC(OpenDatabaseConnectivity)

JDBC(JavaDatabaseConnectivity)

OLEDB

數(shù)據(jù)庫(kù)網(wǎng)關(guān)60ODBC(OpenDatabaseConnectivity)最初是由X/Open和SAG(SQLAccessGroup)提出的。Microsoft公司作為積極的實(shí)現(xiàn)者。

開放式數(shù)據(jù)庫(kù)互聯(lián)技術(shù),是為訪問(wèn)多種數(shù)據(jù)庫(kù)系統(tǒng)而建造的操作平臺(tái),它包含訪問(wèn)不同數(shù)據(jù)庫(kù)所要求的訪問(wèn)驅(qū)動(dòng)程序。實(shí)際上是統(tǒng)一訪問(wèn)數(shù)據(jù)庫(kù)的接口標(biāo)準(zhǔn)。

ODBC的結(jié)構(gòu)包括4部分:

?OBDC應(yīng)用接口(ODBCAPI)

?驅(qū)動(dòng)程序管理器(DriverManager)

?驅(qū)動(dòng)程序(Driver)

?數(shù)據(jù)源(DataSource)61OBDC的體系結(jié)構(gòu)關(guān)系應(yīng)用層ODBC層數(shù)據(jù)層應(yīng)用程序數(shù)據(jù)源名字(DSN)驅(qū)動(dòng)程序管理器

(ODBC)ODBCAPI

(SQL)

驅(qū)動(dòng)程序

(ODBC)

數(shù)據(jù)源(DS)各數(shù)據(jù)庫(kù)DBMS系統(tǒng)平臺(tái)、網(wǎng)絡(luò)環(huán)境Syabas驅(qū)動(dòng)程序Informix驅(qū)動(dòng)程序Oracle驅(qū)動(dòng)程序…62OBDCAPI應(yīng)用接口應(yīng)用程序向ODBC提交SQL語(yǔ)句是以函數(shù)的參數(shù)形式給出的。ODBC在運(yùn)行時(shí),根據(jù)不同的數(shù)據(jù)庫(kù)方式,動(dòng)態(tài)地連接不同的DBMS底層通信協(xié)議。ODBCAPI的工作:

?請(qǐng)求與數(shù)據(jù)源建立聯(lián)系

?創(chuàng)建會(huì)話關(guān)系

?向數(shù)據(jù)源發(fā)出SQL請(qǐng)求

?定義數(shù)據(jù)源緩沖區(qū)和數(shù)據(jù)格式

?存儲(chǔ)和提取SQL執(zhí)行結(jié)果

?處理各種錯(cuò)誤,報(bào)告錯(cuò)誤

?事務(wù)提交與撤銷

?中斷處理63應(yīng)用接口提供的互操作一致性保障

不同的數(shù)據(jù)庫(kù)對(duì)于函數(shù)調(diào)用的語(yǔ)法是不同的,ODBC為了使所有的編程都統(tǒng)一在一套SQL語(yǔ)句的形式下,提供了三個(gè)級(jí)別的API函數(shù),對(duì)應(yīng)三個(gè)級(jí)別的SQL語(yǔ)法。1)核心級(jí):包括最基本功能:

?分配和釋放環(huán)境

?數(shù)據(jù)庫(kù)連接

?準(zhǔn)備執(zhí)行SQL

?分配SQL語(yǔ)句的參

數(shù)和結(jié)果緩存

?提取結(jié)果信息

?提交或撤銷事務(wù)

?提取錯(cuò)誤信息。等等3)擴(kuò)展級(jí)2在擴(kuò)展級(jí)1基礎(chǔ)上:按驅(qū)動(dòng)程序給出的

?瀏覽連接信息

?傳送多組參數(shù)

?提取多組字段值

?使用游標(biāo)

?提取SQL格式

?調(diào)用翻譯程序等等API函數(shù)級(jí)別2)擴(kuò)展級(jí)1:包括核心全部:按驅(qū)動(dòng)程序給出的

?連接數(shù)據(jù)源

?傳送參數(shù)值

?提取字段值

?提取數(shù)據(jù)源類型

?提取數(shù)據(jù)源數(shù)量等等64ODBC驅(qū)動(dòng)程序管理帶入口參數(shù)、包含多種驅(qū)動(dòng)程序的動(dòng)態(tài)連接庫(kù)DLL。通過(guò)動(dòng)態(tài)連接庫(kù)方式,間接調(diào)用函數(shù),使對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接到所有的ODBC應(yīng)用,負(fù)責(zé)管理應(yīng)用程序和數(shù)據(jù)庫(kù)的通信。ODBC驅(qū)動(dòng)程序:這是ODBC的核心部分,負(fù)責(zé)處理ODBC調(diào)用,SQL語(yǔ)法翻譯,以及與數(shù)據(jù)源軟件層交互。驅(qū)動(dòng)程序主要工作包括:

?建立與數(shù)據(jù)庫(kù)的連接

?向數(shù)據(jù)源提交請(qǐng)求

?數(shù)據(jù)庫(kù)操作結(jié)果的格式轉(zhuǎn)換

?返回?cái)?shù)據(jù)庫(kù)操作結(jié)果

?整理錯(cuò)誤返回錯(cuò)誤代碼

?申請(qǐng)并控制游標(biāo)

?初始化事務(wù)65ODBC驅(qū)動(dòng)程序的兩種類型兩種類型的驅(qū)動(dòng)程序,用以表示驅(qū)動(dòng)與DBMS的分工和責(zé)任。單層式驅(qū)動(dòng):既處理ODBC函數(shù)調(diào)用,又處理SQL語(yǔ)句,承擔(dān)了部分?jǐn)?shù)據(jù)源的工作,等價(jià)于本地的DBMS。配置在單機(jī)上或網(wǎng)絡(luò)環(huán)境中。多層式驅(qū)動(dòng):僅處理ODBC函數(shù)調(diào)用,而把處理SQL語(yǔ)句交給數(shù)據(jù)源。它本身不執(zhí)行數(shù)據(jù)處理,僅是通信中繼站的作用,負(fù)責(zé)傳輸數(shù)據(jù)庫(kù)引擎和應(yīng)用程序的命令和數(shù)據(jù)。66DS數(shù)據(jù)源

數(shù)據(jù)源,為上層應(yīng)用系統(tǒng)提供存取數(shù)據(jù)的底層平臺(tái)。以各不同數(shù)據(jù)庫(kù)的DBMS系統(tǒng)和網(wǎng)絡(luò)層為基礎(chǔ)。信息數(shù)據(jù)源需要驅(qū)動(dòng)程序提供數(shù)據(jù)源名、用戶名和口令,以及網(wǎng)絡(luò)地址、網(wǎng)絡(luò)登錄口令等。

ODBC驅(qū)動(dòng)程序管理和驅(qū)動(dòng)程序本身,必須在每臺(tái)客戶機(jī)上分別安裝和配置。兩種配置數(shù)據(jù)源的方法:

?設(shè)置ODBC管理器,由管理器負(fù)責(zé)安裝各數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。

?由ODBCAPI來(lái)配置,在API中有相應(yīng)數(shù)據(jù)源的操作函數(shù)??梢酝ㄟ^(guò)程序,調(diào)用函數(shù)來(lái)執(zhí)行數(shù)據(jù)源的增刪改。67JDBC(JavaDatabaseConnectivity)

Java語(yǔ)言的多種數(shù)據(jù)庫(kù)訪問(wèn)開放式互聯(lián)。支持執(zhí)行SQL語(yǔ)句的Java應(yīng)用程序接口API,支持?jǐn)?shù)據(jù)庫(kù)開發(fā)商,開發(fā)統(tǒng)一在Java應(yīng)用的訪問(wèn)數(shù)據(jù)庫(kù)接口類。JDBC與ODBC的異同相同:JDBC沿用了ODBC的設(shè)計(jì)思想,也是基于X/Open的SQL調(diào)用級(jí)接口。主要結(jié)構(gòu)同ODBC幾乎相同。包括:應(yīng)用程序、驅(qū)動(dòng)器管理器、驅(qū)動(dòng)程序和數(shù)據(jù)源。不同:JDBC由于使用Java語(yǔ)言,對(duì)硬件平臺(tái)、操作系統(tǒng)的異構(gòu)性有更好的支持,由于JDBC驅(qū)動(dòng)程序管理是內(nèi)置的,可以通過(guò)Web瀏覽器自動(dòng)下載,無(wú)需安裝和配置,更適應(yīng)Internet數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。68OLEDB

(ObjectLinkingandEmbeddingDataBase)OLEDB是微軟在ODBC基礎(chǔ)上推出另一技術(shù)標(biāo)準(zhǔn)。目標(biāo)是提供支持組件式開發(fā)的統(tǒng)一數(shù)據(jù)訪問(wèn)接口特點(diǎn)是除了提供對(duì)訪問(wèn)數(shù)據(jù)庫(kù)的支持外,還支持訪問(wèn)非數(shù)據(jù)庫(kù)格式的數(shù)據(jù)源??梢允褂门c訪問(wèn)數(shù)據(jù)庫(kù)同樣的方式,訪問(wèn)各種信息,不必考慮存放的地點(diǎn)和格式類型。數(shù)據(jù)組件:將數(shù)據(jù)庫(kù)信息格式或非數(shù)據(jù)庫(kù)格式信息格式的數(shù)據(jù),組成獨(dú)立的邏輯組件,這些組件具有獨(dú)立的操作和通信能力。非數(shù)據(jù)庫(kù)信息格式:指流媒體信息、索引文件、電子郵件、電子表格,等等。69OLEDB的實(shí)現(xiàn):提供一組C++的API函數(shù),可用來(lái)編寫訪問(wèn)符合OLEDB標(biāo)準(zhǔn)的任何數(shù)據(jù)源的應(yīng)用程序。OLEDB基礎(chǔ)組件:消費(fèi)者Consumers

:使用OLEDB接口的應(yīng)用程序,用以控制和操縱存儲(chǔ)在數(shù)據(jù)提供者中的數(shù)據(jù)。供應(yīng)者Providers:提供OLEDB接口的軟組件。數(shù)據(jù)提供者Dataproviders:提供數(shù)據(jù)存儲(chǔ)的軟組件。例如:關(guān)系數(shù)據(jù)庫(kù)、電子表格、電子郵件等。服務(wù)提供者Servicesproviders:從DBMS中分離出來(lái)的獨(dú)立功能軟組件。例如:查詢處理器、游標(biāo)引擎等等。數(shù)據(jù)提供者數(shù)據(jù)操作訪問(wèn)服務(wù)數(shù)據(jù)操作訪問(wèn)服務(wù)數(shù)據(jù)操作訪問(wèn)服務(wù)數(shù)據(jù)供應(yīng)者消費(fèi)者70微軟的遠(yuǎn)程數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)ADOOLEDBODBC本地/遠(yuǎn)程數(shù)據(jù)庫(kù)訪問(wèn)本地/遠(yuǎn)程數(shù)據(jù)庫(kù)訪問(wèn)本地/遠(yuǎn)程數(shù)據(jù)庫(kù)訪問(wèn)主DB接口主DB接口主DB接口數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)

應(yīng)用程序ADO(ActiveXDataObject)微軟的第三個(gè)數(shù)據(jù)訪問(wèn)標(biāo)準(zhǔn),主要支持對(duì)象組件體系結(jié)構(gòu)71數(shù)據(jù)庫(kù)網(wǎng)關(guān)數(shù)據(jù)網(wǎng)關(guān)的目標(biāo):根據(jù)特定的應(yīng)用需求,希望實(shí)現(xiàn)在本地機(jī)上的數(shù)據(jù)庫(kù)0配置,將異種數(shù)據(jù)庫(kù)系統(tǒng),集成在一個(gè)專門的控制系統(tǒng)下。數(shù)據(jù)網(wǎng)關(guān)的基本功能:數(shù)據(jù)庫(kù)網(wǎng)關(guān)(也叫SQL網(wǎng)關(guān)),提供應(yīng)用程序編程接口,開發(fā)者使用API調(diào)用,由數(shù)據(jù)庫(kù)網(wǎng)關(guān)來(lái)處理運(yùn)行在多平臺(tái)上的不同數(shù)據(jù)庫(kù)的訪問(wèn)。同時(shí),在數(shù)據(jù)庫(kù)網(wǎng)關(guān)中一般加有安全控制、訪問(wèn)優(yōu)化等性能的支持。72數(shù)據(jù)庫(kù)網(wǎng)關(guān)工作原理數(shù)據(jù)庫(kù)網(wǎng)關(guān)作為數(shù)據(jù)庫(kù)系統(tǒng)的中間件,通常,作為大型數(shù)據(jù)庫(kù)系統(tǒng)配備的產(chǎn)品,它們利用異種數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)連接FAP格式協(xié)議(FormatandProtocol),在API中可以直接將SQL調(diào)用翻譯成FAP,并通過(guò)數(shù)據(jù)庫(kù)網(wǎng)關(guān)傳遞請(qǐng)求到目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)。API調(diào)用SQL網(wǎng)關(guān)SQL調(diào)用FAP標(biāo)準(zhǔn)應(yīng)用格式翻譯OracleDB2SQLSerever?????73數(shù)據(jù)庫(kù)中間件的優(yōu)勢(shì)數(shù)據(jù)庫(kù)中間件具有中間件的普遍優(yōu)點(diǎn):移植性好:更換操作系統(tǒng)和通訊協(xié)議等底層配置,都不用改變應(yīng)用程序。方便集成:不同的系統(tǒng)平臺(tái)應(yīng)用可以方便地經(jīng)過(guò)處理集成起來(lái),實(shí)現(xiàn)更大的應(yīng)用。使用簡(jiǎn)便:對(duì)應(yīng)用程序來(lái)說(shuō),實(shí)現(xiàn)了透明性訪問(wèn)數(shù)據(jù)庫(kù)。數(shù)據(jù)庫(kù)中間件的代價(jià)由于對(duì)數(shù)據(jù)庫(kù)的操作都是同步且點(diǎn)到點(diǎn)的,這樣,過(guò)分集中地依賴中間件,就要求中間件的性能必須非常高,所承擔(dān)的風(fēng)險(xiǎn)也很高。743.3.4

對(duì)象中間件隨著軟件技術(shù)的不斷發(fā)展,軟件結(jié)構(gòu)的抽象程度和方式在不斷翻新和改造,目標(biāo)是更合理的保證軟件的質(zhì)量特性。抽象的元素從基本數(shù)據(jù)結(jié)構(gòu),子程序,模塊,對(duì)象類,又發(fā)展到構(gòu)件。構(gòu)件(組件)技術(shù):構(gòu)件技術(shù)是在面向?qū)ο蠹夹g(shù)和對(duì)象中間件基礎(chǔ)發(fā)展起來(lái)的。構(gòu)件技術(shù)包括構(gòu)件以及構(gòu)件的運(yùn)行機(jī)制兩方面。構(gòu)件的運(yùn)行機(jī)制就是對(duì)象中間件。分布計(jì)算到對(duì)象分布計(jì)算:對(duì)象組件技術(shù),利用面向?qū)ο蠡靖拍?,?shí)現(xiàn)處理數(shù)據(jù)和行為的大粒度的聯(lián)合體,以及接口與實(shí)現(xiàn)分開的多態(tài)性機(jī)制,建造對(duì)象中間件,實(shí)現(xiàn)軟總線上的軟插件,構(gòu)成分布式系統(tǒng),這樣的設(shè)計(jì)觀點(diǎn)與原來(lái)的分布計(jì)算有了根本的改變。被稱為分布對(duì)象計(jì)算。返回本章目錄75理想的分布對(duì)象體系在分布式網(wǎng)絡(luò)環(huán)境下,軟構(gòu)件在對(duì)象中間件的協(xié)同組織下,相互不分客戶還是服務(wù)者,可角色互換;不需要知道運(yùn)行在什么地方,可即插即用;使應(yīng)用系統(tǒng)的建造,成為在網(wǎng)絡(luò)上現(xiàn)有構(gòu)件的部署。三種主要中間件技術(shù):①由OMG制定ORB和CORBA的對(duì)象中間件規(guī)范②基于Java技術(shù)的對(duì)象組件和中間件體系EJB③在Windows平臺(tái)上運(yùn)行的COM/DCOM/COM+注:OMG(ObjectManagementGroup)76①CORBA對(duì)象中間件

由國(guó)際OMG制定的軟件跨平臺(tái)交互操作標(biāo)準(zhǔn)。目標(biāo):無(wú)論在什么地方,用的什么語(yǔ)言或什么操作系統(tǒng),應(yīng)用程序都能相互獨(dú)立地實(shí)現(xiàn)透明對(duì)象訪問(wèn)。在此目標(biāo)下,制定統(tǒng)一的應(yīng)用軟件標(biāo)準(zhǔn),規(guī)劃分布對(duì)象的體系結(jié)構(gòu),以及在此結(jié)構(gòu)下對(duì)象的產(chǎn)生、消亡和運(yùn)用等方式。這套規(guī)定包括:OMA(ObjectManagementArchitecture)對(duì)象管理體系結(jié)構(gòu)ORB(ObjectRequestBroker)對(duì)象請(qǐng)求代理者CORBA(CommonObjectRequestBrokerArchitecture)公共對(duì)象請(qǐng)求代理者體系結(jié)構(gòu)77應(yīng)用對(duì)象公共設(shè)施

對(duì)象請(qǐng)求代理(ObjectRequestBroker)符合文書電子郵件數(shù)據(jù)庫(kù)存取……......

對(duì)象服務(wù)...交易安全并行關(guān)系數(shù)據(jù)交換……命名生存周期持久存儲(chǔ)事件……OMA對(duì)象管理體系結(jié)構(gòu)CORBA體系:OMA給出了對(duì)象體系結(jié)構(gòu)的開放框架,并給出核心部分ORB(ObjectRequestBroker)的開放標(biāo)準(zhǔn),既:CORBA

(CommonObjectRequestBrokerArchitecture)78OMA中的對(duì)象OMA給出的對(duì)象是廣泛概念的分布系統(tǒng)中的任何成分??梢允菓?yīng)用程序、進(jìn)程、類實(shí)例。唯一的要求是它要具有符合OMA標(biāo)準(zhǔn)的接口。在OMA中的對(duì)象作為服務(wù)者運(yùn)行是動(dòng)態(tài)地被引用,用唯一身份標(biāo)識(shí)提供服務(wù)。被引用(reference)既是對(duì)象的實(shí)現(xiàn)(implementation)。在OMA中的對(duì)象作為客戶(消費(fèi)者),是通過(guò)消息機(jī)制提出一個(gè)操作調(diào)用,來(lái)請(qǐng)求服務(wù)。在OMA中的對(duì)象可以作為消費(fèi)者,也可以作為服務(wù)者,這與客戶/服務(wù)體系結(jié)構(gòu)有根本的不同。79OMA中的公共設(shè)施(commonfacilities)提供運(yùn)行在多個(gè)應(yīng)用程序中的公共服務(wù),既應(yīng)用框架。例如:菜單、窗口、繪圖板、電子郵件等。OMA中的對(duì)象服務(wù)(objectservices)提供實(shí)現(xiàn)對(duì)象的基本功能,如:對(duì)象的命名服務(wù)、對(duì)象并行、對(duì)象存儲(chǔ)、對(duì)象產(chǎn)生和消亡、事件消息響應(yīng),以及事務(wù)交易的一致性保障等。公共設(shè)施與對(duì)象服務(wù)的區(qū)別公共設(shè)施提供的服務(wù)是高層應(yīng)用程序級(jí)的。對(duì)象服務(wù)提供的是系統(tǒng)必不可少的公共服務(wù),屬于底層支持的必須服務(wù)。80OMA對(duì)象請(qǐng)求代理ORB(objectrequestbroker)ORB是OMA的核心部分應(yīng)用程序在分布對(duì)象系統(tǒng)中要求服務(wù),是以系統(tǒng)客戶的身份,通過(guò)ORB與系統(tǒng)中其他對(duì)象交互的過(guò)程ORB在對(duì)象服務(wù)的支持下,完成系統(tǒng)中對(duì)象之間的交互操作的ORB的開放標(biāo)準(zhǔn)是CORBA81

對(duì)象適配器客戶程序(Client)

對(duì)象實(shí)現(xiàn)(Server)動(dòng)態(tài)調(diào)用客戶stubORB接口實(shí)現(xiàn)庫(kù)ImplementationRepository接口庫(kù)InterfaceRepository

對(duì)象請(qǐng)求中間件核心(ORBCore)CORBA結(jié)構(gòu)CORBA規(guī)范包括:ORB核心、接口定義語(yǔ)言IDL、語(yǔ)言映射機(jī)制、存根(Stub)和框架(Skeleton)、動(dòng)態(tài)調(diào)用和接口庫(kù)、對(duì)象適配器等主要部分。

對(duì)象適配器

對(duì)象適配器

對(duì)象適配器動(dòng)態(tài)服務(wù)skeleton靜態(tài)服務(wù)skeleton82ORB核心任務(wù):把客戶發(fā)出的請(qǐng)求傳送給目標(biāo)對(duì)象,并把目標(biāo)對(duì)象的執(zhí)行結(jié)果返回給請(qǐng)求客戶。ORB核心的作用:屏蔽了對(duì)象位置、對(duì)象實(shí)現(xiàn)、對(duì)象執(zhí)行狀態(tài)、對(duì)象通信機(jī)制和數(shù)據(jù)表示。ORB核心底層的通信:提供GIOP(GlobalInternet-ORBProtocol)消息的通信能力,進(jìn)行消息語(yǔ)法檢查和語(yǔ)義解釋,通過(guò)接口動(dòng)態(tài)綁定,使用通信層提供的服務(wù)??膳渲眠x用的協(xié)議,包括:TCP/IP的協(xié)議組件(IIOP)、本地消息隊(duì)列的協(xié)議組件(LIOP)消息中間件的協(xié)議組件(TIOP)83

客戶服務(wù)對(duì)象LIOPIIOPTIOP

綁定

協(xié)議槽

應(yīng)用組件庫(kù)StubGIOP消息層skeleton

核心組件庫(kù)

協(xié)議組件庫(kù)

運(yùn)行系統(tǒng)

資源

傳輸ORB核心傳輸結(jié)構(gòu)84IDL語(yǔ)言客戶目標(biāo)對(duì)象發(fā)送請(qǐng)求必須知道目標(biāo)對(duì)象所具有的操作。IDL提供對(duì)象的接口定義手段,為使請(qǐng)求對(duì)象了解服務(wù)對(duì)象。IDL語(yǔ)言是類似于高級(jí)語(yǔ)言的說(shuō)明性語(yǔ)言,只對(duì)對(duì)象的接口定義(包括異常處理),不提供任何實(shí)現(xiàn)細(xì)節(jié)的描述。IDL語(yǔ)言說(shuō)明對(duì)象屬性、所屬父類、運(yùn)行時(shí)可能的異常、引發(fā)的事件以及對(duì)象提供的方法(包括輸入?yún)?shù)和返回結(jié)果類型)IDL把編譯后的代碼映射到具體的編程語(yǔ)言,并且產(chǎn)生客戶方的Stub和服務(wù)方的Skeleton。CORBA中規(guī)定了IDL語(yǔ)言的映射方式,提供給語(yǔ)言開發(fā)商,用來(lái)開發(fā)支持CORBA體系的語(yǔ)言產(chǎn)品。85C++類IDL編譯器遠(yuǎn)程對(duì)象代理

本地代理目標(biāo)對(duì)象IDL語(yǔ)言作用IDL通過(guò)編譯,映射到對(duì)應(yīng)執(zhí)行語(yǔ)言的結(jié)構(gòu)中,在分布對(duì)象構(gòu)件的服務(wù)者和請(qǐng)求者之間建立連接。IDL編譯時(shí)產(chǎn)生兩個(gè)文件,(在C++語(yǔ)言中分別為:xxxs.c和xxxc.c)一個(gè)是服務(wù)器端的skeleton代碼,它明確表示了所承擔(dān)的服務(wù);一個(gè)是客戶端的stub遠(yuǎn)程對(duì)象的本地代理,產(chǎn)生作為客戶請(qǐng)求方所需要的本地對(duì)象代理。CORBA庫(kù)CORBA庫(kù)IDL文件xxx.IDL客戶程序服務(wù)器程序服務(wù)接口86interfaceaccount{enumaccount-kind{checking,saving};//帳務(wù)種類的類exceptionaccount_not_available{stringreason};//帳務(wù)不可利用類exceptionincorrect_pin{};//密碼錯(cuò)誤類exceptionnot_enough_balance{floatamount_short}//余額不足類readonlyattributeintegeraccount_number;//整型帳號(hào)只讀屬性readonlyattributestringname;//串型名字只讀屬性readonlyattributefloatbalance;//浮點(diǎn)型余額只讀屬性attributeaccount_kindkind_of_account;//帳務(wù)種類的屬性voidaccess(inintegeraccount,instringpin);//取款方法和輸入類型

raises(account_not_available,incorrect_pin,not_enough_balance);//可能引發(fā)的事件voiddeposit(inintegeraccount,infloatf,outfloatnew_balance);//存款方法和IO類型

raises(account_not_available);//可能引發(fā)的事件voidwithdraw(inintegeraccount,infloatf,outfloatnew_balance);//取消存款操作方法和IO類型

raises(account_not_available);//可能引發(fā)的事件};用IDL語(yǔ)言定義的對(duì)象接口例:87ORBClientIDLStub和動(dòng)態(tài)調(diào)用IDLStub提供客戶端訪問(wèn)對(duì)象服務(wù)的靜態(tài)接口動(dòng)態(tài)接口DII(DynamicInvokerInterface)提供發(fā)現(xiàn)對(duì)象、構(gòu)造參數(shù)、發(fā)出遠(yuǎn)程調(diào)用,取得返回結(jié)果等操作接口庫(kù)IR(InterfaceRepository)應(yīng)用構(gòu)件需要在系統(tǒng)中注冊(cè),IR管理注冊(cè)構(gòu)件的接口動(dòng)態(tài)調(diào)用時(shí)提供對(duì)象方法的元數(shù)據(jù)。包括:Repository:

頂層庫(kù)名Moduledef:

接口的邏輯分組Interfacedef:

接口定義Attributedef:

接口屬性O(shè)perationdef:

接口中的操作Typedef:

接口中已定義的類型Constantdef:

接口中已命名常數(shù)的Exceptiondef:

操作引起的異常ORBServer靜態(tài)連接:靜態(tài)連接是在編譯時(shí)產(chǎn)生Server的IDLSkeleton,并定位對(duì)應(yīng)的對(duì)象適配器。靜態(tài)方法調(diào)用步驟:用IDL定義對(duì)象類通過(guò)語(yǔ)言預(yù)編譯器產(chǎn)生服務(wù)類框架為生成的服務(wù)類框架提供實(shí)現(xiàn)的方法代碼

編譯方法代碼,產(chǎn)生:

接口庫(kù)描述對(duì)象的文件

靜態(tài)訪問(wèn)客戶程序的stub

服務(wù)器上調(diào)用方法的skeleton將類定義與接口庫(kù)聯(lián)編注冊(cè)運(yùn)行對(duì)象到實(shí)現(xiàn)庫(kù)8989ORBServer動(dòng)態(tài)連接動(dòng)態(tài)連接是在編譯時(shí)不確定客戶和服務(wù)對(duì)象的連接,由統(tǒng)一接口DSI(DynamicSkeletonInterface)提供的函數(shù)來(lái)判斷得到的被調(diào)用的對(duì)象的操作名、參數(shù)類型和值,完成客戶請(qǐng)求任務(wù)并組織返回結(jié)果。動(dòng)態(tài)方法調(diào)用主要步驟獲得接口名字從接口庫(kù)獲得方法描述為傳送參數(shù)創(chuàng)建變?cè)韯?chuàng)建對(duì)象請(qǐng)求包括:方法名變?cè)矸祷刂嫡{(diào)用遠(yuǎn)程方法90對(duì)象適配器OA(objectadapter)對(duì)象適配器是ORB核心通信服務(wù)的上層機(jī)制對(duì)象適配器負(fù)責(zé)接受服務(wù)請(qǐng)求、完成實(shí)例化服務(wù)對(duì)象、向?qū)ο髠魉驼?qǐng)求、為服務(wù)指定對(duì)象引用提供的運(yùn)行環(huán)境。ORB的服務(wù)方,通過(guò)服務(wù)對(duì)象適配器,給客戶應(yīng)用提供的是一種假象(虛擬環(huán)境),即服務(wù)對(duì)象都是活動(dòng)著的,隨時(shí)等待客戶應(yīng)用發(fā)來(lái)請(qǐng)求的。ORB通過(guò)適配器將目的對(duì)象分成組,每組通過(guò)特定的對(duì)象適配器來(lái)滿足特定的需求。為減少適配器的種類,CORBA給出了基本適配器標(biāo)準(zhǔn)BOA(basicobjectadapter)。后來(lái)又給出為方便移植的POA(portableobjectadapter)91對(duì)象適配器OA的內(nèi)容和功能?對(duì)象引用的產(chǎn)生和解釋?對(duì)象調(diào)用的方式?交互操作的安全認(rèn)證?對(duì)象的激活/失活?對(duì)象引用到實(shí)現(xiàn)的映射以及定位?對(duì)象粒度管理?對(duì)象生命周期控制和管理92實(shí)現(xiàn)庫(kù)IR(implementationRepository)?實(shí)現(xiàn)庫(kù)包含支持服務(wù)的類、被實(shí)例化的對(duì)象、對(duì)象的標(biāo)識(shí)。提供ORB定位、對(duì)象激活、對(duì)象的實(shí)現(xiàn)的必要手段。?實(shí)現(xiàn)庫(kù)具有特定的操作環(huán)境信息并記錄操作狀態(tài)。存儲(chǔ)的信息包括:調(diào)試信息、管理控制、資源定位和安全情況等。?實(shí)現(xiàn)庫(kù)提供對(duì)象的安裝、對(duì)象的實(shí)現(xiàn)激活、對(duì)象的執(zhí)行等控制操作的機(jī)制。CORBA的消息處理機(jī)制最初OMA提出了3種通信方式,雙向同步方式、單向調(diào)用方式和延時(shí)同步方式,為達(dá)到更好并行性,CORBA3.0提出了異步方法調(diào)用AMI和時(shí)間獨(dú)立的調(diào)用TII.93CORBA的消息處理機(jī)制異步方法調(diào)用AMI(AsynchronousMethodInvocation):包括輪詢機(jī)制與回調(diào)機(jī)制兩種方式。兩種消息方式,都具有不用附加額外的線程的特點(diǎn)。這樣,一個(gè)應(yīng)用程序的雙向操作可以通過(guò)單一的控制線程來(lái)管理,可一方便同時(shí)處理多個(gè)對(duì)象的遠(yuǎn)程請(qǐng)求。時(shí)間獨(dú)立的調(diào)用TII

(TimeIndependentInvocation):適合于需要確保傳輸?shù)侥繕?biāo)對(duì)象或者偶爾連接到網(wǎng)絡(luò)的應(yīng)用。94異步方法調(diào)用AMI的兩種方式:輪詢機(jī)制Client發(fā)出請(qǐng)求,Server立即返回一個(gè)ValueType類型的對(duì)象,可以用其中的Poller方法,監(jiān)控Server的運(yùn)行??梢杂玫却虿坏却绞将@取狀態(tài)及返回結(jié)果。回調(diào)機(jī)制Client在請(qǐng)求Server后,同時(shí),將ReplyHanderServant引用也傳送過(guò)去,然后無(wú)等待地繼續(xù)做自己的事情。當(dāng)Server完成服務(wù)響應(yīng)后,向ReplyHander發(fā)出Response請(qǐng)求。Client可以通過(guò)ReplyHander獲得服務(wù)器返回的結(jié)果。因?yàn)镃lient無(wú)需頻繁查詢是結(jié)果返回,所以回調(diào)機(jī)制比輪詢機(jī)制效率更高。95時(shí)間獨(dú)立的調(diào)用TII

TII采用與E-Mail相似地轉(zhuǎn)發(fā)存儲(chǔ)形式,由于存儲(chǔ)TII請(qǐng)求和響應(yīng),使得存活期時(shí)間長(zhǎng)于客戶應(yīng)用,所以叫做“時(shí)間獨(dú)立的調(diào)用”。其要點(diǎn):當(dāng)網(wǎng)絡(luò)環(huán)境不好或Server暫時(shí)不能接收時(shí),將請(qǐng)求暫存于所經(jīng)鏈路上的節(jié)點(diǎn)中,利用IRP(InteroperableRoutingProtocol)提供路由存儲(chǔ)轉(zhuǎn)發(fā),直至與Server端對(duì)象連接。返回結(jié)果的情況亦然,允許發(fā)送請(qǐng)求對(duì)象和接收結(jié)果對(duì)象是不同的。ObjARefReplyHanderCORBARouterCORBARouterCORBARouterObjA外部網(wǎng)96②EJB(EnterpriseJavaBean)EJB是SUN公司1997年12月發(fā)布的構(gòu)件模型標(biāo)準(zhǔn),EJB是能在服務(wù)器上運(yùn)行的、特定的一個(gè)JavaBean,EJB具有系統(tǒng)可視化操作能力,提供可視化的構(gòu)件裝配工具和環(huán)境。JavaBean96年10月SUN公司推出JavaBean,經(jīng)過(guò)幾次升級(jí),形成了成熟的軟件構(gòu)件體系。按照SUN公司的定義,JavaBean是“能在開發(fā)工具中被可視化操作的、可重用的軟件構(gòu)件”。它的目標(biāo)是使第三方可以生產(chǎn)和銷售使用Java開發(fā)的軟件構(gòu)件。

Bean(豆)可以放在Contain(容器)中。顧名思義,容器是JavaBean的基礎(chǔ)。Bean被置放到容器中提供具體操作,包括:

?具有內(nèi)省能力(introspection)即:表示自己的操作和屬性

?具有可裝配(customization)

?具有可事件響應(yīng)(events)

?具有可授權(quán)操作(properties)

?具有永久性能力(persistence)97兩類Bean簡(jiǎn)單Bean合成Bean可見Bean----構(gòu)成應(yīng)用程序的GUI不可見Bean----任何Java類包含可見和不可見Bean,但必須是3種Java子類之一。Applet類-----可構(gòu)造Web應(yīng)用Frame類----可構(gòu)造GUI合成BeanPanel類----可構(gòu)造GUI的基本重用成分容器可以是一個(gè)構(gòu)件,它可以包容很多Bean,它具有明確的接口,并提供內(nèi)部所包容的所有Bean的上下文。Bean具備內(nèi)省能力,其他Bean或工具能夠動(dòng)態(tài)地發(fā)現(xiàn)一個(gè)Bean。并且提供Bean行為的部署、設(shè)定屬性等方法,可以用事件將它們連接起來(lái),來(lái)組裝一個(gè)應(yīng)用。JavaBean提供的新型組裝開發(fā)模式98EJB規(guī)定的服務(wù)器JavaBeanEJB規(guī)定的服務(wù)器JavaBean,包括OTM(ObjectTransactionMonitor),以及RMI(RemoteMethodInvocation)技術(shù)。OTM對(duì)象構(gòu)件協(xié)調(diào)者OTM在EJB中稱為包容器。OTM可被看成建立在ORB(objectRequestbroker)之上的事務(wù)處理協(xié)調(diào)器。提供運(yùn)行服務(wù)方的構(gòu)件框架,負(fù)責(zé)激活構(gòu)件或撤銷構(gòu)件,協(xié)調(diào)事務(wù),通知事件以及管理持久構(gòu)件的狀態(tài)。這些彌補(bǔ)了CORBA在ORB定義上的不足。CORBA上的構(gòu)件,沒有完整的服務(wù)器模型,只是簡(jiǎn)單的對(duì)象可視工具管理。EJB的ORB體系RMIRMI是JDK1.1引入的ORB體系。它將分布式對(duì)象模型嵌入Java語(yǔ)言機(jī)制中。RMI是Java的RPC,它定義了一組遠(yuǎn)程接口,可用于生成遠(yuǎn)程對(duì)象,客戶應(yīng)用如同調(diào)用本地對(duì)象一樣調(diào)用遠(yuǎn)程對(duì)象。99RMI結(jié)構(gòu)RMI客戶機(jī)RMI服務(wù)器stubskeleton遠(yuǎn)程引用層遠(yuǎn)程引用層

傳輸層

傳輸層虛擬連接網(wǎng)絡(luò)連接當(dāng)客戶機(jī)調(diào)用遠(yuǎn)程對(duì)象方法時(shí),調(diào)用請(qǐng)求先傳送到客戶端的stub,stub作為遠(yuǎn)程對(duì)象的代理,由引用層接受請(qǐng)求并傳送到服務(wù)器對(duì)象的skeleton,由skeleton進(jìn)行方法調(diào)用。100遠(yuǎn)程過(guò)程調(diào)用與遠(yuǎn)程方法調(diào)用的主要區(qū)別:RPC(RemoteProcedureCall)RMI(RemoteMethodInvoke)RMI允許一個(gè)計(jì)算機(jī)上的Java程序調(diào)用另一臺(tái)機(jī)器上的對(duì)象方法,或者說(shuō)允許向一臺(tái)機(jī)器上的對(duì)象發(fā)消息。RMI運(yùn)行在JAVA虛擬機(jī)(JVM)之上,它的遠(yuǎn)程服務(wù)接口包括:RMIStub

RMISkeleton與RPC的很多功能基本相同,不同之處在于“序列化”RMI序列化—負(fù)責(zé)把方法所用的參數(shù),轉(zhuǎn)換為字節(jié)碼序列流,并在另一端重現(xiàn)。101RPC與RMI主要區(qū)別還有:RPC是嚴(yán)格限定客戶和服務(wù)關(guān)系的RMI沒有客戶和服務(wù)方式的限定,在Java應(yīng)用中,服務(wù)本身可能也是其它對(duì)象的客戶。RMI主要特點(diǎn)二:RMI使用“傳值”而不使用“傳址”方式,恢復(fù)了良好的信息隱蔽方式,因?yàn)檫h(yuǎn)程方法調(diào)用實(shí)際上只傳送Stub存根。RMI主要特點(diǎn)一:RMI不僅下載對(duì)象中的數(shù)據(jù),在必要的時(shí)候,允許動(dòng)態(tài)下載類的實(shí)現(xiàn)。

EJB服務(wù)器102EJB規(guī)定了創(chuàng)建客戶機(jī)接口的標(biāo)準(zhǔn):

?EJBHome---使用JNDI(javanamediscoverinterface)查找接口對(duì)象。提供創(chuàng)建、刪除、查找等操作。

?EJBRemote---通過(guò)該接口調(diào)用構(gòu)件的業(yè)務(wù)方法

?RMI/IIOP或RMI/JRMP協(xié)議---底層分布式通信機(jī)制EJB服務(wù)器標(biāo)準(zhǔn)模型:服務(wù)器基本框架EJB體系結(jié)構(gòu)業(yè)務(wù)方法創(chuàng)建、刪除發(fā)現(xiàn)、查找

對(duì)象池EJB構(gòu)件/容器Home接口Bean代理Bean代理Bean實(shí)現(xiàn)EJB部署描述EJB應(yīng)用程序Remote接口…..…..103EJB服務(wù)器基本框架JavaBeansAppletsCORBARMI

數(shù)據(jù)庫(kù)名字/目錄EJBsJSPsServlets消息郵件

事務(wù)連接器容器Java2SDK標(biāo)準(zhǔn)版

工具

應(yīng)用編程模型?提供容器管理?提供大型企業(yè)應(yīng)用的編程框架?提供的底層服務(wù)是直接使用Java語(yǔ)言相關(guān)的服務(wù)功能104EJB容器EJB容器為EJB構(gòu)件提供運(yùn)行環(huán)境。EJB容器管理EJB構(gòu)件。客戶機(jī)應(yīng)用程序并不直接與EJB構(gòu)件進(jìn)行交互,它們是通過(guò)容器生成的兩個(gè)接口與本地EJB構(gòu)件進(jìn)行交互。EJB容器主要

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論