PowerBuilder 6.0開(kāi)發(fā)分布式三層應(yīng)用程序_第1頁(yè)
PowerBuilder 6.0開(kāi)發(fā)分布式三層應(yīng)用程序_第2頁(yè)
PowerBuilder 6.0開(kāi)發(fā)分布式三層應(yīng)用程序_第3頁(yè)
PowerBuilder 6.0開(kāi)發(fā)分布式三層應(yīng)用程序_第4頁(yè)
PowerBuilder 6.0開(kāi)發(fā)分布式三層應(yīng)用程序_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、使用PowerBuilder 6.0開(kāi)發(fā)分布式三層應(yīng)用程序作者:陳俊明本文檔是在PowerBuilder 6.0的基礎(chǔ)上產(chǎn)生。所有內(nèi)容均為實(shí)踐中所得,所有代碼在程序中均通過(guò)(機(jī)器配置:P200/64M/6.4G)。在文章的最后,還有一個(gè)通用的服務(wù)器框架應(yīng)用程序,您可對(duì)服務(wù)器程序只加入您的分布對(duì)象即可完成服務(wù)器程序。由于水平所限,錯(cuò)誤在所難免,還請(qǐng)大家指正,我的EMAIL是CHENJM163.NET,發(fā)郵件時(shí)請(qǐng)?jiān)谥黝}中加入POWERBUILDER字樣。概述只要有過(guò)MIS程序編程經(jīng)驗(yàn)的程序員都知道,一般情況下,整個(gè)MIS應(yīng)用系統(tǒng)分為兩部份,即分為數(shù)據(jù)庫(kù)服務(wù)器和前臺(tái)程序(即平時(shí)我們所說(shuō)的C/S結(jié)構(gòu))

2、。在這種體系統(tǒng)結(jié)構(gòu)下,應(yīng)用系統(tǒng)的邏輯實(shí)現(xiàn)幾乎都是通過(guò)前臺(tái)程序即客戶端來(lái)體現(xiàn),少量保存在數(shù)據(jù)庫(kù)服務(wù)器中(以存儲(chǔ)過(guò)程的形式),在業(yè)務(wù)和管理形式?jīng)]有變化的情況下,這種結(jié)構(gòu)工作得非常好。可是當(dāng)業(yè)務(wù)邏輯發(fā)生變化時(shí),我們就需要對(duì)客戶端程序進(jìn)行修改和重新編譯,并把新程序發(fā)布給用戶,有時(shí)(大多數(shù)時(shí)候)還要對(duì)客戶重新進(jìn)行培訓(xùn)。可以說(shuō),C/S體系結(jié)構(gòu)不能很好的適應(yīng)未來(lái)系統(tǒng)的發(fā)展。正因?yàn)榇?,在軟件界逐漸形成另一種應(yīng)用體系結(jié)構(gòu)即數(shù)據(jù)庫(kù)服務(wù)器、應(yīng)用服務(wù)器和前臺(tái)程序。在這種結(jié)構(gòu)下,幾乎所有的商業(yè)邏輯都在應(yīng)用服務(wù)器中實(shí)現(xiàn),前臺(tái)程序只是通過(guò)應(yīng)用服務(wù)器提供的接口來(lái)實(shí)現(xiàn)其功能。修改商業(yè)邏輯,只需要修改應(yīng)用服務(wù)器程序,只要保持對(duì)前

3、臺(tái)程序的接口不發(fā)生變化,前臺(tái)程序可以不用作任何修改即可實(shí)現(xiàn)功能的轉(zhuǎn)變,并體現(xiàn)新的商業(yè)邏輯,其優(yōu)點(diǎn)是顯而易見(jiàn)的。PowerBuilder 6.0是當(dāng)今用于與數(shù)據(jù)庫(kù)有關(guān)的應(yīng)用系統(tǒng)開(kāi)發(fā)的首選工具,它支持幾乎所有當(dāng)前流行的數(shù)據(jù)庫(kù)服務(wù)器,具有可視化的面向?qū)ο缶幊汰h(huán)境,使其非常易于使用。從5.0版本開(kāi)始,PowerBuilder支持C/S體系結(jié)構(gòu)和分布式計(jì)算體系結(jié)構(gòu)的應(yīng)用。本文的主要目的是通過(guò)對(duì)用PowerBuilder開(kāi)發(fā)分布式計(jì)算體系結(jié)構(gòu)應(yīng)用的學(xué)習(xí),使讀者能夠基本掌握分布式計(jì)算體系結(jié)構(gòu)應(yīng)用的開(kāi)發(fā)。本文面向的讀者不是PowerBuilder的未入門者,本文假設(shè)讀者已經(jīng)對(duì)PowerBuilder有了比較全

4、面和深入的了解,如對(duì)PowerScript語(yǔ)言和PowerBuilder中控件的屬性及方法都非常熟悉,但是希望對(duì)PowerBuilder的功能有更深入的了解,特別是相了解分布式計(jì)算體系結(jié)構(gòu)的應(yīng)用的開(kāi)發(fā)。關(guān)于有關(guān)知識(shí)的更深入的介紹請(qǐng)見(jiàn)PowerBuilder的ONLINE BOOK。本文是以下列方式組織的:第一章 什么是分布式計(jì)算結(jié)構(gòu)體系。如果您對(duì)這非常熟悉,可以略過(guò)。第二章 PowerBuilder分布式應(yīng)用編寫入門。本章通過(guò)一些實(shí)際的代碼對(duì)怎樣使用PowerBuilder編寫分布式應(yīng)用程序作了詳細(xì)介紹。第三章 深入了解PowerBuilder應(yīng)用中分布式體系的工作原理。這些都是作者在實(shí)踐中總

5、結(jié)出來(lái)的經(jīng)驗(yàn)和教訓(xùn),有助于您在開(kāi)發(fā)程序的過(guò)程中少走彎路。第四章 應(yīng)用服務(wù)器程序的一個(gè)例子。通過(guò)這個(gè)例程,您可以只修改少量代碼或不修改,即可用于您的應(yīng)用中。第五章 使用PowerBuilder編寫WEB服務(wù)器應(yīng)用程序。作為分布式應(yīng)用的一個(gè)特例,PowerBuilder當(dāng)然支持WEB服務(wù)器應(yīng)用程序的開(kāi)發(fā)工作,本章有助于您在這方面的入門。第一章 什么是分布式計(jì)算體系什么是分布式計(jì)算體系?所謂分布式計(jì)算,指的是在一個(gè)事務(wù)過(guò)程中,整個(gè)事務(wù)的處理分布到多個(gè)實(shí)體上來(lái)完成(在計(jì)算機(jī)網(wǎng)絡(luò)中即多臺(tái)計(jì)算機(jī)),與傳統(tǒng)的集中處理方式不同。所謂分布式計(jì)算體系,指的是一個(gè)使用分布式計(jì)算的方法來(lái)設(shè)計(jì)、編寫和運(yùn)行的應(yīng)用系統(tǒng)。就

6、其本質(zhì)上來(lái)說(shuō),它是和面向?qū)ο缶幊桃粯?,指的是一種程序設(shè)計(jì)和軟件發(fā)布的方式,而與具體的語(yǔ)言和編譯器無(wú)關(guān)。分布式計(jì)算體系從概念上來(lái)說(shuō),基本上可以分為以下幾個(gè)部份:1 數(shù)據(jù)庫(kù)服務(wù)器:數(shù)據(jù)庫(kù)服務(wù)負(fù)責(zé)有關(guān)數(shù)據(jù)庫(kù)的管理工作,包括數(shù)據(jù)庫(kù)的建立,數(shù)據(jù)的組織和查詢,對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)等等與數(shù)據(jù)操作有關(guān)的功能。2 客戶程序:客戶程序主要實(shí)現(xiàn)與用戶進(jìn)行交互的功能,從用戶收集信息和命令,反饋給系統(tǒng);從系統(tǒng)得到數(shù)據(jù)和結(jié)果,通過(guò)顯示或打印機(jī)等其它輸出設(shè)備,反饋給用戶。3 應(yīng)用服務(wù)器:應(yīng)用服務(wù)器是數(shù)據(jù)庫(kù)服務(wù)與客戶程序之間的橋梁,客戶程序通過(guò)應(yīng)用服務(wù)器向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送命令、請(qǐng)求數(shù)據(jù),數(shù)據(jù)庫(kù)服務(wù)器通過(guò)應(yīng)用服務(wù)器響應(yīng)命令、返回?cái)?shù)據(jù)

7、。應(yīng)用服力器在此過(guò)程中對(duì)所有的命令和數(shù)據(jù)進(jìn)行控制,以實(shí)現(xiàn)商業(yè)邏輯。我們可以通過(guò)以下的圖示來(lái)對(duì)分布式計(jì)算體系有一個(gè)更直觀的了解:處理命令后請(qǐng)求數(shù)據(jù)發(fā)送命令前臺(tái)程序應(yīng)用服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器處理數(shù)據(jù)后返回結(jié)果返回?cái)?shù)據(jù)圖1.1 分布式計(jì)算體系工作流示意圖說(shuō)明:在這個(gè)體系結(jié)構(gòu)中,前臺(tái)程序并不直接同數(shù)據(jù)庫(kù)服務(wù)器打交道,而是間接從應(yīng)用服務(wù)器來(lái)獲取數(shù)據(jù)與傳統(tǒng)的C/S結(jié)構(gòu)體系相比,使用分布式計(jì)算體系來(lái)編寫您的應(yīng)用程序,能夠得到什么好處呢?1 分布式計(jì)算體系更安全可靠。首先,客戶端不和數(shù)據(jù)庫(kù)服務(wù)器直接相連,甚至可以不在同一物理網(wǎng)絡(luò)上,充分保證了數(shù)據(jù)的安全性,保證用戶只能通過(guò)客戶端應(yīng)用程序來(lái)存取數(shù)據(jù);其次,只要系統(tǒng)設(shè)

8、置有相應(yīng)權(quán)限管理,用戶就只能進(jìn)行與其權(quán)限相符的操作,從而進(jìn)一步保證系統(tǒng)數(shù)據(jù)的安全性;第三,應(yīng)用服務(wù)器的分布,使得相應(yīng)的商業(yè)邏輯的實(shí)面由不同的人員管理,使系統(tǒng)更具安全性。2 分布式計(jì)算體系對(duì)客戶端的要求更低,可以充分發(fā)揮服務(wù)器的能力。所有的商業(yè)邏輯的實(shí)現(xiàn),都在應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器上實(shí)現(xiàn)了,并且,大量的統(tǒng)計(jì)和計(jì)算工作都是在服務(wù)器上完成,這樣的話,可以充分發(fā)揮服務(wù)器的能力,并且客戶端所要做的工作就只是與用戶進(jìn)行交互,而不要進(jìn)行大量的計(jì)算工作,對(duì)客戶端的要求比較低。3 使用分布式計(jì)算體系,可以很輕易的實(shí)現(xiàn)系統(tǒng)的無(wú)縫升級(jí)。如果商業(yè)邏輯變化了,只要對(duì)應(yīng)用服務(wù)器進(jìn)行修改和升級(jí),而不要到用戶那去升級(jí)其客戶

9、端程序,更方便快捷、省時(shí)省力。當(dāng)然,分布式計(jì)算體系帶給我們的還有更多,上面只是其最主要的幾點(diǎn),但已足以增加我們選擇使用分布式計(jì)算體系來(lái)編寫應(yīng)用系統(tǒng)的信心。第二章 使用PowerBuilder編寫分布式應(yīng)用系統(tǒng)入門第一節(jié) 總體介紹在PowerBuilder的分布式應(yīng)用系統(tǒng)的實(shí)現(xiàn)中,其結(jié)構(gòu)圖如下:客戶端程序應(yīng)用服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器遠(yuǎn)程對(duì)象代理客戶端接口遠(yuǎn)程對(duì)象服務(wù)器接口用戶界面圖2.1 PowerBuilder中分布式應(yīng)用結(jié)構(gòu)示意圖從上圖我們可以看出,分布式應(yīng)用主要由數(shù)據(jù)庫(kù)服務(wù)器、應(yīng)用服務(wù)器(遠(yuǎn)程對(duì)象、服務(wù)器接口)和客戶端程序(遠(yuǎn)程對(duì)象代理、客戶端接口、用戶界面)組成,下面我們將分別介紹各部份。21

10、1數(shù)據(jù)庫(kù)服務(wù)器。數(shù)據(jù)庫(kù)服務(wù)器的主要工作是進(jìn)行數(shù)據(jù)的管理工作,包括數(shù)據(jù)庫(kù)、數(shù)據(jù)存儲(chǔ)過(guò)程、觸發(fā)器等等其它數(shù)據(jù)庫(kù)對(duì)象。目前流行的數(shù)據(jù)庫(kù)服務(wù)器管理系統(tǒng)主要有ORACLE,MS SQL SERVER,SYBASE SQL SERVER等大中型數(shù)據(jù)庫(kù),以及SYBASE ANYWHERE,DBF,BTRIEVE等小型及桌面型數(shù)據(jù)庫(kù)。212 遠(yuǎn)程對(duì)象遠(yuǎn)程對(duì)象指的是存在于應(yīng)用服務(wù)器中,供客戶端程序調(diào)用的對(duì)象;其功能由編寫者確定??蛻舳顺绦蛲ㄟ^(guò)網(wǎng)絡(luò)調(diào)用應(yīng)用服務(wù)器上的遠(yuǎn)程對(duì)象的功能來(lái)實(shí)現(xiàn)它自已的功能;遠(yuǎn)程對(duì)象負(fù)責(zé)與數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行通迅,取得數(shù)據(jù),并將數(shù)據(jù)傳遞給客戶端程序。213服務(wù)器接口服務(wù)器接口的主要功能是負(fù)責(zé)應(yīng)

11、用服務(wù)器與客戶端的網(wǎng)絡(luò)通迅工作,編寫者在設(shè)置好相應(yīng)的網(wǎng)絡(luò)特性如使用的協(xié)議和服務(wù)器端口號(hào)等其它特性后,啟動(dòng)服務(wù)器接口,監(jiān)聽(tīng)客戶端對(duì)服務(wù)器的請(qǐng)求,并通過(guò)遠(yuǎn)程對(duì)象執(zhí)行請(qǐng)求,然后將結(jié)果發(fā)送給客戶端應(yīng)用程序。214客戶端接口客戶端接口的功能主要是負(fù)責(zé)客戶端程序與服務(wù)器接口之間的網(wǎng)絡(luò)通迅工作,客戶端程序通過(guò)客戶端接口與應(yīng)用服務(wù)器相連,并發(fā)送請(qǐng)求到應(yīng)用服務(wù)器,然后接收結(jié)果。215遠(yuǎn)程對(duì)象代理遠(yuǎn)程對(duì)象代理實(shí)際上就是遠(yuǎn)程對(duì)象的一個(gè)定義,客戶端程序通過(guò)此代理來(lái)正確的對(duì)應(yīng)用服務(wù)器發(fā)送請(qǐng)求并正確的接收返回結(jié)果。即客戶端程序通過(guò)遠(yuǎn)程對(duì)象代理來(lái)獲知應(yīng)用服務(wù)器上所提供的服務(wù)的類型,從而正確使用應(yīng)用服務(wù)器。216用戶界面用戶

12、界面主要存在于客戶端程序中,主要是用于與用戶的交互??蛻舳顺绦蛲ㄟ^(guò)用戶界面接收用戶的請(qǐng)求,執(zhí)行相應(yīng)的操作,然后將結(jié)果通過(guò)用戶界面以一定方式展示給用戶。第二節(jié) PowerBuilder中分布式應(yīng)用的實(shí)現(xiàn)本節(jié)的主要內(nèi)容是介紹怎樣來(lái)建立應(yīng)用服務(wù)器應(yīng)用,以及怎樣將客戶端程序連接到應(yīng)用服務(wù)器上。221應(yīng)用服務(wù)器的實(shí)現(xiàn)1 定義一服務(wù)器接口全局對(duì)象TransPort g_Server2 設(shè)置好服務(wù)器接口對(duì)象的屬性g_Server = CREATE TRANSPORTg_Server.Driver = “WINSOCK” /使用的協(xié)議g_Server.Application = “9988” /服務(wù)器端口號(hào)詳

13、細(xì)屬性說(shuō)明請(qǐng)見(jiàn)PowerBuilder中的幫助 TRANSPORT OBJECT3 調(diào)用服務(wù)器接口對(duì)象的函數(shù),運(yùn)行應(yīng)用服務(wù)器if 0 <> g_Server.Listen() then /failuerelse /successend if4 在應(yīng)用服務(wù)器退出之前,調(diào)用服務(wù)器接口對(duì)象的函數(shù),退出應(yīng)用服務(wù)器監(jiān)聽(tīng)程序g_Server.StopListening()DESTROY g_Server222客戶端程序?qū)崿F(xiàn)1 定義一connection類型的變量(客戶端連接對(duì)象):CONNECTION g_connection2 設(shè)置好客戶端連接對(duì)象的各項(xiàng)屬性:g_connection.Dri

14、ver = “WINSOCK”g_connection.Location = “主機(jī)名” /服務(wù)器域名或IP地址g_connection.Application = “9988” /服務(wù)器端口號(hào)3 調(diào)用成員函數(shù),連接應(yīng)用服務(wù)器:g_connection.ConnectToServer()4 在使用完成后,斷開(kāi)與應(yīng)用服務(wù)器的連接:g_connection.DisconnectServer()第三節(jié) 遠(yuǎn)程對(duì)象及代理上節(jié)我們?cè)敿?xì)介紹了怎樣建立應(yīng)用服務(wù)器程序和客戶端程序,以及怎樣將客戶端連接到應(yīng)用服務(wù)器上,但是應(yīng)用服務(wù)器可以提供什么樣的服務(wù)呢?客戶端程序又是怎樣去調(diào)用應(yīng)用服務(wù)器提供的服務(wù)的呢?這就是我

15、們這節(jié)要解決的問(wèn)題。231應(yīng)用服務(wù)器可以提供的服務(wù)應(yīng)用服務(wù)器可以提供的服務(wù)就是遠(yuǎn)程對(duì)象。我們先來(lái)明確一個(gè)問(wèn)題,在PowerBuilder中,到底什么是遠(yuǎn)程對(duì)象呢?簡(jiǎn)單的說(shuō),遠(yuǎn)程對(duì)象就是一種不可視的用戶自定義對(duì)象,所有其提供的聲名為公有的函數(shù)和成員變量都可以被客戶端程序調(diào)用和訪問(wèn)。出于顯而易見(jiàn)的原因,遠(yuǎn)程對(duì)象與一般的不可視用戶對(duì)象相比,還要遵循以下規(guī)則:1 遠(yuǎn)程對(duì)象不能為自動(dòng)生成對(duì)象,而只能使用CREATE來(lái)生成。2 遠(yuǎn)程對(duì)象的公有函數(shù)的參數(shù)不能為指針。3 遠(yuǎn)程對(duì)象的公有函數(shù)的參數(shù)的類型可能為PowerBuilder支持的所有簡(jiǎn)單類型和結(jié)構(gòu),但不能為PowerBuilder內(nèi)部對(duì)象如DATAST

16、ORE。4 遠(yuǎn)程對(duì)象的公有函數(shù)的參數(shù)可以為用戶自定義的不可視對(duì)象。5 上述對(duì)參數(shù)的描述同樣適應(yīng)于返回值。6 遠(yuǎn)程對(duì)象的公有函數(shù)中不能包含有對(duì)可視對(duì)象操作的代碼。只要是符合上述條件的用戶自定義不可視對(duì)象,都可以作為應(yīng)用服務(wù)器的服務(wù)的提供載體,客戶端程序可以通過(guò)遠(yuǎn)程對(duì)象代理來(lái)調(diào)用這些對(duì)象的函數(shù)或使用其成員。定義應(yīng)用服務(wù)器的服務(wù)實(shí)際上就是在服務(wù)器應(yīng)用中定義遠(yuǎn)程對(duì)象。232客戶端程序存取應(yīng)用服務(wù)器提供的服務(wù)客戶端程序是通過(guò)遠(yuǎn)程對(duì)象代理來(lái)存取應(yīng)用服務(wù)器提供的服務(wù)的。所謂遠(yuǎn)程對(duì)象代理,就是具有遠(yuǎn)程對(duì)象所有公有成員和函數(shù)定義的對(duì)象,它描述了遠(yuǎn)程對(duì)象所能提供的服務(wù)。我們可以使用PROXY類型的工程來(lái)生成遠(yuǎn)程對(duì)

17、象的相應(yīng)遠(yuǎn)程對(duì)象代理。如有遠(yuǎn)程對(duì)象代理uo_timeserver 含如下成員函數(shù):function datatime getdate(),在客戶端如何調(diào)用此函數(shù)呢?如下:/客戶端接口對(duì)象為 g_connectionuo_timeserver timeserver /定義一遠(yuǎn)程對(duì)象代理對(duì)象g_connection.CreateInstance(uo_timeserver) /建立遠(yuǎn)程對(duì)象實(shí)例messageBox(服務(wù)器時(shí)間,uo_timeserver.getdate() /調(diào)用遠(yuǎn)程對(duì)象的函數(shù)注意,上面MessageBox顯示的時(shí)間是服務(wù)器的時(shí)間。如上所述,我們歸納出客戶端調(diào)用應(yīng)用服務(wù)器的服務(wù)的步

18、驟如下:1 定義相應(yīng)的遠(yuǎn)程對(duì)象代理對(duì)象2 調(diào)用客戶端接口對(duì)象connection的CreateInstance函數(shù)建立遠(yuǎn)程對(duì)象實(shí)例3 通過(guò)遠(yuǎn)程對(duì)象代理對(duì)象調(diào)用遠(yuǎn)程對(duì)象的函數(shù)或存取其數(shù)據(jù)成員233了解應(yīng)用服務(wù)器的會(huì)話現(xiàn)在我們已經(jīng)知道該怎樣建立應(yīng)用服務(wù)器、怎樣通過(guò)應(yīng)用服務(wù)器提供服務(wù)了;也知道怎樣在客戶端程序來(lái)使用這些服務(wù)。思考如下代碼:在應(yīng)用服務(wù)器端應(yīng)用的OPEN事件中:/設(shè)置好SQLCA的各項(xiàng)屬性。connect using sqlca;在應(yīng)用服務(wù)器端有一遠(yuǎn)程對(duì)象,其中有一段代碼:datastore dsUserdsUser = create datastroedsUser.dataobject

19、=dw_userdsUser.SetTransObject(sqlca)dsUser.Retrieve()MessageBox(信息,dsUser.RowCount()在預(yù)覽dw_user數(shù)據(jù)窗口時(shí),共有100行數(shù)據(jù),那么上述代碼運(yùn)行結(jié)果如何呢?結(jié)果顯示,dsUser.RowCount() = 0 !原來(lái),每當(dāng)一個(gè)客戶端程序與應(yīng)用服務(wù)器建立一連接時(shí),應(yīng)用服務(wù)器即為此連接啟動(dòng)一獨(dú)立的會(huì)話(SESSION),此會(huì)話具有如下特點(diǎn):1 會(huì)話具有單獨(dú)的地址空間。對(duì)于會(huì)話來(lái)說(shuō),其它會(huì)話或服務(wù)器主會(huì)話都是不可見(jiàn)的。2 會(huì)話生命期從服務(wù)器的ConnectionBegin事件開(kāi)始,到ConnectionEnd事

20、件結(jié)束。3 會(huì)話具有單獨(dú)的全局對(duì)象的拷貝,就是說(shuō)每一會(huì)話都具有其自已獨(dú)立的全局變量。如上所述,我們就會(huì)知道,會(huì)話中的SQLCA對(duì)象和應(yīng)用服務(wù)器中的SQLCA變量不同,前面我們所說(shuō)的代碼是不會(huì)成功的。TIPS:1 可以在ConnectionBegin事件中初始化會(huì)話的全局變量2 可以在ConnectionEnd事件中處理會(huì)話的結(jié)束工作,比如注銷動(dòng)態(tài)分配的對(duì)象第三章 深入了解PowerBuilder中的分布式應(yīng)用體系本章主要是就PowerBuilder中分布式應(yīng)用的一些比較高級(jí)的問(wèn)題進(jìn)行一些討論,主要涉及到的問(wèn)題有三個(gè)個(gè):1 如何在客戶端即會(huì)話之間進(jìn)行通迅。2 如何控制用戶對(duì)應(yīng)用服務(wù)器的登錄。3

21、異步遠(yuǎn)程調(diào)用及推(PUSH)技術(shù)31分布式應(yīng)用中客戶端之間的通迅在第二章中我們知道,會(huì)話之間是相互獨(dú)立的,采用傳統(tǒng)的方法如全局變量來(lái)進(jìn)行會(huì)話間通迅是行不通的,還有什么方法呢?311文件或是數(shù)據(jù)庫(kù)中的表。步驟如下:1 在遠(yuǎn)程對(duì)象中將要交換的數(shù)據(jù)寫入到文件或表中。2 遠(yuǎn)程對(duì)角可以在需要的時(shí)候從文件或是表中讀入需要的數(shù)據(jù)。可以看出,使用文件或表來(lái)存放會(huì)話間共同的數(shù)據(jù),實(shí)現(xiàn)會(huì)話間通迅是可以實(shí)現(xiàn)的,但是,它具有以下幾個(gè)缺點(diǎn):1 需要自已解決會(huì)話間并行沖突的問(wèn)題,決定何時(shí)讀何時(shí)寫數(shù)據(jù)2 要進(jìn)行磁盤讀寫或網(wǎng)絡(luò)存取,速度慢,不適合大用戶量的應(yīng)用最好的方法,當(dāng)然是在內(nèi)存在建立一共享內(nèi)存區(qū)。下面介紹的方法就是這種

22、類型。312共享對(duì)象(SharedObject)從PowerBuilder 6.0開(kāi)始,系統(tǒng)提供了一種叫做共享對(duì)象的技術(shù),從名稱上我們就知道,這種技術(shù)提供了一種會(huì)話間共享對(duì)象的方法。下面講述在PowerBuilder中怎樣使用這一技術(shù):1 定義并完成一遠(yuǎn)程對(duì)象(以u(píng)o_sharedObject為例),并生成相應(yīng)遠(yuǎn)程對(duì)象代理2 在服務(wù)器應(yīng)用的OPEN事件中加入以下代碼:SharedObjectRegister(uo_sharedObject,sharedObject)3 在服務(wù)器應(yīng)用的CLOSE事件中加入以下代碼:SharedObjectUnregister(sharedObject)4 在客戶

23、端程序要使用共享對(duì)象的代碼處加入:uo_sharedObject sharedObjectSharedObjectGet(sharedObject,sharedObject)/調(diào)用sharedObject的函數(shù)或存取其屬性上述代碼都做了些什么呢?其功能的實(shí)現(xiàn)主要通過(guò)幾個(gè)函數(shù),下面一一講解:一SharedObjectRegister函數(shù)在調(diào)用所有其它函數(shù)之前,一定要調(diào)用此函數(shù)。此函數(shù)的功能是在應(yīng)用服務(wù)器上注冊(cè)了一個(gè)共享對(duì)象,即:在應(yīng)用服務(wù)器上啟動(dòng)了一個(gè)獨(dú)立會(huì)話;在此會(huì)話空間中建立一個(gè)指定類型的共享對(duì)象。二SharedObjectGet函數(shù)此函數(shù)取得一個(gè)已經(jīng)注冊(cè)了的共享對(duì)象的引用。通過(guò)此引用來(lái)調(diào)用

24、共享對(duì)象提供的函數(shù)或存取其數(shù)據(jù)成員。三SharedObjectUnregister函數(shù)此函數(shù)與SharedObjectRegister函數(shù)的功能剛好相反,其功能為注銷一注冊(cè)過(guò)的共享對(duì)象,即:注銷此共享對(duì)象;結(jié)束與此共享對(duì)象相關(guān)的會(huì)話。共享對(duì)象具有以下特性:1 共享對(duì)象是一個(gè)遠(yuǎn)程對(duì)象,它具有遠(yuǎn)程對(duì)象的所有特性2 共享對(duì)象運(yùn)行在一獨(dú)立的會(huì)話中,具有會(huì)話的所有特性3 共享對(duì)象的會(huì)話開(kāi)始于對(duì)象的構(gòu)造事件,結(jié)束于其析構(gòu)事件TIPS1 共享對(duì)象的初始化可以放在其構(gòu)造事件中2 共享對(duì)象的結(jié)束代碼可以放在其析構(gòu)事件中32用戶登錄應(yīng)用服務(wù)器的控制客戶程序在使用應(yīng)用服務(wù)器提供的服務(wù)之前,總是要先連接到應(yīng)用服務(wù)器。

25、在實(shí)際應(yīng)用中,一般情況下都要對(duì)連接的用戶進(jìn)行核對(duì),以驗(yàn)證其身份,只有身份合法的用戶才被許可連接到應(yīng)用服務(wù)器上。在PowerBuilder中,系統(tǒng)提供了一系統(tǒng)手段來(lái)支持這一功能。321服務(wù)器應(yīng)用的ConnectionBegin事件事件的參數(shù):string userId /客戶端用于登錄到應(yīng)用服務(wù)器的用戶名connection.useridstring password /客戶端用于登錄到應(yīng)用服務(wù)器的密碼 connection.passwordstring connectstring /其它可以附帶的信息 connection.connectString事件的返回值:ConnectPrivilege! /普通用戶,允許

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論