




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 數據庫中間件(DM,Database Middleware) 遠程過程調用中間件(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使用一種稱為動態數據交換(Dynamic Data E
2、xchange,簡稱DDE)機制來支持程序之間的通信,而DDE建立在Windows消息機制基礎上,穩定性和效率都很差;COM定義了客戶與構件之間互操作的標準,包括規約與實現兩部分。 - 規約部分定義了構件之間的通信機制,這些規約不依賴于任何特定的語言和操作系統。 - 實現部分即COM庫,為COM規約的具體實現提供一些核心服務。 以COM技術為基礎的OLE后改名為ActiveX。 隨著NT4.0的發布,COM技術需要延伸到分布計算環境,這就產生了所謂的DCOM(Distributed COM,分布構件對象模型)。 DCOM用網絡協議來代替本地進程之間的通信,并針對分布環境提供了一些新的特性,例如
3、位置透明、網絡安全性、跨平臺調用等。 COM/DCOM技術為基于構件的軟件開發提供了基礎。但是,如果用它來開發企業級應用系統,顯然還需要功能強大的基礎設施,這些基礎設施將為構件提供基本的運行和部署環境。 為了滿足企業級應用的需求,微軟公司推出了一種微軟事務服務器(Microsoft Transaction Server,簡稱MTS)。 MTS把應用系統的客戶程序、應用構件和各種資源有機結合起來,彌補了COM/DCOM的不足,為分布式企業應用提供了一種服務器端的構件運行和部署環境。 MTS是從NT4.0+ SP4的Option Pack開始,隨Windows操作系統免費提供的。 隨著因特網應用的
4、日益廣泛,企業級應用的體系結構越來越重要。為了使Windows真正成為企業應用平臺,微軟公司又推出了Windows DNA(Distributed interNet Applications Architecture,分布式網絡應用體系結構)。 Windows DNA是一個完整的、多層的新一代企業應用體系結構,它包含工具、數據庫、操作系統、編程模型和應用服務等。在新的企業應用體系結構下,微軟公司希望進一步把COM、DCOM和MTS統一起來,形成真正適合于企業級應用的構件技術,這就是COM+。 COM+仍然以COM/DCOM為基礎,包含了MTS。 COM+是一種中間件技術的規約,其要點是提供建立
5、在操作系統上的、支持分布式企業級應用的“服務”。 COM+是在20世紀末隨著Windows2000發布才面世的。Windows DNA是一個服務器端的開發平臺,包含了以下產品:Windows NT/2000: 操作系統,為所有微軟公司技術提供運行環境和支持。DCOM: 支持分布式構件的核心技術。MSMQ(Microsoft Message Queue): 消息隊列產品,支持構件間的異步通信。MTS(Microsoft Transaction Server): 管理構件的應用服務器。Microsoft Wolfpack: 支持集群服務器的軟件。Microsoft SQL Server: 一個關系
6、型數據庫管理系統。Microsoft IIS(Internet Information Server): Web服務器。Microsoft Management Console: 部署和管理工具。COM+技術是以上產品(尤其是DCOM、MTS、還有MSMQ的一部分)的相互結合。COM+COM+目錄負載平衡駐留內存數據庫對象池新的事件模型構件管理和部署JIT激活MTS基于接口的編程模型基本的構件服務遠程支持分布式構件服務DCOM事務支持資源分發管理安全模型易于管理COM+的核心是改進的COM/DCOM和MTS的集成,但是COM+增加了一些非常重要的構件服務,比如負載平衡、駐留內存數據庫、事件模型
7、、隊列服務等。COM+ 還提供了一個比MTS 更好的構件管理環境COM+ Explorer,用來設置COM+應用和COM+構件的屬性信息。另外,COM+還支持所謂的申述式編程模型(declarative programming model),它允許開發人員以較通用的方式開發構件,而一些細節則留到部署時再確定。(1)真正的異步通信 COM+底層提供了隊列構件服務,允許客戶和構件進行異步通信。 (2)事件服務 新的事件機制利用系統服務簡化了事件模型,避免了COM可連接對象機制的瑣碎細節,使事件源和事件接收方實現事件功能更加靈活。(3)靈活性 動態負載平衡以及駐留內存數據庫、對象池等系統服務為COM
8、+的靈活性提供了技術基礎。(4)可管理和可部署性 COM+的申述式編程模型和構件管理環境支持應用系統在開發完成后的管理和部署。(5)易于開發 COM+開發模型比以前的COM構件開發更為簡化。 (1)全局唯一標識符(Globally Unique Identifier ,簡稱GUID) GUID是一個128位整數,可用來唯一地標識COM對象或接口。GUID來源于開放軟件基金會(Open Software Foundation,簡稱OSF)采用的通用統一標識符(Universally Unique Identifier,簡稱UUID),UUID被定義為分布式計算環境(Distributed Com
9、puting Enviorment,簡稱DCE)的一部分,主要用于標識遠程過程調用(Remote Procedure Call,簡稱RPC)通信的雙方。(2)COM對象和COM構件 在COM規約中,“構件”和“對象”經?;煜?,所謂COM對象是指符合COM規則的CoClass(Component Class,構件類)的實例。每一個COM對象都有一個GUID,稱為CLSID(CoClassID)。 COM構件是指一組以編譯后的形式提供一組功能的COM對象。COM構件獨立于具體編程語言,以二進制形式(DLL或EXE)發布,可以獨立升級,可以透明地在網絡上被重新分配。(3)COM接口 COM接口是CO
10、M對象顯示出來的所有信息,是一組邏輯上相關的函數集合。 每一個接口都有一個GUID,稱為接口標識符(Interface Identifier,簡稱 IID)。 COM接口具有不變性。COM接口只允許單繼承。 一個COM對象可實現多個COM接口,這體現了COM對象多態性,這些接口由IUnknown接口來管理。(4)IUnknown接口 IUnknown是所有COM對象都必須實現的接口,其他接口都直接或間接繼承IUnknown接口,它包含AddRef 、Release和QueryInterface三個操作。 QueryInterface負責向客戶提供接口查詢功能。Addref和Release相結合
11、,通過引用計數(reference counting)的方法,提供對COM對象的生存周期進行管理的功能。(5)接口定義語言 微軟接口定義語言MIDL(Microsoft Interface Definition Language)是定義COM接口的申述式語言,其目標是通過獨立于具體編程語言的方式來定義接口。MIDL是基于開放軟件基金會分布式計算環境中的遠程過程調用的接口描述語言,常簡稱為IDL。 客戶機程序與進程內構件可通過直接函數調用進行交互。 COM采用了本地過程調用(Local Procedure Call,簡稱LPC)作為進程間通信機制。本地對象本地構件樁stubCOM本地服務器進程客
12、戶機進程客戶機應用進程內對象進程內構件本地對象代理COMLPC (1)COM庫 (COM library) COM庫是COM標準的系統級實現,為COM對象的標識和創建、內存管理、構件程序的卸載等提供了一組標準接口和輔助函數。在Windows系統中,COM庫主要包含在OLE32.DLL和RPCSS.exe文件中,COM庫很多地方直接用到了Windows系統的一些特性,例如系統注冊表、動態連接庫等。 (2)系統注冊表(windows registry) 系統注冊表是一個全操作系統范圍公用的信息倉庫,它可用作客戶程序、構件程序和COM庫三者交換有關COM對象信息和接口信息的場所。 (3)類工廠(cl
13、ass factory) 類工廠是能夠創建其他COM對象的特殊COM對象,支持一個特殊的接口 IClassFacroty,為例化CoClass構件類提供了一種標準機制。顯然,每一個COM對象類應該有一個相應的類工廠對象。IClassFactory接口中定義了兩個重要的操作CreateInstance和LockServer。CreateInstance生成COM對象并返回所請求接口的指針。LockServer在內存中保持COM構件。 (4)COM服務器 COM服務器是指包含一個或多個COM對象類和相應的類工廠,能向客戶提供服務的一個程序(EXE)或庫(DLL)。 (1)自動化對象 所謂自動化是一
14、種允許高級語言(比如VBScript)使用構件的COM應用技術。自動化的核心是IDispatch接口,自動化對象就是實現了IDispatch接口的COM對象。(2)IDispatch接口 IDispstch是自動化對象必須實現的接口。IDispatch在IUnkown接口的基礎上增加了GetIDsOfNames、GetTypeInfo、GetTypeInfoCount和Invoke等操作。 (3)類型庫和對象描述語言 對象描述語言(Object Description Language,簡稱ODL)是IDL的擴充,用來描述COM對象的類型信息,一個COM對象的類型信息通常包括每個接口的類型信息
15、(用interface或disp interface關鍵字)和COM對象類的類型信息(用coclass關鍵字)。 類型庫(type library)是IDL文件(*.idl)經編譯后產生的一個二進制資源文件(*.tlb),包含COM服務器中COM對象和接口的信息。IDL文件中用library關鍵字描述類型庫信息,包括類型庫的全局唯一標識符(即LIBID)、類型庫所使用的語言、版本等,也可用import關鍵字移入其他類型庫信息。(4)ActiveX控件 ActiveX控件(ActiveX control)是一種主要用于用戶界面和Internet的輕量級COM構件,是一種自動化對象。ActiveX
16、控件是從OCX(OLE控件)發展而來的。 DCOM是COM的進一步擴展。DCOM用網絡協議來代替本地進程之間的通信,并針對分布環境提供了一些新的特性,例如位置透明、網絡安全性、跨平臺調用等。DCOM的分布功能依靠遠程過程調用實現??蛻魴CDCOM網絡協議COM 運行時環境安全提供者DCE RPC協議棧COM 運行時環境安全提供者DCE RPC協議棧構件簡單地說,COM+構件就是COM構件加上一些規則和實現幾個接口。COM+編程模型主要有三個原則:(1)COM+構件建成COM DLL。(2)COM構件要符合基本編程和資源分配規則。主要有: - 為單個獨立客戶機編程,不必考慮多用戶,因為COM+會處
17、理多用戶。 - 構件需要資源(如數據庫連接)時,不要過早請求。 - 盡早釋放資源。 - 構件本身不必保持狀態,使COM+能更有效地管理資源。 (3)COM+構件要利用COM+API與COM+交互。(1)代理進程(surrogate executable) MTS構件和COM+構件需要以DLL形式實現,DLL形式實現進程內構件,這樣就很難生成多用途構件,既在MTS中運行,又作為獨立服務器端進程外構件。為此,微軟公司提出代理進程的概念,負責裝載并提供COM+構件運行的周境(context)。(2)對象周境(object context) COM+的周境是指共享同一套運行要求的對象集合。由于不同的對
18、象類可能使用了不同的部署信息,所以一個進程通常包含一個或多個周境,這些周境的部署互不兼容。所有無部署信息的對象都駐留在調用方的周境中。每一個周境都有一個對象,即對象周境,運行在此周境中的對象可通過CoGetObjectContext API函數得到此對象周境,利用對象周境的IObjectContext接口可以訪問到周境的屬性信息。(3)對象周境的IObjectContext接口 每一個COM+構件對象都有相應的對象周境(或稱對象描述表),對象周境提供IObjectContext接口 (MtxAS.dll或ComSvcs.dll中實現),COM+構件對象通過該接口與COM+通信。 (4)截取(i
19、ntercept) COM+系統可以在創建COM+對象時為其分配一個對象周境,這種技術被稱為截取。 即時激活:Just In Time Activation,簡稱JITA。 JITA是COM+保持資源有效利用的一種動態對象激活機制,它是COM+的核心機制。 對象只有在真正需要時才被激活,如果對象一旦不用,COM+就釋放它,并在客戶再次需要時由COM+重新激活。(1)COM+構件的生成周期 COM+構件的生成周期包括創建(create)、激活(activate)、去活(deactivate)、刪除(destroy)。 客戶機創建對象時,COM創建但不激活對象,對象在第一次方法調用時被激活。對象去
20、活的時間取決于對象是否支持事務。如果事務性對象調用SetAbort或SetComplete,則方法調用完成后立即去活,即使客戶仍引用這個對象。下次客戶調用這個對象時,COM+自動重新激活這個對象,對客戶這是透明的。非事務性對象則保持活動狀態,直到客戶釋放該對象的所有引用。(2)IObjectControl接口 COM+構件可實現IObjectControl接口,該接口有兩個方法,即激活和去活,COM+分別在對象激活和去活時自動調用它們。因此,我們可以利用這兩個方法做激活前的準備工作和去活前的掃尾工作,其作用相當于C+和Java的構造方法和析構方法。 請注意,COM+構件不能訪問IObjectC
21、ontrol接口,只有COM+運行時周境可以調用該接口的方法。 IObjectControl接口還有一個名為CanBePooled的方法,對象通過該方法通知COM+運行時周境,它是否放在對象池中供復用。 COM和MTS把構件的所有部署信息都保存在Windows的系統注冊表中。 而COM+則把大多數的構件信息保存在一個新的數據庫中,稱為COM+目錄。 COM+目錄統一了COM和MTS的注冊模型,并提供了一個專門針對構件的管理周境。 COM+目錄信息既可以通過COM+管理程序檢查或設置,也可以在程序中通過COM+提供的一組COM接口來訪問。 COM+構件可有以下幾種事務特性: 1)要求事務。對象必
22、須運行在一個事務周境中。 2)要求一個新的事務。每個事務都運行在一個單獨的事務周境中。 3)支持事務。對象可以運行在一個客戶的事務周境中,或者創建一個新的事務周境。 4)不支持事務。對象不運行在事務周境中。 COM+構件的事務特性可以由COM+管理程序來部署,并通過對象周境實現。通過對象周境,一個事務操作可以被提交、被取消或者禁止提交。 COM+沿用MTS基于角色的安全模型。 在開發階段,開發人員負責定義各種角色,并且在實現構件功能時,只允許指定角色的用戶才可以執行這些功能; 在配置階段,管理員負責為所有的角色指定有關的用戶帳號,COM+允許達到方法級的安全控制。 COM+系統是一個典型的分布
23、式事務處理系統,主要由以下部分組成。 (1)COM+運行環境(COM+ runtime environment) 即COM+構件容器,負責在服務器上執行、放置所有創建的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) 資源分配程序分配數據庫連接、網絡連接、對象、內存塊等資源。資源分配程序主要是通過提供資源池(resource pool)功能來管理資源。最常用的有ODBC資源分配程序和共享屬性管理程序(Shared Property Manager ,簡稱SPM)。 (5)分布式事務協調程序 分布式事務協調程序(Distributed Transaction Coordinator ,簡稱DTC)是Windo
25、ws的一個后臺服務,它用兩階段提交的方式實現事務的功能,提供可伸縮、健全的分布式事務管理服務。 COM+封裝了服務器端構件系統平臺的復雜性,以系統服務的形式為多構件應用系統提供基本功能。 (1)COM+隊列化構件(Queued Component ,簡稱QC) QC是COM+的關鍵特性,它基于微軟消息隊列服務 (Microsft Message Queue Server ,簡稱MSMQ),提供了一種異步的,基于消息的運行方式。 (2)COM+事件模型 COM+事件模型改進了COM的可連接對象機制,它采用了多通道的發布/訂閱(multicasting publish/subscribe)事件機制
26、,允許多個客戶去“訂閱”由各種構件對象“發布”的事件。(3)負載平衡(load balancing) 負載平衡是分布式應用的一種高層次需求,使用DCOM和MTS的配置特性能實現初步的靜態負載平衡,但是不能實現動態負載平衡,而COM+提供了一個負載平衡服務,它可以以透明方式實現動態負載平衡。 (4)駐留內存數據庫(In Memory DataBase,簡稱IMDB) IMDB是一個駐留在內存中的支持事務特性的數據庫系統,它可以為COM+應用程序提供快速的數據訪問。 (5) COM+對象池。 對象池是指把對象的實例保留在內存中,以便當客戶請求創建對象時可以馬上用到這些對象。對象池如同IMDB一樣,
27、完全是出于效率考慮,用于建立大型的應用系統。 .NET.NET .NET.NET .NET.NET .NET.NET .NET.NET CORBACORBA:Common Object Request Broker Architecture,公共對象請求代理體系結構,由OMG制定的分布對象模型。要點:要點:通過IDL定義接口,使用不同編程語言、不同編譯器實現的構件,可以通過ORB連接,形成一個跨平臺的應用。OMGOMG:一個制定行業標準和對象管理標準的非盈利組織,成立于1989年,目前已擁有會員近千個,包括許多研究機構、大學和大公司如IBM、HP等。CORBACORBA產品:產品:CORBA是
28、一套規約,而不是一個產品,開發商可以開發不同的產品來實現CORBA規約。著名的產品有IONA公司的Orbix、 Corel(Borland/Inprise)公司的VisiBroker、 IBM公司的Component Broker等。第一代:第一代:CORBA規約的第一代主要集中在為分布式對象定義一個基礎,其核心是ORB和IDL。CORBA 2.0CORBA 2.0:1995年頒布,增加了ORB互操作性規約,主要是基于TCP/IP的IIOP協議(Internet Inter-ORB Protocal,因特網ORB互聯協議)。 CORBA 2.1CORBA 2.1:1997年頒布,增加了COM/
29、CORBA互操作規范。CORBA 2.2CORBA 2.2:1998年頒布,增加了易移植的對象適配器(Portable Object Adapter,簡稱POA)和IDL到Java語言的映射規約。CORBA3.0CORBA3.0草案:草案:1999年提交,2002年正式發布。CORBA 3.0以前的版本只注意到對象本身,而沒有進一步考慮可部署的、由應用服務器管理的構件。 CORBA3.0增加了CCM(CORBA Component Model)CCM步微軟公司的 COM+和Sun公司的EJB的后塵,這三者的核心概念是相似的。它們均提供容器作為構件的運行環境,而諸如事務處理、安全處理、事件處理、
30、持久性等公共服務都是通過公共API訪問。但是,目前還沒有成熟的、完全實現CORBA3.0規約的產品。該模型描述了分布式對象系統的基本成分,有四個主要層次:應用對象(application objects)、公共設施(common facilities)、對象請求代理(ORB,Object Request Broker )和對象服務(object services)。應用對象公共設施對象服務對象請求代理ORB1) 對象服務是一組系統級的對象,為實現和管理對象提供了基本的功能,包括名字、生存周期服務、事務服務、安全服務等等。2) ORB是核心,它提供了一種機制,使得對象可以透明地發送請求和接受響應
31、。3) 公共設施是適用于眾多應用領域的通用構件,例如信息管理、系統管理、任務管理和用戶界面等。4) 應用對象是專用于特定領域的應用構件,OMG沒有為它制定標準。(1)客戶和對象實現 客戶是向對象發出請求的程序或進程,客戶通過訪問目標對象的對象引用來調用目標對象的操作,目標對象的實現方式對客戶是透明的。 對象實現是實現目標對象接口的代碼和數據的封裝實體。對象實現不依賴于ORB或者客戶調用對象的方式,對象可以具有不同的實現方式。通過使用不同的對象適配器,ORB系統可以支持各種不同類型的對象實現方式。(2)ORB內核和ORB接口 ORB內核提供了對象的通用表示和對象間通信的機制??蛻艉蛯ο髮崿F通過O
32、RB接口的形式訪問ORB內核提供的功能,這些接口在所有的ORB實現系統中都是相同的。 ORB接口是客戶與對象實現可以直接訪問到的、抽象描述ORB操作的接口。ORB接口由ORB內核實現,它不依賴于任何的對象適配器。ORB接口主要包括:ORB初始化;獲取初始對象引用;對象引用操作;策略域的管理;線程有關的操作等。(3)基本對象適配器BOA和易移植對象適配器POA對象適配器是對象實現訪問ORB所提供服務的主要方式?;緦ο筮m配器(Basic Object Adaptor,簡稱BOA)和易移植對象適配器(Portable Object Adaptor,簡稱POA)是CORBA架構演變過程中兩個重要的里
33、程碑。 BOA著重CORBA服務器實現,而不是CORBA對象實現,BOA規范定義的體系結構比較模糊。 POA規約在CORBA 2.2中引入,可以看作是對BOA規約的改進。POA規約定義CORBA對象為具有標識、接口和實現的抽象實體,并引入了服務體(servant)的概念,使抽象的CORBA對象能和實現該對象功能的具體編程語言實體徹底分離。(4)接口倉庫和實現倉庫 接口倉庫是儲存、發布、管理相關對象接口定義的集合,是ORB系統的輔助部件。接口倉庫在實現時使用持久對象機制,通常以IDL文件為其輸入,將接口描述信息進行處理后存放在文件、數據庫或者其它形式的存儲機制中,并提供一組標準的調用接口供運行時
34、動態查詢。 實現倉庫包含了允許ORB定位和激活對象實現的信息。此外,實現倉庫也是儲存與ORB對象實現相關的其它信息(例如,調試信息,管理控制,安全性等)的公共場所。實現倉庫既可以和接口倉庫作為整體一起實現,也可以作為一個單獨的部件實現。(5)客戶樁和實現骨架 客戶樁又稱IDL stubs,是一些由IDL編譯器根據IDL文件生成的、與編程語言相關的客戶端代碼段??蛻魳断蚩蛻籼峁┮粋€因接口而異的API,從而透明對象實現的位置和ORB操作。 實現骨架又稱IDL Skeleton,是由IDL編譯器根據IDL文件生成的,與編程語言相關的服務器端代碼框架。實現骨架提供將對象適配器轉發的請求調度到對象實現上
35、的適當操作的代碼。 請注意,實現骨架與客戶樁不是必然對應的。(6)動態激活接口DII和動態骨架接口DSI DII是一種允許動態創建和激活對CORBA對象的請求的客戶端接口。DII根據客戶代碼提供的要調用的對象、要執行的操作、操作的參數集和參數類型等信息(其中包括從接口倉庫獲得的各種動態信息),在運行時動態創建和激活對對象的請求。注意,客戶通過靜態樁還是動態接口發出請求對于對象實現是透明的。 DSI是一種允許將請求在運行時從對象適配器動態提交給對象實現的接口。注意,對象適配器是通過靜態骨架還是動態骨架接口訪問對象實現,對于客戶是透明的。1) OMG IDL 是CORBA的重要組成部分,已被國際標
36、準化組織ISO采納(ISO DIS 14750)。2) OMG IDL是獨立于具體編程語言的,一個IDL文件可以向多種編程語言映射。例如,IDL 到C,C+,Java,SmallTalk 等的映射。OMG IDL也是獨立于平臺的,由IDL定義的接口可以在不同的ORB和平臺上一致地表達。3) CORBA規約中主要部件的接口,例如ORB接口、Stub、Skeleton、對象適配器等,全部由OMG IDL定義。當然,OMG IDL更主要的用途是定義應用系統中的重要接口,這些接口是復用、互操作的關鍵部分,也是軟件架構的重要組成部分。/ 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描述的??蛻魴C與遠程對象發送和接受請求的方法主要有兩種:靜態方法和動態方法。 靜態方法要求在編譯時已知所有的IDL接口,然后由IDL編譯程序生成客戶端的樁代碼和
39、服務器端的骨架代碼,并分別鏈接到客戶機程序和對象實現中,樁代碼和骨架代碼的編程語言可能完全不同。這樣,客戶端本地的樁代碼中的代理對象(proxy object)代表遠程的對象實現,而遠程的對象實現又是以骨架代碼為實現框架,運行時雙方就能相互“認識”。 動態方法在編譯時客戶機和服務器端程序都不知道IDL接口。運行時,客戶端使用動態激活接口DII向對象實現發出請求,服務器端的對象適配器使用動態骨架接口DSI訪問對象實現,兩者之間的接口信息從ORB的接口倉庫中動態獲取。為了支持ORB之間的互操作,CORBA規約定義了ORB間通信的標準協議GIOP(General Inter-ORB Protocol
40、)。 GIOP是直接建立在傳輸層協議上的,CORBA規約另外還定義了一種建立在DCE RPC上的協議:特定環境的ORB互連協議(Environment-Specific Inter-ORB Protocol,簡稱ESIOP)。 GIOP只是一種抽象的協議,在實現時必須映射到具體的傳輸層協議或者特定的傳輸機制上。因特網ORB互聯協議(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)實現接口,/ 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,哪個可執行代碼是服務器,服務器的激活模式和安全等功能。 傳統的系統開發通常包括需求采集規劃、系統設計、系統構建、程序開發、系統測試等幾個環節,其主要特點是:采用語言編碼式的方法開發應用軟件,且屬于一次性開發模式。但是,采用編碼方式開發軟件的周期比較長,開發費用比較高;一次性開發模式不但難以適應客戶需求的變化,而且每次修改都必須在代碼層面,因此,造成了效率的降低和資源的浪費 傳統應用軟件系統開發體系結構也一直在改進,長
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 實踐要領計算機一級WPS考試試題及答案
- 寵物保險行業市場前景預測:2025年行業發展趨勢報告
- 2025年環保型表面處理技術在新能源電池行業的應用與性能報告
- 某年度窗簾門簾戰略市場規劃報告
- 策略驅動旅游新未來
- 某年度低壓化成箔市場分析及競爭策略分析報告
- 某年度變電站綜合自動化裝置戰略市場規劃報告
- 2025年線下演出市場復蘇與演出場館經濟效益分析報告
- 餐飲業的溝通藝術
- 互聯網醫療與老年客戶的溝通體驗改進
- 2024年安徽省中考物理試卷真題(含答案解析)+2023年中考物理試卷及答案
- 青年興則國家興青年強則國家強
- 石膏自流平標準jc1023
- 藥物分析智慧樹知到答案2024年中國藥科大學
- 2023年海南省中考物理試題(解析版)
- 2024年北京中考地理試卷
- 入藏安全承諾書怎么寫
- 食品安全日管控、周排查及月調度記錄表
- 2024年安徽省初中地理會考卷真題含參考答案
- 車輛超載超限培訓
- 燃氣行業數字化轉型與智能化升級
評論
0/150
提交評論