資源描述:
《可移植對象適配器.ppt》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在PPT專區(qū)-天天文庫。
1、可移植對象適配器11.2簡介POA技術(shù)提供的最基本地服務(wù)是:對象創(chuàng)建、伺服程序注冊以及請求的調(diào)度。POA提供了一整套特性和服務(wù),可以利用它來編寫可擴(kuò)縮的、高性能的服務(wù)器應(yīng)用程序,它在合理控制資源請求方面起著重要的作用。11.3POA基本原理在一個服務(wù)器應(yīng)用程序中,POA負(fù)責(zé)創(chuàng)建對象、激活對象以及將對各個對象的請求調(diào)度到它們各自的伺服程序上,通過POA,CORBA對象完成了編程語言所提供的伺服程序的相互對應(yīng)關(guān)系。當(dāng)一個對象處于激活狀態(tài)時,該對象就可以接收并執(zhí)行請求。當(dāng)對象得到一個請求后,該對象必須由伺服程序進(jìn)行具體化,或給它以具體形式。一個給定對象僅由一個單個的伺服程序在給定點(diǎn)及時進(jìn)行具
2、體化,但超時以后,可以創(chuàng)建許多伺服程序?qū)嵗齺砭唧w化一個CORBA對象。最后每一個伺服程序釋放后就結(jié)束了它與相對應(yīng)的CORBA對象之間的連接。具體化和釋放是應(yīng)用于伺服程序的,創(chuàng)建和撤消是應(yīng)用于CORBA對象的。11.3.1基本的請求調(diào)度基本調(diào)度如下:(1)首先,服務(wù)器應(yīng)用程序以某種方式為CORBA對象導(dǎo)出一個對象引用。客戶機(jī)可能通過命名服務(wù)或者交易服務(wù)或者從另一個請求接收它來獲得導(dǎo)出的對象引用。對象引用從邏輯上“指向”目標(biāo)CORBA對象,像C++指針指向它底層的C++對象一樣。(2)其次,在應(yīng)用程序的控制下,客戶程序ORB使用對象引用來決定對象駐留在何處和如何訪問它,然后它向服務(wù)器ORB
3、發(fā)送請求。(3)再次,服務(wù)器ORB接收請求并將其調(diào)度給擁有該目標(biāo)對象的POA。(4)最后,POA通過調(diào)用具體化該目標(biāo)對象的伺服程序來繼續(xù)執(zhí)行該調(diào)度。11.3.2關(guān)鍵的POA實(shí)體有三種關(guān)鍵實(shí)體涉及到POA對象引用POA負(fù)責(zé)創(chuàng)建對象引用。對象標(biāo)識符在POA主機(jī)的作用域內(nèi),每一個對象通過調(diào)用一個octet序列的對象標(biāo)識符進(jìn)行識別。當(dāng)POA創(chuàng)建一個新的CORBA對象時,典型情況是,它就將對象標(biāo)識符嵌入在對象引用的對象密鑰部分。伺服程序應(yīng)用程序直接通過POA可以創(chuàng)建并注冊伺服程序來具體化對象。同樣,應(yīng)用程序可以向POA提供伺服程序管理器對象,當(dāng)需要執(zhí)行一個請求時,POA就能創(chuàng)建伺服程序。應(yīng)用程序
4、甚至可以提供一個默認(rèn)的伺服程序。與POA策略有關(guān),在任何給定的時間,單個的伺服程序可以用POA注冊來具體化一個和多個的CORBA對象。POA通過目標(biāo)對象的對象標(biāo)識符與合適的伺服程序之間的映射來調(diào)度請求。一個伺服程序也可以通過對_this調(diào)用隱式創(chuàng)建一個新的CORBA對象,并為其注冊一個伺服程序。11.4POA策略POA規(guī)范的關(guān)鍵特性就是一個應(yīng)用程序可以包含多個POA實(shí)例。每一個POA實(shí)例代表具有相似性能的一組對象。這些性能通過POA創(chuàng)建時所指定的POA策略來控制。所有應(yīng)用程序至少有一個POA,也就是RootPOA,它具有標(biāo)準(zhǔn)的策略集。策略是用來定義POA性能的對象,該對象在策略內(nèi)部創(chuàng)建
5、。向POA和POAManager接口一樣,CORBA規(guī)范指出,在標(biāo)準(zhǔn)的PortableServer模塊中定義POA策略接口。像所有的策略接口一樣,POA策略類從CORBA::Policy接口派生出來。POA策略Policy接口及相關(guān)的類型提供的管理操作(1)通過基本的Policy接口,利用policy_type只讀屬性可以確定策略的實(shí)際派生類型。PolicyType是由OMG控制的一個標(biāo)志值,這樣可以確保所有的標(biāo)準(zhǔn)接口都有一個唯一的標(biāo)志(2)copy操作可以克隆(clone)一個Policy對象。返回的引用指向目標(biāo)Policy對象的一個全新的拷貝。(3)destory操作用來撤消目標(biāo)P
6、olicy對象。(4)PoicyList用來將指向各種派生Policy對象的引用分組來形成策略集。POA創(chuàng)建操作接收一個PolicyList類型的參數(shù),這個參數(shù)可以將策略設(shè)置成新的POA。策略對象是局部約束對象。也就是任何試圖將它們的引用作為參數(shù)傳遞給標(biāo)準(zhǔn)的CORBA操作或通過ORB::object_to_string將它們轉(zhuǎn)換成字符串的操作都將產(chǎn)生CORBA::MARCHAL異常。11.4.1CORBA對象生存期范圍假如一個客戶程序向一個當(dāng)前沒有運(yùn)行或沒有激活的目標(biāo)對象發(fā)出一個請求,如果必要的話,ORB工具就會為該對象激活一個服務(wù)器進(jìn)程,然后激活對象本身。服務(wù)器進(jìn)程和目標(biāo)對象的任何激
7、活對發(fā)出請求的客戶來說都是透明的。持久對象:生存期超過創(chuàng)建或激活它們的某一特定進(jìn)程的CORBA對象。除了持久對象外,其它的對象的生命周期由進(jìn)程的生命周期甚至于創(chuàng)建它們的對象適配器來決定。11.4.2對象標(biāo)識符POA通過它的對象標(biāo)識符識別每一個對象。對象標(biāo)識符被賦值為ObjectId類型,這個類型在PortableServer模塊中定義為octet的一個序列。一個程序可以顯式的提供自己的對象標(biāo)識符,也可以讓POA為它創(chuàng)建對象標(biāo)識符。對象標(biāo)識符和對