高級軟件(IR、POA)_第1頁
高級軟件(IR、POA)_第2頁
高級軟件(IR、POA)_第3頁
高級軟件(IR、POA)_第4頁
高級軟件(IR、POA)_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1是是ORB的構(gòu)件的構(gòu)件提供一致的接口定義存儲機(jī)制提供一致的接口定義存儲機(jī)制管理和提供對管理和提供對OMG IDL所指定對象定義集合的訪問所指定對象定義集合的訪問高級軟件工程2概述概述 IR的范圍的范圍實現(xiàn)相關(guān)性實現(xiàn)相關(guān)性概念與原理概念與原理IR接口接口高級軟件工程3(1)概述)概述ORB提供對對象集合的分布式訪問提供對對象集合的分布式訪問方法是使用方法是使用OMG IDL中指定的對象公共定義接口中指定的對象公共定義接口接口池為相關(guān)對象的接口定義集合接口池為相關(guān)對象的接口定義集合提供存儲、分布和管理提供存儲、分布和管理ORB可以使用兩種形式的對象定義:可以使用兩種形式的對象定義:通過將信息從過

2、程上合并到通過將信息從過程上合并到stub程序中程序中 例如,作為將例如,作為將C語言子程序映射到通訊協(xié)議中的代碼語言子程序映射到通訊協(xié)議中的代碼通過動態(tài)可訪問的接口池訪問到通過動態(tài)可訪問的接口池訪問到 例如,作為通過特定于例如,作為通過特定于OMG IDL接口訪問的接口訪問的“接口對象接口對象”高級軟件工程4ORB可以使用在接口池中維護(hù)的對象定義可以使用在接口池中維護(hù)的對象定義解釋和處理請求中提供的值:解釋和處理請求中提供的值: 提供請求簽名的類型檢查(請求是否通過提供請求簽名的類型檢查(請求是否通過DII或或stub發(fā)出的)發(fā)出的) 幫助檢查接口繼承關(guān)系的正確性幫助檢查接口繼承關(guān)系的正確性

3、 幫助提供不同幫助提供不同ORB實現(xiàn)之間的互操作性實現(xiàn)之間的互操作性由于接口池中所維護(hù)對象定義的接口是公共的由于接口池中所維護(hù)對象定義的接口是公共的因此客戶和服務(wù)也可以使用因此客戶和服務(wù)也可以使用Repository中維護(hù)的信息中維護(hù)的信息例如,例如,Repository可用于:可用于: 管理接口定義的安裝和分布管理接口定義的安裝和分布 提供提供CASE環(huán)境的構(gòu)件(例如,接口瀏覽器)環(huán)境的構(gòu)件(例如,接口瀏覽器) 提供語言綁定的接口信息(例如編譯器)提供語言綁定的接口信息(例如編譯器) 提供最終用戶環(huán)境的構(gòu)件(例如,菜單欄構(gòu)造器)提供最終用戶環(huán)境的構(gòu)件(例如,菜單欄構(gòu)造器)高級軟件工程5(2)

4、IR的范圍的范圍 接口對象作為一組對象在接口池中維護(hù)接口對象作為一組對象在接口池中維護(hù)可以通過一組特定于可以通過一組特定于OMG IDL接口定義訪問它們接口定義訪問它們接口定義包含它支持的操作描述,接口定義包含它支持的操作描述, 包括參數(shù)類型、例外和它可以使用的環(huán)境信息包括參數(shù)類型、例外和它可以使用的環(huán)境信息此外,接口池還存儲常量值此外,接口池還存儲常量值 它可以用在其它接口定義中或者僅僅為方便程序員而定義它可以用在其它接口定義中或者僅僅為方便程序員而定義接口池還存儲接口池還存儲 typecode,這是以結(jié)構(gòu)化術(shù)語描述類型的值,這是以結(jié)構(gòu)化術(shù)語描述類型的值6 接口池使用模塊作為組織接口的方式接

5、口池使用模塊作為組織接口的方式并且根據(jù)名稱查找這些組織并且根據(jù)名稱查找這些組織模塊可以包含常量、類型定義、例外情況、接口定義和其它模塊模塊可以包含常量、類型定義、例外情況、接口定義和其它模塊例如,模塊可以對應(yīng)于例如,模塊可以對應(yīng)于OMG IDL定義的組織定義的組織它們也可以用于代表為管理和其它用途定義的組織它們也可以用于代表為管理和其它用途定義的組織接口池是代表其中信息的一組對象接口池是代表其中信息的一組對象它們是在該透明對象結(jié)構(gòu)上運作的操作它們是在該透明對象結(jié)構(gòu)上運作的操作具體實現(xiàn)可以選擇這些對象具體實現(xiàn)可以選擇這些對象 是否永久存在是否永久存在 或者在或者在repository上的操作引用

6、時創(chuàng)建上的操作引用時創(chuàng)建也可以有有效提取信息的操作也可以有有效提取信息的操作獲得描述整個接口或整個操作的信息塊獲得描述整個接口或整個操作的信息塊高級軟件工程7ORB可以訪問多個接口池可以訪問多個接口池原因原因:兩個兩個ORB對接口池的實現(xiàn)有不同的要求對接口池的實現(xiàn)有不同的要求對象實現(xiàn)(例如對象實現(xiàn)(例如OODB)希望提供它自己的類型信息)希望提供它自己的類型信息 或者它希望將不同的附加信息或者它希望將不同的附加信息存儲在不同的存儲在不同的repository中中使用使用typecode和和repository標(biāo)識符的目的是標(biāo)識符的目的是允許不同的允許不同的repository保持它們自己的信息

7、一致保持它們自己的信息一致高級軟件工程8高級軟件工程9接口池信息的一個關(guān)鍵用途是接口池信息的一個關(guān)鍵用途是將將ORB連接在一起連接在一起當(dāng)對象在請求中從一個當(dāng)對象在請求中從一個ORB傳到另一個傳到另一個ORB時時可能有必要創(chuàng)建新對象代表接收可能有必要創(chuàng)建新對象代表接收ORB中的傳送對象中的傳送對象這可能需要在接收這可能需要在接收ORB的接口池中找到接口信息的接口池中找到接口信息 通過從發(fā)送通過從發(fā)送ORB的的repository中獲取中獲取repository標(biāo)識符標(biāo)識符可以在接收可以在接收ORB的的repository中查找接口中查找接口為成功操作,為成功操作, 該對象的接口必須該對象的接口

8、必須 同時安裝在兩個同時安裝在兩個repository中并且有相同的中并且有相同的repository標(biāo)識符標(biāo)識符10(3)實現(xiàn)相關(guān)性)實現(xiàn)相關(guān)性 接口池中的實現(xiàn)需要某些形式的永久對象存儲接口池中的實現(xiàn)需要某些形式的永久對象存儲通常永久對象存儲類型用于通常永久對象存儲類型用于決定接口定義如何分布和決定接口定義如何分布和/或在網(wǎng)絡(luò)域中復(fù)制或在網(wǎng)絡(luò)域中復(fù)制如果使用文件系統(tǒng)提供對象存儲如果使用文件系統(tǒng)提供對象存儲那么在單個機(jī)器上可能只有一組接口的唯一副本那么在單個機(jī)器上可能只有一組接口的唯一副本如果使用如果使用OODB提供對象存儲提供對象存儲那么可以維護(hù)接口定義的多個副本那么可以維護(hù)接口定義的多個副

9、本每個副本都分布在幾臺機(jī)器上每個副本都分布在幾臺機(jī)器上以提供高可用性和負(fù)載平衡以提供高可用性和負(fù)載平衡高級軟件工程11接口池包含接口池包含允許程序在運行時確定和處理類型信息的信息允許程序在運行時確定和處理類型信息的信息程序可以嘗試在任何時候通過對象引用上的程序可以嘗試在任何時候通過對象引用上的get_interface訪問接口池訪問接口池一旦信息已經(jīng)安裝在一旦信息已經(jīng)安裝在repository中中那么程序、那么程序、stub和對象可以使用它和對象可以使用它對象對象repository的更新必須小心的更新必須小心以避免破壞環(huán)境以避免破壞環(huán)境在更新接口池時在更新接口池時某些接口池可能使用某些接口池

10、可能使用Object Services定義的事務(wù)和并發(fā)控制定義的事務(wù)和并發(fā)控制例如,支持例如,支持Transaction Service的的repository將繼承將繼承Repository接口接口它包括更新操作它包括更新操作 Transaction接口接口它包含事務(wù)管理操作它包含事務(wù)管理操作高級軟件工程12(4)接口池接口元素接口池接口元素 名稱和標(biāo)識名稱和標(biāo)識 類型和類型碼類型和類型碼 接口對象接口對象 IR的結(jié)構(gòu)與導(dǎo)航的結(jié)構(gòu)與導(dǎo)航高級軟件工程13名稱和標(biāo)識名稱和標(biāo)識 簡單名稱在接口池中沒有必要是唯一的簡單名稱在接口池中沒有必要是唯一的它們通常與顯式或隱式的模塊有關(guān)它們通常與顯式或隱式的

11、模塊有關(guān)在該環(huán)境中,接口定義通常被認(rèn)為是顯式模塊在該環(huán)境中,接口定義通常被認(rèn)為是顯式模塊限定范圍的名稱唯一地標(biāo)識接口池中的限定范圍的名稱唯一地標(biāo)識接口池中的 模塊、接口、常量、類型定義、例外情況、屬性和操作模塊、接口、常量、類型定義、例外情況、屬性和操作repository標(biāo)識符全局地表示標(biāo)識符全局地表示模塊、接口、常量、類型定義、例外情況、屬性和操作模塊、接口、常量、類型定義、例外情況、屬性和操作它們可以用于同步多個它們可以用于同步多個ORB和和Repository上的定義上的定義14 類型和類型碼(類型和類型碼(TypeCode) 類型碼類型碼 是標(biāo)識調(diào)用參數(shù)類型與屬性類型的值是標(biāo)識調(diào)用參

12、數(shù)類型與屬性類型的值 可以確定類型的完整結(jié)構(gòu)可以確定類型的完整結(jié)構(gòu) 可以從可以從IR或或IDL編譯器中獲得編譯器中獲得 類型碼具有多種用途:類型碼具有多種用途:在在DII中,被用于指示實際參數(shù)的類型中,被用于指示實際參數(shù)的類型由由IR使用,表示作為許多使用,表示作為許多 OMG IDL 聲明中一部分的類型規(guī)約聲明中一部分的類型規(guī)約它們對于它們對于any 類型的語義極為關(guān)鍵類型的語義極為關(guān)鍵 抽象地講,類型碼抽象地講,類型碼 包含包含 一個一個 “kind”域域 以及以及 適于該適于該 Kind 的參數(shù)集合的參數(shù)集合 例如,描述例如,描述 long 的的 類型碼具有類型碼具有kind tk_lo

13、ng ,無參數(shù),無參數(shù) 描述描述 sequence 的類型碼具有的類型碼具有 kind tk_sequence包含兩個參數(shù):包含兩個參數(shù): 10 and boolean高級軟件工程15高級軟件工程1617接口對象接口對象接口池管理的關(guān)于每個接口的信息接口池管理的關(guān)于每個接口的信息都以下面類型的接口池對象集合的形式維護(hù)都以下面類型的接口池對象集合的形式維護(hù)Repository: 接口池名空間中最頂層的模塊;接口池名空間中最頂層的模塊;它包括常量、類型定義、例外、接口,它包括常量、類型定義、例外、接口,或者值類型定義以及模塊或者值類型定義以及模塊ModuleDef: 接口與值類型的的邏輯組;接口與

14、值類型的的邏輯組;它包括常量、類型定義、例外、接口,它包括常量、類型定義、例外、接口,或者值類型定義以及其它模塊或者值類型定義以及其它模塊InterfaceDef: 接口定義;接口定義;它包括常量、類型、例外、操作以及屬性。它包括常量、類型、例外、操作以及屬性。ValueDef: 值類型定義,值類型定義,它包含常量表、類型表、例外表、操作表、屬性表及成員它包含常量表、類型表、例外表、操作表、屬性表及成員高級軟件工程18ValueBoxDef: boxed值類型定義值類型定義ValueMemberDef:值類型成員定義值類型成員定義AttributeDef: 接口或值類型屬性的定義接口或值類型屬

15、性的定義OperationDef: 接口或值類型操作的定義接口或值類型操作的定義;包含參數(shù)列表與例外包含參數(shù)列表與例外TypedefDef: 基本接口,非接口或值類型的基本接口,非接口或值類型的named type定義定義ConstantDef:常量定義常量定義ExceptionDef: 操作所引發(fā)例外的定義操作所引發(fā)例外的定義高級軟件工程19每個接口池對象的接口規(guī)范列出了由該對象維持的屬性每個接口池對象的接口規(guī)范列出了由該對象維持的屬性 這些屬性多數(shù)與這些屬性多數(shù)與OMG IDL語句直接對應(yīng)語句直接對應(yīng)一個實現(xiàn)可以一個實現(xiàn)可以 選擇維持附加的屬性以便于管理池選擇維持附加的屬性以便于管理池或者

16、記錄關(guān)于接口的附加信息或者記錄關(guān)于接口的附加信息擴(kuò)展擴(kuò)展IR接口的實現(xiàn)應(yīng)當(dāng)采用接口的實現(xiàn)應(yīng)當(dāng)采用 導(dǎo)出新接口導(dǎo)出新接口 而不是修改標(biāo)準(zhǔn)接口而不是修改標(biāo)準(zhǔn)接口 實現(xiàn)實現(xiàn)CORBA規(guī)范為接口池對象定義了操作的一個最小集規(guī)范為接口池對象定義了操作的一個最小集IR的一個實現(xiàn)可能提供的附加操作的一個實現(xiàn)可能提供的附加操作 可以包含提供實體版本化的操作可以包含提供實體版本化的操作 以及規(guī)范的反編譯以及規(guī)范的反編譯20 IR的結(jié)構(gòu)與導(dǎo)航的結(jié)構(gòu)與導(dǎo)航 接口池中的定義是按照接口池對象集合的形式進(jìn)行組織的接口池中的定義是按照接口池對象集合的形式進(jìn)行組織的這些對象的組織方式與定義的組織方式相同:這些對象的組織方式與

17、定義的組織方式相同:一些對象(定義)包含其它對象一些對象(定義)包含其它對象高級軟件工程21高級軟件工程22在接口池中定位一個接口的方式有三種:在接口池中定位一個接口的方式有三種:1.從從ORB直接獲取一個直接獲取一個 InterfaceDef 對象對象2.利用一個名序列在模塊空間中航行利用一個名序列在模塊空間中航行3.定位與一個特定池表示對應(yīng)的定位與一個特定池表示對應(yīng)的InterfaceDef 對象對象如果一個對象的類型在編譯時刻尚未確定如果一個對象的類型在編譯時刻尚未確定則適于直接獲取一個則適于直接獲取一個InterfaceDef 對象對象通過利用對象的引用調(diào)用通過利用對象的引用調(diào)用get

18、_interface 操作操作可以在接口池中獲得關(guān)于該對象的信息可以在接口池中獲得關(guān)于該對象的信息該信息可以被用于在該對象上執(zhí)行操作該信息可以被用于在該對象上執(zhí)行操作23當(dāng)需要一個特定命名的接口時當(dāng)需要一個特定命名的接口時則適于在模塊名空間中航行則適于在模塊名空間中航行從接口池的根模塊開始從接口池的根模塊開始可以根據(jù)名字獲得入口可以根據(jù)名字獲得入口 當(dāng)在一個接口池中查找一個對應(yīng)的入口時當(dāng)在一個接口池中查找一個對應(yīng)的入口時則適于通過則適于通過ID定位定位InterfaceDef 對象對象通過在兩個池中使用相同的標(biāo)識通過在兩個池中使用相同的標(biāo)識可以在一個池中獲得一個接口的接口標(biāo)識可以在一個池中獲得

19、一個接口的接口標(biāo)識 然后從另一個池獲得那個接口的信息然后從另一個池獲得那個接口的信息(那個池可能近一些(那個池可能近一些或者包含關(guān)于接口的附加信息)或者包含關(guān)于接口的附加信息)高級軟件工程24(5)IR接口接口一組公共的操作被用于在一組公共的操作被用于在IR中定位對象中定位對象這些操作在接口這些操作在接口IRObject, Container, and Contained等中等中被定義被定義所有的所有的IR對象繼承對象繼承IRObject接口接口它提供了一個區(qū)別對象具體類型的操作它提供了一個區(qū)別對象具體類型的操作屬于容器的對象從屬于容器的對象從Container接口中繼承接口中繼承naviga

20、tion操作操作被其它對象包容的對象從被其它對象包容的對象從Contained接口中繼承接口中繼承navigation操作操作25IDLType 接口被所有標(biāo)識接口被所有標(biāo)識IDL類型的類型的IR對象所繼承對象所繼承包括包括interfaces, typedefs, 及及 anonymous typesTypedefDef 接口接口被所有被所有named non-interface types對象多繼承對象多繼承基本接口基本接口 IRObjectContainedContainer IDLType及及 TypedefDef不是暫時性的不是暫時性的IR中的所有字符串?dāng)?shù)據(jù)被按照中的所有字符串?dāng)?shù)據(jù)被

21、按照ISO 8859-1 coded character set中的定義編碼中的定義編碼高級軟件工程26277、POA設(shè)計目標(biāo)設(shè)計目標(biāo)模型元素模型元素模型體系結(jié)構(gòu)模型體系結(jié)構(gòu)POA創(chuàng)建創(chuàng)建引用創(chuàng)建引用創(chuàng)建對象活動狀態(tài)對象活動狀態(tài)請求處理請求處理隱式激活隱式激活多線程多線程DSI位置透明性位置透明性POA接口接口高級軟件工程28 (1)POA的設(shè)計目標(biāo)的設(shè)計目標(biāo)l允許編程人員構(gòu)造允許編程人員構(gòu)造 可以在不同可以在不同ORB產(chǎn)品上移植的對象實現(xiàn)產(chǎn)品上移植的對象實現(xiàn)l提供對永久對象的支持提供對永久對象的支持允許編程人員構(gòu)造的對象實現(xiàn)允許編程人員構(gòu)造的對象實現(xiàn)存活時間(從持有對象引用的客戶角度)存活時

22、間(從持有對象引用的客戶角度)跨越多個服務(wù)器存活時間跨越多個服務(wù)器存活時間l提供對透明對象激活的支持提供對透明對象激活的支持l允許單個的服務(wù)同時支持多個對象標(biāo)識允許單個的服務(wù)同時支持多個對象標(biāo)識l允許多個不同的允許多個不同的POA實例存在于一個服務(wù)器中實例存在于一個服務(wù)器中l(wèi)提供對提供對transient對象的支持,花費最小的編程代價與負(fù)載對象的支持,花費最小的編程代價與負(fù)載29l提供對隱式服務(wù)激活的支持,對象標(biāo)識由提供對隱式服務(wù)激活的支持,對象標(biāo)識由POA分配分配l允許對象實現(xiàn)最大可能地為對象行為負(fù)責(zé)允許對象實現(xiàn)最大可能地為對象行為負(fù)責(zé) 特別地,一個實現(xiàn)可以控制對象的行為特別地,一個實現(xiàn)可以

23、控制對象的行為通過通過 建立定義對象標(biāo)識的數(shù)據(jù)建立定義對象標(biāo)識的數(shù)據(jù)決定對象標(biāo)識與對象狀態(tài)之間的關(guān)系決定對象標(biāo)識與對象狀態(tài)之間的關(guān)系 管理對象狀態(tài)的存儲與檢索管理對象狀態(tài)的存儲與檢索提供響應(yīng)請求時將被執(zhí)行的代碼提供響應(yīng)請求時將被執(zhí)行的代碼以及在任意時刻決定對象是否存在以及在任意時刻決定對象是否存在l避免請求避免請求ORB維護(hù)描述獨立對象的永久狀態(tài)維護(hù)描述獨立對象的永久狀態(tài)它們的它們的 標(biāo)識,它們的狀態(tài)存在何處標(biāo)識,它們的狀態(tài)存在何處某些標(biāo)識值是否以前已經(jīng)被使用過某些標(biāo)識值是否以前已經(jīng)被使用過一個對象是否已經(jīng)被徹底刪除一個對象是否已經(jīng)被徹底刪除 等等等等l提供一個擴(kuò)展機(jī)制提供一個擴(kuò)展機(jī)制用于將策

24、略信息與用于將策略信息與POA中實現(xiàn)的對象進(jìn)行關(guān)聯(lián)中實現(xiàn)的對象進(jìn)行關(guān)聯(lián)高級軟件工程30(2)POA的模型元素的模型元素客戶客戶 是一個計算語境是一個計算語境它通過對一個對象的引用向其提出請求它通過對一個對象的引用向其提出請求服務(wù)器服務(wù)器 是一個計算語境是一個計算語境對象的實現(xiàn)體存在于其中對象的實現(xiàn)體存在于其中一般情況下,一個服務(wù)器對應(yīng)于一個進(jìn)程一般情況下,一個服務(wù)器對應(yīng)于一個進(jìn)程對象對象 是一個具有標(biāo)識、接口、及實現(xiàn)的程序體是一個具有標(biāo)識、接口、及實現(xiàn)的程序體 從一個客戶的視角,對象的標(biāo)識封裝在對象的引用中從一個客戶的視角,對象的標(biāo)識封裝在對象的引用中 POA模型定義了從服務(wù)器視角看對象的標(biāo)識

25、模型定義了從服務(wù)器視角看對象的標(biāo)識它由對象實現(xiàn)通過它由對象實現(xiàn)通過POA接口顯式管理接口顯式管理31Servant服務(wù)體是實現(xiàn)一個或多個對象請求的編程語言對象或?qū)嶓w服務(wù)體是實現(xiàn)一個或多個對象請求的編程語言對象或?qū)嶓w服務(wù)體一般存在于一個服務(wù)器進(jìn)程語境中服務(wù)體一般存在于一個服務(wù)器進(jìn)程語境中向一個對象應(yīng)用提出的請求由向一個對象應(yīng)用提出的請求由ORB中轉(zhuǎn)中轉(zhuǎn)并轉(zhuǎn)變?yōu)橄蛞粋€特定服務(wù)體的調(diào)用并轉(zhuǎn)變?yōu)橄蛞粋€特定服務(wù)體的調(diào)用在一個對象生命時間內(nèi),它可能與多個服務(wù)體相關(guān)在一個對象生命時間內(nèi),它可能與多個服務(wù)體相關(guān)所謂相關(guān)是指向它的請求將以服務(wù)體為目標(biāo)所謂相關(guān)是指向它的請求將以服務(wù)體為目標(biāo)Object Id一個對

26、象標(biāo)識是一個值,由一個對象標(biāo)識是一個值,由POA及用戶提供的實現(xiàn)使用及用戶提供的實現(xiàn)使用以標(biāo)識一個特定的抽象以標(biāo)識一個特定的抽象CORBA對象對象對象標(biāo)識值對于客戶是隱藏的,由引用封裝對象標(biāo)識值對于客戶是隱藏的,由引用封裝對象標(biāo)識沒有標(biāo)準(zhǔn)的形式對象標(biāo)識沒有標(biāo)準(zhǔn)的形式它們由它們由POA作為未解釋的作為未解釋的8進(jìn)制位序列管理進(jìn)制位序列管理32Object Reference一個對象引用封裝了一個對象標(biāo)識及一個一個對象引用封裝了一個對象標(biāo)識及一個POA標(biāo)識標(biāo)識在一個特定在一個特定ORB實現(xiàn)中的一個具體引用包含更多的信息實現(xiàn)中的一個具體引用包含更多的信息例如例如服務(wù)器位置服務(wù)器位置被考慮的被考慮的P

27、OA等等(它可能包含它可能包含POA的全名的全名 及從根部到特定及從根部到特定POA的所有的所有POA的名字的名字)引用也可能不包含對象標(biāo)識引用也可能不包含對象標(biāo)識 但卻包含由但卻包含由ORB管理的壓縮過的值管理的壓縮過的值它們可以被影射為對象標(biāo)識它們可以被影射為對象標(biāo)識33POA 可移植對象適配器是在服務(wù)器語境中的一個可標(biāo)識實體可移植對象適配器是在服務(wù)器語境中的一個可標(biāo)識實體 每個每個POA為對象標(biāo)識提供了一個名空間為對象標(biāo)識提供了一個名空間并為其它并為其它POA(nested or child)提供一個名空間)提供一個名空間與與POA相關(guān)的策略描述了在那個相關(guān)的策略描述了在那個POA中對象

28、實現(xiàn)的特征中對象實現(xiàn)的特征Nested POAs為一個服務(wù)器中的對象形成了一個層次式的名空間為一個服務(wù)器中的對象形成了一個層次式的名空間Policy策略是一個應(yīng)用程序的與策略是一個應(yīng)用程序的與POA相關(guān)的對象相關(guān)的對象以指定在那個以指定在那個POA中實現(xiàn)的對象共享的特征中實現(xiàn)的對象共享的特征本規(guī)范定義一些策略,以控制本規(guī)范定義一些策略,以控制POA的線程模型的線程模型 以及一些其它與對象管理相關(guān)的選項以及一些其它與對象管理相關(guān)的選項34POA ManagerPOA管理器是一個封裝一個或多個管理器是一個封裝一個或多個POA處理狀態(tài)的對象處理狀態(tài)的對象利用利用POA管理器上的操作管理器上的操作開發(fā)

29、者可以使向相關(guān)開發(fā)者可以使向相關(guān)POA發(fā)出的請求被排隊或丟棄發(fā)出的請求被排隊或丟棄開發(fā)者也可以利用開發(fā)者也可以利用POA管理器去活管理器去活POAServent Manager服務(wù)體管理器是一個可以與服務(wù)體管理器是一個可以與POA關(guān)聯(lián)的對象關(guān)聯(lián)的對象服務(wù)體管理器服務(wù)體管理器 負(fù)責(zé)管理一個對象與特定服務(wù)體的關(guān)聯(lián)負(fù)責(zé)管理一個對象與特定服務(wù)體的關(guān)聯(lián)并負(fù)責(zé)決定一個對象是否存在并負(fù)責(zé)決定一個對象是否存在ORB可以調(diào)用服務(wù)體管理器上的操作,以激活或去活服務(wù)體可以調(diào)用服務(wù)體管理器上的操作,以激活或去活服務(wù)體35Adaptor Activator一個適配器激活器是可以與一個適配器激活器是可以與POA關(guān)聯(lián)的對象

30、關(guān)聯(lián)的對象當(dāng)一個請求被從目前不存在的子當(dāng)一個請求被從目前不存在的子POA收到時收到時ORB將激活適配器激活器上的一個操作將激活適配器激活器上的一個操作適配器激活器可以根據(jù)命令創(chuàng)建所需的適配器激活器可以根據(jù)命令創(chuàng)建所需的POA36ORB是對客戶與服務(wù)器皆可見的一個抽象是對客戶與服務(wù)器皆可見的一個抽象POA是對服務(wù)器可見的對象是對服務(wù)器可見的對象用戶提供的實現(xiàn)被注冊在用戶提供的實現(xiàn)被注冊在POA中中 客戶客戶擁有引用擁有引用 并向它發(fā)出請求并向它發(fā)出請求ORB POA 與與 實現(xiàn)實現(xiàn)共同決定共同決定操作需要調(diào)用哪個服務(wù)體操作需要調(diào)用哪個服務(wù)體并執(zhí)行調(diào)用并執(zhí)行調(diào)用(3)模型體系結(jié)構(gòu)模型體系結(jié)構(gòu)373

31、8 如果如果 POA 支持支持 RETAIN 策略策略則它維護(hù)一張表(則它維護(hù)一張表(map):活動對象表(活動對象表(Active Object Map)AOP將對象標(biāo)識與活動服務(wù)體關(guān)聯(lián)起來將對象標(biāo)識與活動服務(wù)體關(guān)聯(lián)起來每個關(guān)聯(lián)組成了一個活動對象每個關(guān)聯(lián)組成了一個活動對象如果如果POA包含包含USE_DEFAULT_SERVANT 策略策略則一個缺省的服務(wù)體被注冊到則一個缺省的服務(wù)體被注冊到POA中中相反,如果相反,如果POA 包含包含USE_SERVANT_MANAGER 策略策略則一個用戶編寫的服務(wù)體管理器被注冊到則一個用戶編寫的服務(wù)體管理器被注冊到POA中中如果活動對象表未被使用如果活

32、動對象表未被使用或者一個請求對應(yīng)的對象未出現(xiàn)在活動對象表中或者一個請求對應(yīng)的對象未出現(xiàn)在活動對象表中POA或者使用缺省的服務(wù)器執(zhí)行請求或者使用缺省的服務(wù)器執(zhí)行請求 或者它調(diào)用服務(wù)體管理器獲取一個服務(wù)體來執(zhí)行請求或者它調(diào)用服務(wù)體管理器獲取一個服務(wù)體來執(zhí)行請求如果如果 RETAIN 策略策略被使用被使用則由服務(wù)體管理器返回的服務(wù)體由活動對象表保持則由服務(wù)體管理器返回的服務(wù)體由活動對象表保持否則,服務(wù)體僅被用于處理一個請求否則,服務(wù)體僅被用于處理一個請求3940(4)創(chuàng)建)創(chuàng)建POA 為實現(xiàn)一個需要為實現(xiàn)一個需要POA的對象的對象需要服務(wù)器應(yīng)用程序獲取一個需要服務(wù)器應(yīng)用程序獲取一個POA對象對象一個

33、特殊的一個特殊的POA對象,根(對象,根(root)POA,由,由ORB 進(jìn)行管理進(jìn)行管理并在初始對象名并在初始對象名“RootPOA”下下利用利用ORB初始化接口向應(yīng)用程序提供初始化接口向應(yīng)用程序提供應(yīng)用程序開發(fā)者可以利用根應(yīng)用程序開發(fā)者可以利用根POA創(chuàng)建對象創(chuàng)建對象開發(fā)者可以創(chuàng)建新開發(fā)者可以創(chuàng)建新POA:以允許開發(fā)者為新以允許開發(fā)者為新POA聲明特定的策略聲明特定的策略并提供一個不同的適配器激活器即服務(wù)體管理器并提供一個不同的適配器激活器即服務(wù)體管理器 也允許開發(fā)者劃分對象的名空間也允許開發(fā)者劃分對象的名空間因為對象標(biāo)識的解釋與因為對象標(biāo)識的解釋與POA相關(guān)相關(guān)開發(fā)者可以獨立地為多個對象

34、集合控制請求處理開發(fā)者可以獨立地為多個對象集合控制請求處理41一個一個 POA 是是 利用父利用父POA上的上的create_POA 操作操作作為一個已經(jīng)存在作為一個已經(jīng)存在POA的子的子POA創(chuàng)建的創(chuàng)建的POA對象不是永久性的對象不是永久性的ORB不保存不保存POA的任何狀態(tài)的任何狀態(tài)服務(wù)器程序負(fù)責(zé)創(chuàng)建并初始化合適的服務(wù)器程序負(fù)責(zé)創(chuàng)建并初始化合適的POA對象對象創(chuàng)建適宜的創(chuàng)建適宜的POA對象對象對于跨越多個服務(wù)器生命時間的永久對象特別重要對于跨越多個服務(wù)器生命時間的永久對象特別重要為支持在以前的服務(wù)器進(jìn)程中創(chuàng)建的一個對象引用為支持在以前的服務(wù)器進(jìn)程中創(chuàng)建的一個對象引用應(yīng)用程序必須重新創(chuàng)建出應(yīng)

35、用程序必須重新創(chuàng)建出創(chuàng)建對象引用的那個創(chuàng)建對象引用的那個POA,以及祖先,以及祖先POA每個被重新創(chuàng)建的每個被重新創(chuàng)建的POA必須與以前必須與以前POA的名字、策略相同的名字、策略相同42(5)引用創(chuàng)建)引用創(chuàng)建對象引用封裝了對象引用封裝了對象標(biāo)識信息對象標(biāo)識信息以及以及ORB需要的信息需要的信息用以標(biāo)識并定位與對象關(guān)聯(lián)的服務(wù)器以及用以標(biāo)識并定位與對象關(guān)聯(lián)的服務(wù)器以及POA引用按照下列方式被創(chuàng)建:引用按照下列方式被創(chuàng)建:l服務(wù)器應(yīng)用程序創(chuàng)建引用服務(wù)器應(yīng)用程序創(chuàng)建引用調(diào)用調(diào)用POA的的create_reference 與與 create_reference_with_id 操作操作從與從與POA

36、相關(guān)的信息中,或者從傳給操作的參數(shù)中相關(guān)的信息中,或者從傳給操作的參數(shù)中在創(chuàng)建對象引用的過程中,它們將抽象的對象活化,在創(chuàng)建對象引用的過程中,它們將抽象的對象活化,但它不將其與一個活動的服務(wù)體關(guān)聯(lián)但它不將其與一個活動的服務(wù)體關(guān)聯(lián)43l服務(wù)器應(yīng)用程序顯式地激活一個服務(wù)體服務(wù)器應(yīng)用程序顯式地激活一個服務(wù)體利用利用activate_object 或或 activate_object_with_id 操作操作將其與一個對象標(biāo)識關(guān)聯(lián)將其與一個對象標(biāo)識關(guān)聯(lián)一旦一個服務(wù)體被激活一旦一個服務(wù)體被激活服務(wù)器應(yīng)用程序可以服務(wù)器應(yīng)用程序可以 利用利用servant_to_reference 或或 id_to_ref

37、erence 操作操作將服務(wù)體影射為對應(yīng)的引用將服務(wù)體影射為對應(yīng)的引用44l服務(wù)器應(yīng)用程序可以使一個服務(wù)體隱式地激活自身服務(wù)器應(yīng)用程序可以使一個服務(wù)體隱式地激活自身 這種情況只有在這種情況只有在POA利用利用IMPLICIT_ACTIVATION策略被創(chuàng)建的前提下才會發(fā)生策略被創(chuàng)建的前提下才會發(fā)生如果嘗試獲取一個與非激活服務(wù)體對應(yīng)的對象引用如果嘗試獲取一個與非激活服務(wù)體對應(yīng)的對象引用POA可能自動分配一個產(chǎn)生的唯一的可能自動分配一個產(chǎn)生的唯一的Object Id 給服務(wù)體并激活結(jié)果對象給服務(wù)體并激活結(jié)果對象非激活服務(wù)體的引用可以非激活服務(wù)體的引用可以通過調(diào)用通過調(diào)用POA:servant_to

38、_reference而被獲得而被獲得或者或者通過在允許這種轉(zhuǎn)換的編程語言中通過在允許這種轉(zhuǎn)換的編程語言中 執(zhí)行從服務(wù)體到一個引用類型的隱式或顯式轉(zhuǎn)換執(zhí)行從服務(wù)體到一個引用類型的隱式或顯式轉(zhuǎn)換45(6)對象活動狀態(tài))對象活動狀態(tài) CORBA對象可以與一個活動服務(wù)體關(guān)聯(lián)對象可以與一個活動服務(wù)體關(guān)聯(lián)如果如果 POA 具有具有RETAIN 策略策略則服務(wù)體與它關(guān)聯(lián)的對象標(biāo)識被加入則服務(wù)體與它關(guān)聯(lián)的對象標(biāo)識被加入POA的活動對象表的活動對象表l服務(wù)器應(yīng)用程序自身顯式激活單獨的對象服務(wù)器應(yīng)用程序自身顯式激活單獨的對象 (通過通過activate_object 或者或者 activate_object_wi

39、th_id 操操作作)l服務(wù)器應(yīng)用程序指導(dǎo)服務(wù)器應(yīng)用程序指導(dǎo)POA根據(jù)命令激活對象根據(jù)命令激活對象 (通過使通過使POA激活一個用戶提供的服務(wù)體管理者激活一個用戶提供的服務(wù)體管理者)l在某些環(huán)境下在某些環(huán)境下POA 可以隱式地激活一個對象可以隱式地激活一個對象當(dāng)服務(wù)器應(yīng)用程序試圖為一個尚未激活的服務(wù)體當(dāng)服務(wù)器應(yīng)用程序試圖為一個尚未激活的服務(wù)體(即,未與一個對象標(biāo)識關(guān)聯(lián)即,未與一個對象標(biāo)識關(guān)聯(lián))獲取一個引用獲取一個引用46如果如果USE_DEFAULT_SERVANT策略也起作用策略也起作用服務(wù)器應(yīng)用程序指導(dǎo)服務(wù)器應(yīng)用程序指導(dǎo)POA通過調(diào)用一個單個的服務(wù)體來激活未知的對象通過調(diào)用一個單個的服務(wù)體

40、來激活未知的對象如果如果 POA 擁有擁有 NON_RETAIN 策略策略對于每個請求對于每個請求POA 可以使用可以使用 一個缺省服務(wù)體一個缺省服務(wù)體 或者或者 一個服務(wù)體管理者一個服務(wù)體管理者定位一個活動服務(wù)體定位一個活動服務(wù)體從從POA的角度看服務(wù)體僅在一個請求過程中是活動的的角度看服務(wù)體僅在一個請求過程中是活動的POA不將不將servant-object 關(guān)聯(lián)加入活動對象表關(guān)聯(lián)加入活動對象表47一個請求必須能夠承載一個請求必須能夠承載(conveying)目標(biāo)對象的對象標(biāo)識目標(biāo)對象的對象標(biāo)識以及以及 創(chuàng)建目標(biāo)對象引用的創(chuàng)建目標(biāo)對象引用的POA標(biāo)識標(biāo)識當(dāng)一個客戶發(fā)出一個請求時當(dāng)一個客戶發(fā)

41、出一個請求時ORB 首先定位正確的服務(wù)器首先定位正確的服務(wù)器 (也許在需要時啟動它也許在需要時啟動它)然后在那個服務(wù)器中定位正確的然后在那個服務(wù)器中定位正確的POA如果如果 POA 不存在于服務(wù)器進(jìn)程中不存在于服務(wù)器進(jìn)程中應(yīng)用程序有機(jī)會通過使用適配器激活器重新創(chuàng)建所需的應(yīng)用程序有機(jī)會通過使用適配器激活器重新創(chuàng)建所需的POA一旦一旦 ORB 已經(jīng)定位了已經(jīng)定位了POA它將請求傳送給那個它將請求傳送給那個POA對那個請求的進(jìn)一步處理取決于對那個請求的進(jìn)一步處理取決于 與那個與那個POA關(guān)聯(lián)的策略關(guān)聯(lián)的策略 以及對象的目前活動狀態(tài)以及對象的目前活動狀態(tài)(7)請求處理)請求處理48如果如果 POA 有

42、有RETAIN 策略策略POA 將在活動對象表中查找將在活動對象表中查找是否有與來自請求的對象標(biāo)識值關(guān)聯(lián)的服務(wù)體是否有與來自請求的對象標(biāo)識值關(guān)聯(lián)的服務(wù)體如果這樣的一個服務(wù)體存在如果這樣的一個服務(wù)體存在則則 POA 調(diào)用服務(wù)體上的相應(yīng)方法調(diào)用服務(wù)體上的相應(yīng)方法如果如果 POA 有有NON_RETAIN 策略策略或者或者有有RETAIN 策略策略但未在活動對象表中發(fā)現(xiàn)服務(wù)體但未在活動對象表中發(fā)現(xiàn)服務(wù)體 POA 進(jìn)行下面的動作:進(jìn)行下面的動作:l如果如果 POA 有有USE_DEFAULT_SERVANT 策略策略一個缺省的服務(wù)器已經(jīng)與該一個缺省的服務(wù)器已經(jīng)與該POA關(guān)聯(lián)關(guān)聯(lián)則則POA 將調(diào)用該服務(wù)

43、體上的相應(yīng)方法將調(diào)用該服務(wù)體上的相應(yīng)方法如果沒有服務(wù)體與如果沒有服務(wù)體與POA關(guān)聯(lián)關(guān)聯(lián)POA引發(fā)引發(fā)OBJ_ADAPTER 系統(tǒng)例外系統(tǒng)例外49l如果如果 POA 有有USE_SERVANT_MANAGER 策略策略且一個服務(wù)器管理者已經(jīng)與該且一個服務(wù)器管理者已經(jīng)與該POA關(guān)聯(lián)關(guān)聯(lián)則則POA將調(diào)用它的將調(diào)用它的incarnate 或或 preinvoke 以發(fā)現(xiàn)可能處理請求的一個服務(wù)體以發(fā)現(xiàn)可能處理請求的一個服務(wù)體如果沒有與如果沒有與POA關(guān)聯(lián)的服務(wù)體管理器關(guān)聯(lián)的服務(wù)體管理器POA引發(fā)引發(fā)OBJ_ADAPTER 系統(tǒng)例外系統(tǒng)例外l如果如果USE_OBJECT_MAP_ONLY 策略起作用策略起

44、作用POA 引發(fā)引發(fā) OBJECT_NOT_EXIST 系統(tǒng)例外系統(tǒng)例外50 一個一個 POA 在創(chuàng)建時可以附帶的一個策略在創(chuàng)建時可以附帶的一個策略指示它的對象可以被隱式地激活指示它的對象可以被隱式地激活一個非活動的服務(wù)體可能通過某個操作被隱式地激活一個非活動的服務(wù)體可能通過某個操作被隱式地激活該操作邏輯上需要一個被分配給那個服務(wù)體的對象標(biāo)識該操作邏輯上需要一個被分配給那個服務(wù)體的對象標(biāo)識一個對象的隱式激活涉及分配一個系統(tǒng)產(chǎn)生的對象標(biāo)識一個對象的隱式激活涉及分配一個系統(tǒng)產(chǎn)生的對象標(biāo)識以及在活動對象表中注冊服務(wù)體與對象標(biāo)識以及在活動對象表中注冊服務(wù)體與對象標(biāo)識與隱式激活的對象關(guān)聯(lián)的接口由服務(wù)體決

45、定與隱式激活的對象關(guān)聯(lián)的接口由服務(wù)體決定 (8)隱式激活)隱式激活51 支持隱式激活的操作包括:支持隱式激活的操作包括:lPOA:servant_to_reference 操作操作帶有服務(wù)體參數(shù),并返回一個引用帶有服務(wù)體參數(shù),并返回一個引用lPOA:servant_to_id 操作操作帶有服務(wù)體參數(shù),并返回一個對象標(biāo)識帶有服務(wù)體參數(shù),并返回一個對象標(biāo)識l由影射語言支持的操作由影射語言支持的操作用來為一個服務(wù)體獲取一個對象引用或者對象標(biāo)識用來為一個服務(wù)體獲取一個對象引用或者對象標(biāo)識 例如,例如, C+中的中的_this() 服務(wù)體成員函數(shù)服務(wù)體成員函數(shù) 為服務(wù)體為服務(wù)體返回一個對象引用返回一個對

46、象引用l由影射語言支持的隱式轉(zhuǎn)換由影射語言支持的隱式轉(zhuǎn)換將服務(wù)體轉(zhuǎn)換為一個對象引用或者一個對象標(biāo)識將服務(wù)體轉(zhuǎn)換為一個對象引用或者一個對象標(biāo)識后兩類操作依賴于影射語言后兩類操作依賴于影射語言52(9)多線程)多線程 為了允許開發(fā)出使用線程的服務(wù)器為了允許開發(fā)出使用線程的服務(wù)器當(dāng)在一個多線程環(huán)境中使用時當(dāng)在一個多線程環(huán)境中使用時必須指定必須指定POA 的行為以及相關(guān)的接口的行為以及相關(guān)的接口指定這種行為,指定這種行為, 既不需要既不需要ORB 必須在一個線程環(huán)境中被支持必須在一個線程環(huán)境中被支持也不需要也不需要 ORB 在處理請求時必須使用線程在處理請求時必須使用線程僅需要僅需要: 如果一個如果一

47、個 ORB確實提供對多線程的支持確實提供對多線程的支持那么這些行為將被那么這些行為將被ORB支持支持這允許一個編程人員以在多個這允許一個編程人員以在多個ORB間可移植的方式間可移植的方式充分利用支持線程的多個充分利用支持線程的多個ORBsPOA的處理受的處理受ORB中可用的與線程有關(guān)的調(diào)用的影響:中可用的與線程有關(guān)的調(diào)用的影響:work_pending, perform_work,run, 及及 shutdown53 POA 線程模型線程模型 當(dāng)與多線程當(dāng)與多線程ORB實現(xiàn)一起被使用時實現(xiàn)一起被使用時POA 支持兩種線程模型:支持兩種線程模型:ORB controlled 與與single thread be

溫馨提示

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

評論

0/150

提交評論