【正文】
返回結果 繼續(xù)以 DII方式調(diào)用 account 的 getBalance()方法 實例 山東大學計算機科學與技術學院 ——DII public boolean withdraw (float amount) { _request = (withdraw)。 float bal=().value().extract_float()。 (())。 account = ().value().extract_Object()。 (())。 String name = 0?args[0]:”David”。 manager = (() orb).bind( “BankPOA”,”BankManager”.getBytes(),null,null)。 山東大學計算機科學與技術學院 2 創(chuàng)建請求對象 ? 對目標對象引用的某一操作的一次調(diào)用 ? 發(fā)起請求時,請求對象被打包通過 ORB發(fā)送到服務端 – 使用 SII時,該過程對程序員是透明的 – 使用 DII,必須由程序員自己顯式創(chuàng)建并發(fā)送請求對象 ? 必須由程序員自己顯式地創(chuàng)建并發(fā)送請求對象,_request()/_create_request ? request = (“open”)。 } } 初始化 獲取帳戶管理員的通用對象引用 創(chuàng)建一個調(diào)用 manager的 open()操作的請求對象 設置請求的實際參數(shù) 設置請求的返回結果的類型 以同步通信方式發(fā)送請求 提取返回結果 繼續(xù)以 DII方式調(diào)用 account 的 getBalance()方法 實例 山東大學計算機科學與技術學院基礎技術教學部 客戶端 DII編程 山東大學計算機科學與技術學院 實現(xiàn)規(guī)范 ? 客戶可以使用 DII對任意多個接口的對象發(fā)起調(diào)用 ? 對一個接口的一部分對象發(fā)起調(diào)用,另一部分用靜態(tài)存根調(diào)用 ? 可對一個接口的一個對象有時使用 DII,有時使用靜態(tài)存根 ? 用一組 API獲得和解析一個調(diào)用,實現(xiàn)并返回結果 山東大學計算機科學與技術學院 編寫 DII ? 獲取目標對象引用 ? 創(chuàng)建請求對象 ? 傳遞實際參數(shù)并指定返回類型 ? 發(fā)送請求并等待響應 ? 提取結果 山東大學計算機科學與技術學院 步驟 ? 向目標對象詢問描述目標對象接口信息的對象,并將其放在接口庫中 ? 從接口庫的對象中,找到所要調(diào)用的操作的描述 ? 建立調(diào)用參數(shù)表,并逐一填入?yún)?shù) ? 創(chuàng)建請求。 float bal=().value().extract_float()。 (())。 account = ().value().extract_Object()。 (())。 String name = 0?args[0]:”David”。 manager = (() orb).bind( “BankPOA”,”BankManager”.getBytes(),null,null)。在請求中指出操作名,參數(shù)和返回結果參數(shù) 山東大學計算機科學與技術學院 c l i e nSe rv e r1 g e t _ int e r f a c e2 loo k u p _ n a me3 d e s c r ibe4 c r e a t e _ l is t5 a d d _ it e m (1 n)6 c r e a t e _ r e q u e s t7 inv o k e8 d e let e9 f r e eIn te rfa c e De fO p e ra ti o n DefCO RBA:O RBCO RBA:Nv l i s tCO RBA:O b j e c tO RB:Req u e s t動態(tài)調(diào)用環(huán)境接口庫環(huán)境動態(tài)調(diào)用環(huán)境接口庫環(huán)境五。(通過調(diào)用 InterfaceDef的 lookup_name操作,得到 OperationDef對象) 3 調(diào)用 OperationDef對象中的 describe(),獲得需調(diào)用的操作的完整描述,即操作的全部 IDL定義 山東大學計算機科學與技術學院 c l i e nSe rv e r1 g e t _ int e r f a c e2 loo k u p _ n a me3 d e s c r ibe4 c r e a t e _ l is t5 a d d _ it e m (1 n)6 c r e a t e _ r e q u e s t7 inv o k e8 d e let e9 f r e eIn te rfa c e De fO p e ra ti o n DefCO RBA:O RBCO RBA:Nv l i s tCO RBA:O b j e c tO RB:Req u e s t動態(tài)調(diào)用環(huán)境接口庫環(huán)境動態(tài)調(diào)用環(huán)境接口庫環(huán)境三 . 準備參數(shù)列表 4 調(diào)用 ORB接口中用于動態(tài)調(diào)用的 create_list方法,創(chuàng)建一個空閑的參數(shù)列表,即 Nvlist對象 5 調(diào)用 Nvlist上的 add_item(),將各個請求參數(shù)逐一填入?yún)?shù)列表中 山東大學計算機科學與技術學院 c l i e nSe rv e r1 g e t _ int e r f a c e2 loo k u p _ n a me3 d e s c r ibe4 c r e a t e _ l is t5 a d d _ it e m (1 n)6 c r e a t e _ r e q u e s t7 inv o k e8 d e let e9 f r e eIn te rfa c e De fO p e ra ti o n DefCO RBA:O RBCO RBA:Nv l i s tCO RBA:O b j e c tO RB:Req u e s t動態(tài)調(diào)用環(huán)境接口庫環(huán)境動態(tài)調(diào)用環(huán)境接口庫環(huán)境四。 山東大學計算機科學與技術學院 CORBA::ORB ? 見 P141 ? Create_list:生成一個空的 NVlist對象 ? Create_operation_list:生成 NVlist對象,利用客戶描述的操作參數(shù)自動進行填充,并將已賦值的NVlist返回給客戶 山東大學計算機科學與技術學院 CORBA::Object(對象引用) ? 創(chuàng)建一個請求,在目標對象上執(zhí)行 – _request: 創(chuàng)建一個請求對象后,可調(diào)用該請求對象的add_in_arg(),add_name_in_arg()等方法為調(diào)用操作設置一個或多個實參 – _create_request:調(diào)用前必須先創(chuàng)建操作的實參 山