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

下載本文檔

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

文檔簡介

1、.1是是ORB的構(gòu)件的構(gòu)件提供一致的接口定義存儲機制提供一致的接口定義存儲機制管理和提供對管理和提供對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可以使用在接口池中維護的對象定義可以使用在接口池中維護的對象定義解釋和處理請求中提供的值:解釋和處理請求中提供的值: 提供請求簽名的類型檢查(請求是否通過提供請求簽名的類型檢查(請求是否通過DII或或stub發(fā)出的)發(fā)出的) 幫助檢查接口繼承關(guān)系的正確性幫助檢查接口繼承關(guān)系

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

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

5、接口的方式接口池使用模塊作為組織接口的方式并且根據(jù)名稱查找這些組織并且根據(jù)名稱查找這些組織模塊可以包含常量、類型定義、例外情況、接口定義和其它模塊模塊可以包含常量、類型定義、例外情況、接口定義和其它模塊例如,模塊可以對應于例如,模塊可以對應于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標識符的目的是標識符的目的是允許不同的允許不同的repository保持

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

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

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

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

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

12、型與屬性類型的值是標識調(diào)用參數(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 的的 類型碼具有類

13、型碼具有kind tk_long ,無參數(shù),無參數(shù) 描述描述 sequence 的類型碼具有的類型碼具有 kind tk_sequence包含兩個參數(shù):包含兩個參數(shù): 10 and boolean高級軟件工程.15高級軟件工程.16.17接口對象接口對象接口池管理的關(guān)于每個接口的信息接口池管理的關(guān)于每個接口的信息都以下面類型的接口池對象集合的形式維護都以下面類型的接口池對象集合的形式維護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語句直接對應語句直接對應一個實現(xiàn)可以一個實現(xiàn)可以 選擇維持附加的屬性以便于管

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

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

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

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

20、ontainer接口中繼承接口中繼承navigation操作操作被其它對象包容的對象從被其它對象包容的對象從Contained接口中繼承接口中繼承navigation操作操作.25IDLType 接口被所有標識接口被所有標識IDL類型的類型的IR對象所繼承對象所繼承包括包括interfaces, typedefs, 及及 anonymous typesTypedefDef 接口接口被所有被所有named non-interface types對象多繼承對象多繼承基本接口基本接口 IRObjectContainedContainer IDLType及及 TypedefDef不是暫時性的不是暫時性

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

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

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

24、底刪除 等等等等l提供一個擴展機制提供一個擴展機制用于將策略信息與用于將策略信息與POA中實現(xiàn)的對象進行關(guān)聯(lián)中實現(xiàn)的對象進行關(guān)聯(lián)高級軟件工程.30(2)POA的模型元素的模型元素客戶客戶 是一個計算語境是一個計算語境它通過對一個對象的引用向其提出請求它通過對一個對象的引用向其提出請求服務器服務器 是一個計算語境是一個計算語境對象的實現(xiàn)體存在于其中對象的實現(xiàn)體存在于其中一般情況下,一個服務器對應于一個進程一般情況下,一個服務器對應于一個進程對象對象 是一個具有標識、接口、及實現(xiàn)的程序體是一個具有標識、接口、及實現(xiàn)的程序體 從一個客戶的視角,對象的標識封裝在對象的引用中從一個客戶的視角,對象的標識

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

26、所謂相關(guān)是指向它的請求將以服務體為目標Object Id一個對象標識是一個值,由一個對象標識是一個值,由POA及用戶提供的實現(xiàn)使用及用戶提供的實現(xiàn)使用以標識一個特定的抽象以標識一個特定的抽象CORBA對象對象對象標識值對于客戶是隱藏的,由引用封裝對象標識值對于客戶是隱藏的,由引用封裝對象標識沒有標準的形式對象標識沒有標準的形式它們由它們由POA作為未解釋的作為未解釋的8進制位序列管理進制位序列管理.32Object Reference一個對象引用封裝了一個對象標識及一個一個對象引用封裝了一個對象標識及一個POA標識標識在一個特定在一個特定ORB實現(xiàn)中的一個具體引用包含更多的信息實現(xiàn)中的一個具體

27、引用包含更多的信息例如例如服務器位置服務器位置被考慮的被考慮的POA等等(它可能包含它可能包含POA的全名的全名 及從根部到特定及從根部到特定POA的所有的所有POA的名字的名字)引用也可能不包含對象標識引用也可能不包含對象標識 但卻包含由但卻包含由ORB管理的壓縮過的值管理的壓縮過的值它們可以被影射為對象標識它們可以被影射為對象標識.33POA 可移植對象適配器是在服務器語境中的一個可標識實體可移植對象適配器是在服務器語境中的一個可標識實體 每個每個POA為對象標識提供了一個名空間為對象標識提供了一個名空間并為其它并為其它POA(nested or child)提供一個名空間)提供一個名空間

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

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

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

31、要調(diào)用哪個服務體并執(zhí)行調(diào)用并執(zhí)行調(diào)用(3)模型體系結(jié)構(gòu)模型體系結(jié)構(gòu).37.38 如果如果 POA 支持支持 RETAIN 策略策略則它維護一張表(則它維護一張表(map):活動對象表(活動對象表(Active Object Map)AOP將對象標識與活動服務體關(guān)聯(lián)起來將對象標識與活動服務體關(guān)聯(lián)起來每個關(guān)聯(lián)組成了一個活動對象每個關(guān)聯(lián)組成了一個活動對象如果如果POA包含包含USE_DEFAULT_SERVANT 策略策略則一個缺省的服務體被注冊到則一個缺省的服務體被注冊到POA中中相反,如果相反,如果POA 包含包含USE_SERVANT_MANAGER 策略策略則一個用戶編寫的服務體管理器被注冊

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

33、對象的對象需要服務器應用程序獲取一個需要服務器應用程序獲取一個POA對象對象一個特殊的一個特殊的POA對象,根(對象,根(root)POA,由,由ORB 進行管理進行管理并在初始對象名并在初始對象名“RootPOA”下下利用利用ORB初始化接口向應用程序提供初始化接口向應用程序提供應用程序開發(fā)者可以利用根應用程序開發(fā)者可以利用根POA創(chuàng)建對象創(chuàng)建對象開發(fā)者可以創(chuàng)建新開發(fā)者可以創(chuàng)建新POA:以允許開發(fā)者為新以允許開發(fā)者為新POA聲明特定的策略聲明特定的策略并提供一個不同的適配器激活器即服務體管理器并提供一個不同的適配器激活器即服務體管理器 也允許開發(fā)者劃分對象的名空間也允許開發(fā)者劃分對象的名空間

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

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

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

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

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

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

40、指導服務器應用程序指導POA通過調(diào)用一個單個的服務體來激活未知的對象通過調(diào)用一個單個的服務體來激活未知的對象如果如果 POA 擁有擁有 NON_RETAIN 策略策略對于每個請求對于每個請求POA 可以使用可以使用 一個缺省服務體一個缺省服務體 或者或者 一個服務體管理者一個服務體管理者定位一個活動服務體定位一個活動服務體從從POA的角度看服務體僅在一個請求過程中是活動的的角度看服務體僅在一個請求過程中是活動的POA不將不將servant-object 關(guān)聯(lián)加入活動對象表關(guān)聯(lián)加入活動對象表.47一個請求必須能夠承載一個請求必須能夠承載(conveying)目標對象的對象標識目標對象的對象標識以

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

42、 以及對象的目前活動狀態(tài)以及對象的目前活動狀態(tài)(7)請求處理)請求處理.48如果如果 POA 有有RETAIN 策略策略POA 將在活動對象表中查找將在活動對象表中查找是否有與來自請求的對象標識值關(guān)聯(lián)的服務體是否有與來自請求的對象標識值關(guān)聯(lián)的服務體如果這樣的一個服務體存在如果這樣的一個服務體存在則則 POA 調(diào)用服務體上的相應方法調(diào)用服務體上的相應方法如果如果 POA 有有NON_RETAIN 策略策略或者或者有有RETAIN 策略策略但未在活動對象表中發(fā)現(xiàn)服務體但未在活動對象表中發(fā)現(xiàn)服務體 POA 進行下面的動作:進行下面的動作:l如果如果 POA 有有USE_DEFAULT_SERVANT

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

44、ADAPTER 系統(tǒng)例外系統(tǒng)例外l如果如果USE_OBJECT_MAP_ONLY 策略起作用策略起作用POA 引發(fā)引發(fā) OBJECT_NOT_EXIST 系統(tǒng)例外系統(tǒng)例外.50 一個一個 POA 在創(chuàng)建時可以附帶的一個策略在創(chuàng)建時可以附帶的一個策略指示它的對象可以被隱式地激活指示它的對象可以被隱式地激活一個非活動的服務體可能通過某個操作被隱式地激活一個非活動的服務體可能通過某個操作被隱式地激活該操作邏輯上需要一個被分配給那個服務體的對象標識該操作邏輯上需要一個被分配給那個服務體的對象標識一個對象的隱式激活涉及分配一個系統(tǒng)產(chǎn)生的對象標識一個對象的隱式激活涉及分配一個系統(tǒng)產(chǎn)生的對象標識以及在活動對

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

46、 C+中的中的_this() 服務體成員函數(shù)服務體成員函數(shù) 為服務體為服務體返回一個對象引用返回一個對象引用l由影射語言支持的隱式轉(zhuǎn)換由影射語言支持的隱式轉(zhuǎn)換將服務體轉(zhuǎn)換為一個對象引用或者一個對象標識將服務體轉(zhuǎn)換為一個對象引用或者一個對象標識后兩類操作依賴于影射語言后兩類操作依賴于影射語言.52(9)多線程)多線程 為了允許開發(fā)出使用線程的服務器為了允許開發(fā)出使用線程的服務器當在一個多線程環(huán)境中使用時當在一個多線程環(huán)境中使用時必須指定必須指定POA 的行為以及相關(guān)的接口的行為以及相關(guān)的接口指定這種行為,指定這種行為, 既不需要既不需要ORB 必須在一個線程環(huán)境中被支持必須在一個線程環(huán)境中被支持

47、也不需要也不需要 ORB 在處理請求時必須使用線程在處理請求時必須使用線程僅需要僅需要: 如果一個如果一個 ORB確實提供對多線程的支持確實提供對多線程的支持那么這些行為將被那么這些行為將被ORB支持支持這允許一個編程人員以在多個這允許一個編程人員以在多個ORB間可移植的方式間可移植的方式充分利用支持線程的多個充分利用支持線程的多個ORBsPOA的處理受的處理受ORB中可用的與線程有關(guān)的調(diào)用的影響:中可用的與線程有關(guān)的調(diào)用的影響:work_pending, perform_work,run, 及及 shutdown.53 POA 線程模型線程模型 當與多線程當與多線程ORB實現(xiàn)一起被使用時實現(xiàn)一起被使用時POA 支持兩種線程模型:支持兩種線程模型:ORB controlled 與與single thread behavior 這兩種模型可以被一起或者單獨使用這兩種模型可以

溫馨提示

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

最新文檔

評論

0/150

提交評論