




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 數(shù)據(jù)庫中間件(DM,Database Middleware) 遠程過程調(diào)用中間件(RPC, Remote Procedure Call) 面向消息中間件(MOM,Message Oriented Middleware) 事務處理中間件(TPM,Transaction Processing Monitor) 基于對象請求代理(ORB,Object Request Broker)的中間件 COM(Component Object Model)起源于OLE(Object Linking and Embedding,對象連接和嵌入);當時的OLE使用一種稱為動態(tài)數(shù)據(jù)交換(Dynamic Data E
2、xchange,簡稱DDE)機制來支持程序之間的通信,而DDE建立在Windows消息機制基礎上,穩(wěn)定性和效率都很差;COM定義了客戶與構件之間互操作的標準,包括規(guī)約與實現(xiàn)兩部分。 - 規(guī)約部分定義了構件之間的通信機制,這些規(guī)約不依賴于任何特定的語言和操作系統(tǒng)。 - 實現(xiàn)部分即COM庫,為COM規(guī)約的具體實現(xiàn)提供一些核心服務。 以COM技術為基礎的OLE后改名為ActiveX。 隨著NT4.0的發(fā)布,COM技術需要延伸到分布計算環(huán)境,這就產(chǎn)生了所謂的DCOM(Distributed COM,分布構件對象模型)。 DCOM用網(wǎng)絡協(xié)議來代替本地進程之間的通信,并針對分布環(huán)境提供了一些新的特性,例如
3、位置透明、網(wǎng)絡安全性、跨平臺調(diào)用等。 COM/DCOM技術為基于構件的軟件開發(fā)提供了基礎。但是,如果用它來開發(fā)企業(yè)級應用系統(tǒng),顯然還需要功能強大的基礎設施,這些基礎設施將為構件提供基本的運行和部署環(huán)境。 為了滿足企業(yè)級應用的需求,微軟公司推出了一種微軟事務服務器(Microsoft Transaction Server,簡稱MTS)。 MTS把應用系統(tǒng)的客戶程序、應用構件和各種資源有機結合起來,彌補了COM/DCOM的不足,為分布式企業(yè)應用提供了一種服務器端的構件運行和部署環(huán)境。 MTS是從NT4.0+ SP4的Option Pack開始,隨Windows操作系統(tǒng)免費提供的。 隨著因特網(wǎng)應用的
4、日益廣泛,企業(yè)級應用的體系結構越來越重要。為了使Windows真正成為企業(yè)應用平臺,微軟公司又推出了Windows DNA(Distributed interNet Applications Architecture,分布式網(wǎng)絡應用體系結構)。 Windows DNA是一個完整的、多層的新一代企業(yè)應用體系結構,它包含工具、數(shù)據(jù)庫、操作系統(tǒng)、編程模型和應用服務等。在新的企業(yè)應用體系結構下,微軟公司希望進一步把COM、DCOM和MTS統(tǒng)一起來,形成真正適合于企業(yè)級應用的構件技術,這就是COM+。 COM+仍然以COM/DCOM為基礎,包含了MTS。 COM+是一種中間件技術的規(guī)約,其要點是提供建立
5、在操作系統(tǒng)上的、支持分布式企業(yè)級應用的“服務”。 COM+是在20世紀末隨著Windows2000發(fā)布才面世的。Windows DNA是一個服務器端的開發(fā)平臺,包含了以下產(chǎn)品:Windows NT/2000: 操作系統(tǒng),為所有微軟公司技術提供運行環(huán)境和支持。DCOM: 支持分布式構件的核心技術。MSMQ(Microsoft Message Queue): 消息隊列產(chǎn)品,支持構件間的異步通信。MTS(Microsoft Transaction Server): 管理構件的應用服務器。Microsoft Wolfpack: 支持集群服務器的軟件。Microsoft SQL Server: 一個關系
6、型數(shù)據(jù)庫管理系統(tǒng)。Microsoft IIS(Internet Information Server): Web服務器。Microsoft Management Console: 部署和管理工具。COM+技術是以上產(chǎn)品(尤其是DCOM、MTS、還有MSMQ的一部分)的相互結合。COM+COM+目錄負載平衡駐留內(nèi)存數(shù)據(jù)庫對象池新的事件模型構件管理和部署JIT激活MTS基于接口的編程模型基本的構件服務遠程支持分布式構件服務DCOM事務支持資源分發(fā)管理安全模型易于管理COM+的核心是改進的COM/DCOM和MTS的集成,但是COM+增加了一些非常重要的構件服務,比如負載平衡、駐留內(nèi)存數(shù)據(jù)庫、事件模型
7、、隊列服務等。COM+ 還提供了一個比MTS 更好的構件管理環(huán)境COM+ Explorer,用來設置COM+應用和COM+構件的屬性信息。另外,COM+還支持所謂的申述式編程模型(declarative programming model),它允許開發(fā)人員以較通用的方式開發(fā)構件,而一些細節(jié)則留到部署時再確定。(1)真正的異步通信 COM+底層提供了隊列構件服務,允許客戶和構件進行異步通信。 (2)事件服務 新的事件機制利用系統(tǒng)服務簡化了事件模型,避免了COM可連接對象機制的瑣碎細節(jié),使事件源和事件接收方實現(xiàn)事件功能更加靈活。(3)靈活性 動態(tài)負載平衡以及駐留內(nèi)存數(shù)據(jù)庫、對象池等系統(tǒng)服務為COM
8、+的靈活性提供了技術基礎。(4)可管理和可部署性 COM+的申述式編程模型和構件管理環(huán)境支持應用系統(tǒng)在開發(fā)完成后的管理和部署。(5)易于開發(fā) COM+開發(fā)模型比以前的COM構件開發(fā)更為簡化。 (1)全局唯一標識符(Globally Unique Identifier ,簡稱GUID) GUID是一個128位整數(shù),可用來唯一地標識COM對象或接口。GUID來源于開放軟件基金會(Open Software Foundation,簡稱OSF)采用的通用統(tǒng)一標識符(Universally Unique Identifier,簡稱UUID),UUID被定義為分布式計算環(huán)境(Distributed Com
9、puting Enviorment,簡稱DCE)的一部分,主要用于標識遠程過程調(diào)用(Remote Procedure Call,簡稱RPC)通信的雙方。(2)COM對象和COM構件 在COM規(guī)約中,“構件”和“對象”經(jīng)?;煜?,所謂COM對象是指符合COM規(guī)則的CoClass(Component Class,構件類)的實例。每一個COM對象都有一個GUID,稱為CLSID(CoClassID)。 COM構件是指一組以編譯后的形式提供一組功能的COM對象。COM構件獨立于具體編程語言,以二進制形式(DLL或EXE)發(fā)布,可以獨立升級,可以透明地在網(wǎng)絡上被重新分配。(3)COM接口 COM接口是CO
10、M對象顯示出來的所有信息,是一組邏輯上相關的函數(shù)集合。 每一個接口都有一個GUID,稱為接口標識符(Interface Identifier,簡稱 IID)。 COM接口具有不變性。COM接口只允許單繼承。 一個COM對象可實現(xiàn)多個COM接口,這體現(xiàn)了COM對象多態(tài)性,這些接口由IUnknown接口來管理。(4)IUnknown接口 IUnknown是所有COM對象都必須實現(xiàn)的接口,其他接口都直接或間接繼承IUnknown接口,它包含AddRef 、Release和QueryInterface三個操作。 QueryInterface負責向客戶提供接口查詢功能。Addref和Release相結合
11、,通過引用計數(shù)(reference counting)的方法,提供對COM對象的生存周期進行管理的功能。(5)接口定義語言 微軟接口定義語言MIDL(Microsoft Interface Definition Language)是定義COM接口的申述式語言,其目標是通過獨立于具體編程語言的方式來定義接口。MIDL是基于開放軟件基金會分布式計算環(huán)境中的遠程過程調(diào)用的接口描述語言,常簡稱為IDL。 客戶機程序與進程內(nèi)構件可通過直接函數(shù)調(diào)用進行交互。 COM采用了本地過程調(diào)用(Local Procedure Call,簡稱LPC)作為進程間通信機制。本地對象本地構件樁stubCOM本地服務器進程客
12、戶機進程客戶機應用進程內(nèi)對象進程內(nèi)構件本地對象代理COMLPC (1)COM庫 (COM library) COM庫是COM標準的系統(tǒng)級實現(xiàn),為COM對象的標識和創(chuàng)建、內(nèi)存管理、構件程序的卸載等提供了一組標準接口和輔助函數(shù)。在Windows系統(tǒng)中,COM庫主要包含在OLE32.DLL和RPCSS.exe文件中,COM庫很多地方直接用到了Windows系統(tǒng)的一些特性,例如系統(tǒng)注冊表、動態(tài)連接庫等。 (2)系統(tǒng)注冊表(windows registry) 系統(tǒng)注冊表是一個全操作系統(tǒng)范圍公用的信息倉庫,它可用作客戶程序、構件程序和COM庫三者交換有關COM對象信息和接口信息的場所。 (3)類工廠(cl
13、ass factory) 類工廠是能夠創(chuàng)建其他COM對象的特殊COM對象,支持一個特殊的接口 IClassFacroty,為例化CoClass構件類提供了一種標準機制。顯然,每一個COM對象類應該有一個相應的類工廠對象。IClassFactory接口中定義了兩個重要的操作CreateInstance和LockServer。CreateInstance生成COM對象并返回所請求接口的指針。LockServer在內(nèi)存中保持COM構件。 (4)COM服務器 COM服務器是指包含一個或多個COM對象類和相應的類工廠,能向客戶提供服務的一個程序(EXE)或庫(DLL)。 (1)自動化對象 所謂自動化是一
14、種允許高級語言(比如VBScript)使用構件的COM應用技術。自動化的核心是IDispatch接口,自動化對象就是實現(xiàn)了IDispatch接口的COM對象。(2)IDispatch接口 IDispstch是自動化對象必須實現(xiàn)的接口。IDispatch在IUnkown接口的基礎上增加了GetIDsOfNames、GetTypeInfo、GetTypeInfoCount和Invoke等操作。 (3)類型庫和對象描述語言 對象描述語言(Object Description Language,簡稱ODL)是IDL的擴充,用來描述COM對象的類型信息,一個COM對象的類型信息通常包括每個接口的類型信息
15、(用interface或disp interface關鍵字)和COM對象類的類型信息(用coclass關鍵字)。 類型庫(type library)是IDL文件(*.idl)經(jīng)編譯后產(chǎn)生的一個二進制資源文件(*.tlb),包含COM服務器中COM對象和接口的信息。IDL文件中用library關鍵字描述類型庫信息,包括類型庫的全局唯一標識符(即LIBID)、類型庫所使用的語言、版本等,也可用import關鍵字移入其他類型庫信息。(4)ActiveX控件 ActiveX控件(ActiveX control)是一種主要用于用戶界面和Internet的輕量級COM構件,是一種自動化對象。ActiveX
16、控件是從OCX(OLE控件)發(fā)展而來的。 DCOM是COM的進一步擴展。DCOM用網(wǎng)絡協(xié)議來代替本地進程之間的通信,并針對分布環(huán)境提供了一些新的特性,例如位置透明、網(wǎng)絡安全性、跨平臺調(diào)用等。DCOM的分布功能依靠遠程過程調(diào)用實現(xiàn)??蛻魴CDCOM網(wǎng)絡協(xié)議COM 運行時環(huán)境安全提供者DCE RPC協(xié)議棧COM 運行時環(huán)境安全提供者DCE RPC協(xié)議棧構件簡單地說,COM+構件就是COM構件加上一些規(guī)則和實現(xiàn)幾個接口。COM+編程模型主要有三個原則:(1)COM+構件建成COM DLL。(2)COM構件要符合基本編程和資源分配規(guī)則。主要有: - 為單個獨立客戶機編程,不必考慮多用戶,因為COM+會處
17、理多用戶。 - 構件需要資源(如數(shù)據(jù)庫連接)時,不要過早請求。 - 盡早釋放資源。 - 構件本身不必保持狀態(tài),使COM+能更有效地管理資源。 (3)COM+構件要利用COM+API與COM+交互。(1)代理進程(surrogate executable) MTS構件和COM+構件需要以DLL形式實現(xiàn),DLL形式實現(xiàn)進程內(nèi)構件,這樣就很難生成多用途構件,既在MTS中運行,又作為獨立服務器端進程外構件。為此,微軟公司提出代理進程的概念,負責裝載并提供COM+構件運行的周境(context)。(2)對象周境(object context) COM+的周境是指共享同一套運行要求的對象集合。由于不同的對
18、象類可能使用了不同的部署信息,所以一個進程通常包含一個或多個周境,這些周境的部署互不兼容。所有無部署信息的對象都駐留在調(diào)用方的周境中。每一個周境都有一個對象,即對象周境,運行在此周境中的對象可通過CoGetObjectContext API函數(shù)得到此對象周境,利用對象周境的IObjectContext接口可以訪問到周境的屬性信息。(3)對象周境的IObjectContext接口 每一個COM+構件對象都有相應的對象周境(或稱對象描述表),對象周境提供IObjectContext接口 (MtxAS.dll或ComSvcs.dll中實現(xiàn)),COM+構件對象通過該接口與COM+通信。 (4)截取(i
19、ntercept) COM+系統(tǒng)可以在創(chuàng)建COM+對象時為其分配一個對象周境,這種技術被稱為截取。 即時激活:Just In Time Activation,簡稱JITA。 JITA是COM+保持資源有效利用的一種動態(tài)對象激活機制,它是COM+的核心機制。 對象只有在真正需要時才被激活,如果對象一旦不用,COM+就釋放它,并在客戶再次需要時由COM+重新激活。(1)COM+構件的生成周期 COM+構件的生成周期包括創(chuàng)建(create)、激活(activate)、去活(deactivate)、刪除(destroy)。 客戶機創(chuàng)建對象時,COM創(chuàng)建但不激活對象,對象在第一次方法調(diào)用時被激活。對象去
20、活的時間取決于對象是否支持事務。如果事務性對象調(diào)用SetAbort或SetComplete,則方法調(diào)用完成后立即去活,即使客戶仍引用這個對象。下次客戶調(diào)用這個對象時,COM+自動重新激活這個對象,對客戶這是透明的。非事務性對象則保持活動狀態(tài),直到客戶釋放該對象的所有引用。(2)IObjectControl接口 COM+構件可實現(xiàn)IObjectControl接口,該接口有兩個方法,即激活和去活,COM+分別在對象激活和去活時自動調(diào)用它們。因此,我們可以利用這兩個方法做激活前的準備工作和去活前的掃尾工作,其作用相當于C+和Java的構造方法和析構方法。 請注意,COM+構件不能訪問IObjectC
21、ontrol接口,只有COM+運行時周境可以調(diào)用該接口的方法。 IObjectControl接口還有一個名為CanBePooled的方法,對象通過該方法通知COM+運行時周境,它是否放在對象池中供復用。 COM和MTS把構件的所有部署信息都保存在Windows的系統(tǒng)注冊表中。 而COM+則把大多數(shù)的構件信息保存在一個新的數(shù)據(jù)庫中,稱為COM+目錄。 COM+目錄統(tǒng)一了COM和MTS的注冊模型,并提供了一個專門針對構件的管理周境。 COM+目錄信息既可以通過COM+管理程序檢查或設置,也可以在程序中通過COM+提供的一組COM接口來訪問。 COM+構件可有以下幾種事務特性: 1)要求事務。對象必
22、須運行在一個事務周境中。 2)要求一個新的事務。每個事務都運行在一個單獨的事務周境中。 3)支持事務。對象可以運行在一個客戶的事務周境中,或者創(chuàng)建一個新的事務周境。 4)不支持事務。對象不運行在事務周境中。 COM+構件的事務特性可以由COM+管理程序來部署,并通過對象周境實現(xiàn)。通過對象周境,一個事務操作可以被提交、被取消或者禁止提交。 COM+沿用MTS基于角色的安全模型。 在開發(fā)階段,開發(fā)人員負責定義各種角色,并且在實現(xiàn)構件功能時,只允許指定角色的用戶才可以執(zhí)行這些功能; 在配置階段,管理員負責為所有的角色指定有關的用戶帳號,COM+允許達到方法級的安全控制。 COM+系統(tǒng)是一個典型的分布
23、式事務處理系統(tǒng),主要由以下部分組成。 (1)COM+運行環(huán)境(COM+ runtime environment) 即COM+構件容器,負責在服務器上執(zhí)行、放置所有創(chuàng)建的COM+構件。 (2)COM+構件服務管理程序(COM+ explorer) 是Windows 2000管理工具中的一部分,代替了MTS管理程序和DCOM配置程序,負責增加、刪除COM+應用和COM+構件,設置COM+應用和COM+構件的屬性信息,比如事務特性、安全特性等等。 (3)COM+應用(COM+ application) 對應于MTS中的包(package),COM+稱之為COM+應用(COM+ aApplicatio
24、n),每一個COM+應用包含一個或多個COM+構件以及有關的信息。同一個COM+應用中的COM+構件共享同一個進程,共享同一套安全角色定義。 (4)資源分配程序(resource dispensers) 資源分配程序分配數(shù)據(jù)庫連接、網(wǎng)絡連接、對象、內(nèi)存塊等資源。資源分配程序主要是通過提供資源池(resource pool)功能來管理資源。最常用的有ODBC資源分配程序和共享屬性管理程序(Shared Property Manager ,簡稱SPM)。 (5)分布式事務協(xié)調(diào)程序 分布式事務協(xié)調(diào)程序(Distributed Transaction Coordinator ,簡稱DTC)是Windo
25、ws的一個后臺服務,它用兩階段提交的方式實現(xiàn)事務的功能,提供可伸縮、健全的分布式事務管理服務。 COM+封裝了服務器端構件系統(tǒng)平臺的復雜性,以系統(tǒng)服務的形式為多構件應用系統(tǒng)提供基本功能。 (1)COM+隊列化構件(Queued Component ,簡稱QC) QC是COM+的關鍵特性,它基于微軟消息隊列服務 (Microsft Message Queue Server ,簡稱MSMQ),提供了一種異步的,基于消息的運行方式。 (2)COM+事件模型 COM+事件模型改進了COM的可連接對象機制,它采用了多通道的發(fā)布/訂閱(multicasting publish/subscribe)事件機制
26、,允許多個客戶去“訂閱”由各種構件對象“發(fā)布”的事件。(3)負載平衡(load balancing) 負載平衡是分布式應用的一種高層次需求,使用DCOM和MTS的配置特性能實現(xiàn)初步的靜態(tài)負載平衡,但是不能實現(xiàn)動態(tài)負載平衡,而COM+提供了一個負載平衡服務,它可以以透明方式實現(xiàn)動態(tài)負載平衡。 (4)駐留內(nèi)存數(shù)據(jù)庫(In Memory DataBase,簡稱IMDB) IMDB是一個駐留在內(nèi)存中的支持事務特性的數(shù)據(jù)庫系統(tǒng),它可以為COM+應用程序提供快速的數(shù)據(jù)訪問。 (5) COM+對象池。 對象池是指把對象的實例保留在內(nèi)存中,以便當客戶請求創(chuàng)建對象時可以馬上用到這些對象。對象池如同IMDB一樣,
27、完全是出于效率考慮,用于建立大型的應用系統(tǒng)。 .NET.NET .NET.NET .NET.NET .NET.NET .NET.NET CORBACORBA:Common Object Request Broker Architecture,公共對象請求代理體系結構,由OMG制定的分布對象模型。要點:要點:通過IDL定義接口,使用不同編程語言、不同編譯器實現(xiàn)的構件,可以通過ORB連接,形成一個跨平臺的應用。OMGOMG:一個制定行業(yè)標準和對象管理標準的非盈利組織,成立于1989年,目前已擁有會員近千個,包括許多研究機構、大學和大公司如IBM、HP等。CORBACORBA產(chǎn)品:產(chǎn)品:CORBA是
28、一套規(guī)約,而不是一個產(chǎn)品,開發(fā)商可以開發(fā)不同的產(chǎn)品來實現(xiàn)CORBA規(guī)約。著名的產(chǎn)品有IONA公司的Orbix、 Corel(Borland/Inprise)公司的VisiBroker、 IBM公司的Component Broker等。第一代:第一代:CORBA規(guī)約的第一代主要集中在為分布式對象定義一個基礎,其核心是ORB和IDL。CORBA 2.0CORBA 2.0:1995年頒布,增加了ORB互操作性規(guī)約,主要是基于TCP/IP的IIOP協(xié)議(Internet Inter-ORB Protocal,因特網(wǎng)ORB互聯(lián)協(xié)議)。 CORBA 2.1CORBA 2.1:1997年頒布,增加了COM/
29、CORBA互操作規(guī)范。CORBA 2.2CORBA 2.2:1998年頒布,增加了易移植的對象適配器(Portable Object Adapter,簡稱POA)和IDL到Java語言的映射規(guī)約。CORBA3.0CORBA3.0草案:草案:1999年提交,2002年正式發(fā)布。CORBA 3.0以前的版本只注意到對象本身,而沒有進一步考慮可部署的、由應用服務器管理的構件。 CORBA3.0增加了CCM(CORBA Component Model)CCM步微軟公司的 COM+和Sun公司的EJB的后塵,這三者的核心概念是相似的。它們均提供容器作為構件的運行環(huán)境,而諸如事務處理、安全處理、事件處理、
30、持久性等公共服務都是通過公共API訪問。但是,目前還沒有成熟的、完全實現(xiàn)CORBA3.0規(guī)約的產(chǎn)品。該模型描述了分布式對象系統(tǒng)的基本成分,有四個主要層次:應用對象(application objects)、公共設施(common facilities)、對象請求代理(ORB,Object Request Broker )和對象服務(object services)。應用對象公共設施對象服務對象請求代理ORB1) 對象服務是一組系統(tǒng)級的對象,為實現(xiàn)和管理對象提供了基本的功能,包括名字、生存周期服務、事務服務、安全服務等等。2) ORB是核心,它提供了一種機制,使得對象可以透明地發(fā)送請求和接受響應
31、。3) 公共設施是適用于眾多應用領域的通用構件,例如信息管理、系統(tǒng)管理、任務管理和用戶界面等。4) 應用對象是專用于特定領域的應用構件,OMG沒有為它制定標準。(1)客戶和對象實現(xiàn) 客戶是向對象發(fā)出請求的程序或進程,客戶通過訪問目標對象的對象引用來調(diào)用目標對象的操作,目標對象的實現(xiàn)方式對客戶是透明的。 對象實現(xiàn)是實現(xiàn)目標對象接口的代碼和數(shù)據(jù)的封裝實體。對象實現(xiàn)不依賴于ORB或者客戶調(diào)用對象的方式,對象可以具有不同的實現(xiàn)方式。通過使用不同的對象適配器,ORB系統(tǒng)可以支持各種不同類型的對象實現(xiàn)方式。(2)ORB內(nèi)核和ORB接口 ORB內(nèi)核提供了對象的通用表示和對象間通信的機制??蛻艉蛯ο髮崿F(xiàn)通過O
32、RB接口的形式訪問ORB內(nèi)核提供的功能,這些接口在所有的ORB實現(xiàn)系統(tǒng)中都是相同的。 ORB接口是客戶與對象實現(xiàn)可以直接訪問到的、抽象描述ORB操作的接口。ORB接口由ORB內(nèi)核實現(xiàn),它不依賴于任何的對象適配器。ORB接口主要包括:ORB初始化;獲取初始對象引用;對象引用操作;策略域的管理;線程有關的操作等。(3)基本對象適配器BOA和易移植對象適配器POA對象適配器是對象實現(xiàn)訪問ORB所提供服務的主要方式?;緦ο筮m配器(Basic Object Adaptor,簡稱BOA)和易移植對象適配器(Portable Object Adaptor,簡稱POA)是CORBA架構演變過程中兩個重要的里
33、程碑。 BOA著重CORBA服務器實現(xiàn),而不是CORBA對象實現(xiàn),BOA規(guī)范定義的體系結構比較模糊。 POA規(guī)約在CORBA 2.2中引入,可以看作是對BOA規(guī)約的改進。POA規(guī)約定義CORBA對象為具有標識、接口和實現(xiàn)的抽象實體,并引入了服務體(servant)的概念,使抽象的CORBA對象能和實現(xiàn)該對象功能的具體編程語言實體徹底分離。(4)接口倉庫和實現(xiàn)倉庫 接口倉庫是儲存、發(fā)布、管理相關對象接口定義的集合,是ORB系統(tǒng)的輔助部件。接口倉庫在實現(xiàn)時使用持久對象機制,通常以IDL文件為其輸入,將接口描述信息進行處理后存放在文件、數(shù)據(jù)庫或者其它形式的存儲機制中,并提供一組標準的調(diào)用接口供運行時
34、動態(tài)查詢。 實現(xiàn)倉庫包含了允許ORB定位和激活對象實現(xiàn)的信息。此外,實現(xiàn)倉庫也是儲存與ORB對象實現(xiàn)相關的其它信息(例如,調(diào)試信息,管理控制,安全性等)的公共場所。實現(xiàn)倉庫既可以和接口倉庫作為整體一起實現(xiàn),也可以作為一個單獨的部件實現(xiàn)。(5)客戶樁和實現(xiàn)骨架 客戶樁又稱IDL stubs,是一些由IDL編譯器根據(jù)IDL文件生成的、與編程語言相關的客戶端代碼段。客戶樁向客戶提供一個因接口而異的API,從而透明對象實現(xiàn)的位置和ORB操作。 實現(xiàn)骨架又稱IDL Skeleton,是由IDL編譯器根據(jù)IDL文件生成的,與編程語言相關的服務器端代碼框架。實現(xiàn)骨架提供將對象適配器轉發(fā)的請求調(diào)度到對象實現(xiàn)上
35、的適當操作的代碼。 請注意,實現(xiàn)骨架與客戶樁不是必然對應的。(6)動態(tài)激活接口DII和動態(tài)骨架接口DSI DII是一種允許動態(tài)創(chuàng)建和激活對CORBA對象的請求的客戶端接口。DII根據(jù)客戶代碼提供的要調(diào)用的對象、要執(zhí)行的操作、操作的參數(shù)集和參數(shù)類型等信息(其中包括從接口倉庫獲得的各種動態(tài)信息),在運行時動態(tài)創(chuàng)建和激活對對象的請求。注意,客戶通過靜態(tài)樁還是動態(tài)接口發(fā)出請求對于對象實現(xiàn)是透明的。 DSI是一種允許將請求在運行時從對象適配器動態(tài)提交給對象實現(xiàn)的接口。注意,對象適配器是通過靜態(tài)骨架還是動態(tài)骨架接口訪問對象實現(xiàn),對于客戶是透明的。1) OMG IDL 是CORBA的重要組成部分,已被國際標
36、準化組織ISO采納(ISO DIS 14750)。2) OMG IDL是獨立于具體編程語言的,一個IDL文件可以向多種編程語言映射。例如,IDL 到C,C+,Java,SmallTalk 等的映射。OMG IDL也是獨立于平臺的,由IDL定義的接口可以在不同的ORB和平臺上一致地表達。3) CORBA規(guī)約中主要部件的接口,例如ORB接口、Stub、Skeleton、對象適配器等,全部由OMG IDL定義。當然,OMG IDL更主要的用途是定義應用系統(tǒng)中的重要接口,這些接口是復用、互操作的關鍵部分,也是軟件架構的重要組成部分。/ StockMarket.idl /注釋 module StockM
37、arket /定義名字空間 typedef string StockSymbol; /類型說明 typedef sequence StockSymbolList; exception AccountExpired string expiration_date; ; /異常說明 interface Account; /forward declaration說明接口 interface StockServer /定義接口 float getStockValue(in StockSymbol symbol);/操作說明 StockSymbolList getStockSymbols(); ; int
38、erface StockAccount : Account /IDL支持多重繼承 readonly attribute float getbalance; /屬性說明 readonly attribute string getowner; Boolean makeWithdraw(in any f) raise(AccountExpired); ; 通過ORB,客戶機可以請求遠程對象的操作,這些操作是用與編程語言無關的接口定義語言IDL描述的。客戶機與遠程對象發(fā)送和接受請求的方法主要有兩種:靜態(tài)方法和動態(tài)方法。 靜態(tài)方法要求在編譯時已知所有的IDL接口,然后由IDL編譯程序生成客戶端的樁代碼和
39、服務器端的骨架代碼,并分別鏈接到客戶機程序和對象實現(xiàn)中,樁代碼和骨架代碼的編程語言可能完全不同。這樣,客戶端本地的樁代碼中的代理對象(proxy object)代表遠程的對象實現(xiàn),而遠程的對象實現(xiàn)又是以骨架代碼為實現(xiàn)框架,運行時雙方就能相互“認識”。 動態(tài)方法在編譯時客戶機和服務器端程序都不知道IDL接口。運行時,客戶端使用動態(tài)激活接口DII向對象實現(xiàn)發(fā)出請求,服務器端的對象適配器使用動態(tài)骨架接口DSI訪問對象實現(xiàn),兩者之間的接口信息從ORB的接口倉庫中動態(tài)獲取。為了支持ORB之間的互操作,CORBA規(guī)約定義了ORB間通信的標準協(xié)議GIOP(General Inter-ORB Protocol
40、)。 GIOP是直接建立在傳輸層協(xié)議上的,CORBA規(guī)約另外還定義了一種建立在DCE RPC上的協(xié)議:特定環(huán)境的ORB互連協(xié)議(Environment-Specific Inter-ORB Protocol,簡稱ESIOP)。 GIOP只是一種抽象的協(xié)議,在實現(xiàn)時必須映射到具體的傳輸層協(xié)議或者特定的傳輸機制上。因特網(wǎng)ORB互聯(lián)協(xié)議(Internet Inter-ORB Protocal,簡稱IIOP)就是GIOP在TCP/IP上的映象。(1)用IDL定義接口/ IDL文件為grid.idlinterface Grid readonly attribute short height; reado
41、nly attribute short width; void set(in short row, in short col, in long value); long get(in short row, in short col);(2)編譯IDL文件grid.idlIDL編譯程序將IDL文件grid.idl編譯成C+樁gridC.cc和骨架gridS.cc,其共同的說明文件為grid.hh/grid.hhclass Grid : public virtual CORBA:Object public: static Grid_ptr _bind(.); virtual CORBA:Short
42、 height(CORBA:Environment&); virtual CORBA:Short width(CORBA:Environment&); virtual void set(CORBA:Short row, CORBA:Short col, CORBA:Long value, CORBA:Environment &); virtual CORBA:Long get(CORBA:Short row, CORBA:Short col, CORBA:Environment &);(3)編寫客戶端程序#include “grid.hh”#include ma
43、in () Grid_var p;/ Like a C+ pointer/ Connect to a remote Grid object p = Grid:_bind(“myGrid:GridSrv”, GridHost);/ Now use it like a regular C+ object cout “height is “ height() endl; cout “width is “ width() set(2,4,123); / a remote call cout “grid2,4 is “ get(2,4) endl;(4)實現(xiàn)接口,/ Define a C+ implem
44、entation class Grid_i#include ”grid.hh” class Grid_i: public virtual GridBOAImpl short m_height, m_width; long * m_array;public: Grid_i(short h, short w); / Constructor virtual Grid_i(); / Destructor virtual CORBA:Short height(CORBA:Environment&) return m_width; ; virtual CORBA:Short width(CORBA
45、:Environment&) return m_height; virtual void set(CORBA:Short row, CORBA:Short col, CORBA:Long value, CORBA:Environment&) m_arrayrowcol = value; ; virtual CORBA:Long get(CORBA:Short row, C O R B A : : S h o r t c o l , C O R B A : : E n v i r o n m e n t & ) return m_arrayrowcol; ;(5)編寫服務
46、器端程序server mainline#include “grid_i.h”#include main() / Create some initial objects (only one in this case) Grid_i myGrid(100,100); try /Give control to the ORB CORBA:Orbix.impl_is_ready(); catch . cout “Server terminating” endl;(6)注冊服務器注冊過程告訴 ORB,哪個可執(zhí)行代碼是服務器,服務器的激活模式和安全等功能。 傳統(tǒng)的系統(tǒng)開發(fā)通常包括需求采集規(guī)劃、系統(tǒng)設計、系統(tǒng)構建、程序開發(fā)、系統(tǒng)測試等幾個環(huán)節(jié),其主要特點是:采用語言編碼式的方法開發(fā)應用軟件,且屬于一次性開發(fā)模式。但是,采用編碼方式開發(fā)軟件的周期比較長,開發(fā)費用比較高;一次性開發(fā)模式不但難以適應客戶需求的變化,而且每次修改都必須在代碼層面,因此,造成了效率的降低和資源的浪費 傳統(tǒng)應用軟件系統(tǒng)開發(fā)體系結構也一直在改進,長
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)項目增資入股投資協(xié)議
- 二零二五年度辦公室文員聘用與企業(yè)文化融合協(xié)議
- 二零二五年度新能源汽車碰撞責任免除合同
- 2025年度現(xiàn)代農(nóng)業(yè)病蟲害防治藥害賠償協(xié)議書
- 二零二五年度勞動局標準合同:養(yǎng)老服務業(yè)員工就業(yè)保障協(xié)議范本
- 2025年度賬戶變更補充服務協(xié)議
- 高性能計算中心設備采購及安裝合同
- 企業(yè)辦公室裝飾設計與施工服務合同
- 教育培訓行業(yè)線上課程開發(fā)與運營計劃書
- 電氣設備安裝工程施工合同新
- 祥康健康快車王晗老師講座收集驗方
- 禮儀與教化 課件-2023-2024學年高中美術湘美版(2019)美術鑒賞
- 新生兒早期基本保健課件
- 采礦學課程設計硯北煤礦新井設計全套圖紙
- 第19章-城市設計課件
- 人事管理管理制度
- 大型儲罐計算書
- 2022-2023學年廣東省廣州市荔灣區(qū)統(tǒng)考初三第一次??紨?shù)學試題含解析
- 針對本項目售后服務方案
- 2022年桂林電子科技大學高等學歷繼續(xù)教育學士學位英語考試真
- 新人教版七至九年級英語單詞表 漢譯英(含音標)
評論
0/150
提交評論