分布式對(duì)象中間件技術(shù)
摘 要:分布式對(duì)象中間件技術(shù)是為了解決分布計(jì)算和軟件復(fù)用過程中存在的異構(gòu)問題而提出的。,EJB,COM/是目前主要的3大中間件技術(shù),他們都有自己的優(yōu)勢應(yīng)用領(lǐng)域,和的結(jié)合在解決 WWW應(yīng)用方面具有無比的優(yōu)勢。本文介紹了基于/ 的 WWW信息查詢系統(tǒng)開發(fā)的一般方法。
關(guān)鍵詞:中間件;分布式對(duì)象中間件;CORBA; ?
隨著計(jì)算機(jī)技術(shù),尤其是技術(shù)的發(fā)展,跨地域、跨企業(yè)、跨業(yè)務(wù)的計(jì)算機(jī)應(yīng)用越來越廣泛。但是不同硬件平臺(tái)、網(wǎng)絡(luò)環(huán)境、數(shù)據(jù)庫等異質(zhì)性因素影響了計(jì)算機(jī)系統(tǒng)集成應(yīng)用。應(yīng)用開發(fā)過程中大約有70%的時(shí)間和精力用于解決與業(yè)務(wù)邏輯沒有直接關(guān)系的跨平臺(tái)難題,因此,有必要將分布式應(yīng)用所面臨的共性問題進(jìn)行提煉,抽象形成一個(gè)可復(fù)用的軟件部件—中間件—供應(yīng)用軟件使用。過去中間件系統(tǒng)如DCE(Distributed Computing Environment)是面向過程的軟件復(fù)用模式體系結(jié)構(gòu),隨著面向?qū)ο蠹夹g(shù)的發(fā)展和客戶/服務(wù)器模式的流行,分布式對(duì)象中間件技術(shù)已成為分布計(jì)算的主流技術(shù)。本文介紹了3大分布式對(duì)象中間件技術(shù)及基于CORBA/的WWW系統(tǒng)開發(fā)的一般過程。?
1中間件技術(shù)
中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用借助這種軟件可以在不同技術(shù)之間共享資源,中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通訊。中間件的目標(biāo)是要解決系統(tǒng)的互連和互操作,他的核心是解決名字服務(wù)、安全控制、并發(fā)控制、可靠性保證、效率保證等方面的問題,要實(shí)現(xiàn)互聯(lián)還要解決支持各種通訊協(xié)議、各種通訊服務(wù)模式、傳播各種數(shù)據(jù)內(nèi)容、數(shù)據(jù)格式翻譯、流量控制、數(shù)據(jù)加密、數(shù)據(jù)壓縮等。按照IDC的分類方法,中間件分為6類:終端仿真/屏幕轉(zhuǎn)換中間件、數(shù)據(jù)訪問中間件、遠(yuǎn)程過程調(diào)用中間件、消息中間件、交易中間件和分布式對(duì)象中間件。
傳統(tǒng)的對(duì)象技術(shù)通過封裝、繼承及多態(tài)性提供良好的代碼重用功能。但是,這些對(duì)象只存在于一個(gè)程序中,外界并不知道他們的存在,也無法訪問他們。分布式對(duì)象中間件就是要解決這些問題,他提供一個(gè)標(biāo)準(zhǔn)構(gòu)件框架,能使不同廠家的軟件通過不同地址空間、網(wǎng)絡(luò)和操作系統(tǒng)進(jìn)行交互訪問。對(duì)象技術(shù)的優(yōu)勢和分布式對(duì)象中間件的標(biāo)準(zhǔn)化,促使對(duì)象中間件功能最終將涵蓋幾類中間件的功能,從而成為中間件產(chǎn)品的主流。
?
2分布式對(duì)象中間件技術(shù)?
2.1公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu)CORBA
CORBA由對(duì)象管理組織OMG于1991年提出,其旨在將錯(cuò)綜復(fù)雜的網(wǎng)絡(luò)編程從單獨(dú)的組件和應(yīng)用中移走。ORB是CORBA平臺(tái)的核心,他提供了客戶—對(duì)象間實(shí)現(xiàn)透明通信的方法,當(dāng)客戶激活一個(gè)方法時(shí),ORB負(fù)責(zé)定位對(duì)象實(shí)現(xiàn)并透明激活將請(qǐng)求傳輸給對(duì)象實(shí)現(xiàn)并返回結(jié)果。IDL是不依賴于具體編程語言和計(jì)算平臺(tái)的接口語言,用來定義對(duì)象接口,IDL對(duì)描述跨平臺(tái),跨語言應(yīng)用程序提供一個(gè)公共的表示方式,IDL編譯器可根據(jù)用戶需要將IDL定義轉(zhuǎn)化為應(yīng)用程序語言,如C++,等。IDL樁為客戶提供了靜態(tài)調(diào)用對(duì)象方式,IDL構(gòu)架為客戶提供了靜態(tài)實(shí)現(xiàn)方式,他們由IDL編譯器產(chǎn)生,作為具有調(diào)用功能的子例程分別在客戶方和服務(wù)器方使用。而動(dòng)態(tài)調(diào)用接口DII( Invocation )和動(dòng)態(tài)構(gòu)架接口DSI( Skeleton )提供了動(dòng)態(tài)調(diào)用方式和動(dòng)態(tài)實(shí)現(xiàn)方式。在ORB核心和對(duì)象實(shí)現(xiàn)之間還有對(duì)象適配器,他負(fù)責(zé)服務(wù)對(duì)象的注冊(cè)、對(duì)象引用的創(chuàng)建和解釋、對(duì)象實(shí)現(xiàn)的激活和去活以及客戶請(qǐng)求的分發(fā)等。ORB之間的互操作主要是由ORB橋,( InterORB Protocol)和EISP(Environment Specific InterORB Protocol)等互操作協(xié)議來規(guī)定。是建立在TCP協(xié)議之上的基于連接的協(xié)議。
2.2分布組件對(duì)象模式
是Microsoft與業(yè)界廠商合作提出的一種分布構(gòu)件對(duì)象模型。DCOM起源于動(dòng)態(tài)數(shù)據(jù)交換DDE技術(shù)。通過剪切/粘貼(cut/)實(shí)現(xiàn)2個(gè)應(yīng)用程序之間共享數(shù)據(jù)的動(dòng)態(tài)交換。對(duì)象連接和嵌入OLE就是從DDE引伸而來的,隨后Microsoft引入了構(gòu)件對(duì)象模型COM,形成了COM對(duì)象之間實(shí)現(xiàn)互操作的二進(jìn)制標(biāo)準(zhǔn)。COM規(guī)定了對(duì)象模型和編程要求,使COM對(duì)象可以與對(duì)象相互操作。DCOM出現(xiàn)是為了彌補(bǔ)COM在支持遠(yuǎn)程組件方面的不足。他為分布在網(wǎng)絡(luò)不同節(jié)點(diǎn)的2個(gè)COM組件提供了互操作的基礎(chǔ)結(jié)構(gòu)。
將COM,DCOM,OLE及這些服務(wù)結(jié)合起來形成了微軟創(chuàng)造的分布式網(wǎng)絡(luò)互聯(lián)體系結(jié)構(gòu)DNA。
2.3EJB企業(yè)JAVA平臺(tái)
近年來,Sun Microsystem公司提出的基于JAVABean組件技術(shù)的EJB及 JAVA平臺(tái),JAVABean是JAVA向組件方面的發(fā)展,組件的單位叫Bean或JAVABean,這種組件模式是JAVA編寫的可移植的,平臺(tái)獨(dú)立的組件模式,在分布計(jì)算模型中,可用來構(gòu)建客戶端程序。EJB于1998年提出,是服務(wù)器方的組件模式,定義了開發(fā)和布署可重用的JAVA服務(wù)器組件模式和API規(guī)范。JAVABeans和EJB體系結(jié)構(gòu)之間,一個(gè)最明顯的區(qū)別是事件處理。JAVABean是為緊耦合的桌面環(huán)境而設(shè)計(jì),使用局部事件模式,不利于系統(tǒng)的集成。EJB體系結(jié)構(gòu)對(duì)分布式的事件提供靈活的支持,允許遠(yuǎn)程客戶通過遠(yuǎn)程方法調(diào)用API訪問服務(wù)器功能。適應(yīng)分布式體系結(jié)構(gòu)中的多層應(yīng)用。EJB還不是一個(gè)完整的平臺(tái),其提供服務(wù)也有限,于是在EJB的基礎(chǔ)上,提出能適應(yīng)廣泛企業(yè)計(jì)算的 JAVA平臺(tái)技術(shù)。 JAVA平臺(tái)包括EJB ,JSP,Servlet,JDBC等組件。
上述3種中間件各有特點(diǎn),CORBA可以跨各種操作平臺(tái),包括Windows OS ,甚至支持DOS操作系統(tǒng)而DCOM只支持Win 32; 同時(shí)CORBA跨多種語言,支持C++,Smalltalk,JAVA,,Ada等語言。DCOM主要以桌面Wintel同質(zhì)平臺(tái)對(duì)象跨應(yīng)用使用見長,支持帶有指針結(jié)構(gòu)的語言如C,C++而不支持JAVA語言。Enterprise JAVA在Internet環(huán)境下集組件模式、跨異構(gòu)平臺(tái)、兼具事務(wù)處理、數(shù)據(jù)庫連接等許多基礎(chǔ)結(jié)構(gòu)服務(wù),但僅限于支持JAVA語言。因此我們利用JAVA語言具有簡單、面向?qū)ο?、分布式、解釋型、健壯、安全、可移植性的特點(diǎn)結(jié)合CORBA的跨異構(gòu)平臺(tái)的特性實(shí)現(xiàn)對(duì)象的重用。
?
3CORBA/JAVA的WWW應(yīng)用系統(tǒng)
我們?cè)O(shè)計(jì)的系統(tǒng)是要實(shí)現(xiàn)以下目標(biāo):在客戶端用瀏覽器下載服務(wù)器上小程序Applet,通過Java虛擬機(jī)和CORBA的ORB實(shí)現(xiàn)對(duì)遠(yuǎn)端服務(wù)對(duì)象的調(diào)用,并通過服務(wù)對(duì)象訪問遠(yuǎn)端數(shù)據(jù)庫,最后返回查詢結(jié)果并在瀏覽器上顯示。其系統(tǒng)結(jié)構(gòu)圖如圖1所示。
3.1程序設(shè)計(jì)與實(shí)現(xiàn)
該系統(tǒng)用Borlard Jbuilder 5.0進(jìn)行開發(fā), Jbuilder 5.0提供了JAVA語言的CORBA開發(fā)支持,VisiBroker for JAVA是一個(gè)內(nèi)置于Jbuild 3.0 IDE的開發(fā)工具,可以用來建立、管理和開發(fā)分布式的跨多種平臺(tái)的開放的、易用的、可交互的 CORBA Java應(yīng)用程序。這里開發(fā)一個(gè)可以訪問MS SQL 數(shù)據(jù)庫3層C/S模式應(yīng)用。在這個(gè)系統(tǒng)中要用到定義JDBC API的.sql包,該包定義了JDBC所有的類,接口和方法。主要的類和接口有Manager—處理驅(qū)動(dòng)程序的裝入;.sql.—驅(qū)動(dòng)程序接口;.sql.Statement為sql語句提供一個(gè)容器,java.sql.Connection表示到特定數(shù)據(jù)的連接。
(1)定義CORBA objects和編譯IDL接口
首先定義一個(gè)接口模塊Query?idl,該模塊包含的DataQuery接口提供了一個(gè)連接數(shù)據(jù)庫并返回查詢結(jié)果的方法dbQuery( ):
用visiBroker IDL編譯器(idl2java)編譯Query?idl產(chǎn)生一個(gè)JAVA接口DataQuery.java和其他必需的JAVA文件。其中_st_DataQuery.java是客戶端的stub,_sk_DataQueryImplBase.java是服務(wù)器端的骨架(skeleton),另外還包括為傳遞參數(shù)提供支持的DataQueryHolder.java和提供輔助功能DataQueryHelper.java。
(2) CORBA接口的實(shí)現(xiàn)
對(duì)象實(shí)現(xiàn)類必須結(jié)合編譯產(chǎn)生的骨架來完成,類DataQueryImpl.java需要繼承由 IDL編譯產(chǎn)生的骨架_sk_DataQueryImplBase類。其中dbQuery( ) 通過JAVA.JDBC.API實(shí)現(xiàn)連接數(shù)據(jù)庫并返回查詢結(jié)果:
(3)創(chuàng)建服務(wù)端應(yīng)用程序
類?java服務(wù)程序負(fù)責(zé)下列任務(wù):初始化ORB和BOA,建立服務(wù)對(duì)象DataQueryImpl,通知對(duì)象可用及準(zhǔn)備接受請(qǐng)求。
(4)創(chuàng)建客戶端程序
實(shí)現(xiàn)步驟:初始化CORBA環(huán)境,查找定位到DataQuery對(duì)象,然后調(diào)用dbquery( )方法。
最后編譯服務(wù)器端和客戶端程序,設(shè)置好程序中用到的數(shù)據(jù)源,啟動(dòng)提供對(duì)象查找服務(wù)的. Agent和服務(wù)端應(yīng)用程序.java,最后在客戶端IE 地址欄健入:http://
?
4結(jié)語
中間件屏蔽了操作系統(tǒng)和網(wǎng)絡(luò)協(xié)議的差異,為應(yīng)用層軟件提供了多種通訊機(jī)制和統(tǒng)一的應(yīng)用平臺(tái),簡化了軟件開發(fā)的復(fù)雜度,提高了開發(fā)的效率。CORBA已成為軟件開發(fā)的主流。CORBA獨(dú)立于網(wǎng)絡(luò)協(xié)議,獨(dú)立于編程語言,獨(dú)立于軟硬件平臺(tái),是目前最有生命力的跨平臺(tái)分布計(jì)算技術(shù)。JAVA由于其健壯性,安全性,移動(dòng)性和跨平臺(tái)及“一次編寫,各處運(yùn)行”的優(yōu)點(diǎn),使其成為WWW網(wǎng)上開發(fā)最好的語言。毫無疑問,JAVA和CORBA的結(jié)合將會(huì)把分布計(jì)算和軟件復(fù)用推向新的階段。