版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用PowerBuilder 6.0开发分布式三层应用程序作者:陈俊明本文档是在PowerBuilder 6.0的基础上产生。所有内容均为实践中所得,所有代码在程序中均通过(机器配置:P200/64M/6.4G)。在文章的最后,还有一个通用的服务器框架应用程序,您可对服务器程序只加入您的分布对象即可完成服务器程序。由于水平所限,错误在所难免,还请大家指正,我的EMAIL是CHENJM163.NET,发邮件时请在主题中加入POWERBUILDER字样。概述只要有过MIS程序编程经验的程序员都知道,一般情况下,整个MIS应用系统分为两部份,即分为数据库服务器和前台程序(即平时我们所说的C/S结构)
2、。在这种体系统结构下,应用系统的逻辑实现几乎都是通过前台程序即客户端来体现,少量保存在数据库服务器中(以存储过程的形式),在业务和管理形式没有变化的情况下,这种结构工作得非常好。可是当业务逻辑发生变化时,我们就需要对客户端程序进行修改和重新编译,并把新程序发布给用户,有时(大多数时候)还要对客户重新进行培训。可以说,C/S体系结构不能很好的适应未来系统的发展。正因为此,在软件界逐渐形成另一种应用体系结构即数据库服务器、应用服务器和前台程序。在这种结构下,几乎所有的商业逻辑都在应用服务器中实现,前台程序只是通过应用服务器提供的接口来实现其功能。修改商业逻辑,只需要修改应用服务器程序,只要保持对前
3、台程序的接口不发生变化,前台程序可以不用作任何修改即可实现功能的转变,并体现新的商业逻辑,其优点是显而易见的。PowerBuilder 6.0是当今用于与数据库有关的应用系统开发的首选工具,它支持几乎所有当前流行的数据库服务器,具有可视化的面向对象编程环境,使其非常易于使用。从5.0版本开始,PowerBuilder支持C/S体系结构和分布式计算体系结构的应用。本文的主要目的是通过对用PowerBuilder开发分布式计算体系结构应用的学习,使读者能够基本掌握分布式计算体系结构应用的开发。本文面向的读者不是PowerBuilder的未入门者,本文假设读者已经对PowerBuilder有了比较全
4、面和深入的了解,如对PowerScript语言和PowerBuilder中控件的属性及方法都非常熟悉,但是希望对PowerBuilder的功能有更深入的了解,特别是相了解分布式计算体系结构的应用的开发。关于有关知识的更深入的介绍请见PowerBuilder的ONLINE BOOK。本文是以下列方式组织的:第一章 什么是分布式计算结构体系。如果您对这非常熟悉,可以略过。第二章 PowerBuilder分布式应用编写入门。本章通过一些实际的代码对怎样使用PowerBuilder编写分布式应用程序作了详细介绍。第三章 深入了解PowerBuilder应用中分布式体系的工作原理。这些都是作者在实践中总
5、结出来的经验和教训,有助于您在开发程序的过程中少走弯路。第四章 应用服务器程序的一个例子。通过这个例程,您可以只修改少量代码或不修改,即可用于您的应用中。第五章 使用PowerBuilder编写WEB服务器应用程序。作为分布式应用的一个特例,PowerBuilder当然支持WEB服务器应用程序的开发工作,本章有助于您在这方面的入门。第一章 什么是分布式计算体系什么是分布式计算体系?所谓分布式计算,指的是在一个事务过程中,整个事务的处理分布到多个实体上来完成(在计算机网络中即多台计算机),与传统的集中处理方式不同。所谓分布式计算体系,指的是一个使用分布式计算的方法来设计、编写和运行的应用系统。就
6、其本质上来说,它是和面向对象编程一样,指的是一种程序设计和软件发布的方式,而与具体的语言和编译器无关。分布式计算体系从概念上来说,基本上可以分为以下几个部份:1 数据库服务器:数据库服务负责有关数据库的管理工作,包括数据库的建立,数据的组织和查询,对数据进行统计等等与数据操作有关的功能。2 客户程序:客户程序主要实现与用户进行交互的功能,从用户收集信息和命令,反馈给系统;从系统得到数据和结果,通过显示或打印机等其它输出设备,反馈给用户。3 应用服务器:应用服务器是数据库服务与客户程序之间的桥梁,客户程序通过应用服务器向数据库服务器发送命令、请求数据,数据库服务器通过应用服务器响应命令、返回数据
7、。应用服力器在此过程中对所有的命令和数据进行控制,以实现商业逻辑。我们可以通过以下的图示来对分布式计算体系有一个更直观的了解:处理命令后请求数据发送命令前台程序应用服务器数据库服务器处理数据后返回结果返回数据图1.1 分布式计算体系工作流示意图说明:在这个体系结构中,前台程序并不直接同数据库服务器打交道,而是间接从应用服务器来获取数据与传统的C/S结构体系相比,使用分布式计算体系来编写您的应用程序,能够得到什么好处呢?1 分布式计算体系更安全可靠。首先,客户端不和数据库服务器直接相连,甚至可以不在同一物理网络上,充分保证了数据的安全性,保证用户只能通过客户端应用程序来存取数据;其次,只要系统设
8、置有相应权限管理,用户就只能进行与其权限相符的操作,从而进一步保证系统数据的安全性;第三,应用服务器的分布,使得相应的商业逻辑的实面由不同的人员管理,使系统更具安全性。2 分布式计算体系对客户端的要求更低,可以充分发挥服务器的能力。所有的商业逻辑的实现,都在应用服务器和数据库服务器上实现了,并且,大量的统计和计算工作都是在服务器上完成,这样的话,可以充分发挥服务器的能力,并且客户端所要做的工作就只是与用户进行交互,而不要进行大量的计算工作,对客户端的要求比较低。3 使用分布式计算体系,可以很轻易的实现系统的无缝升级。如果商业逻辑变化了,只要对应用服务器进行修改和升级,而不要到用户那去升级其客户
9、端程序,更方便快捷、省时省力。当然,分布式计算体系带给我们的还有更多,上面只是其最主要的几点,但已足以增加我们选择使用分布式计算体系来编写应用系统的信心。第二章 使用PowerBuilder编写分布式应用系统入门第一节 总体介绍在PowerBuilder的分布式应用系统的实现中,其结构图如下:客户端程序应用服务器数据库服务器远程对象代理客户端接口远程对象服务器接口用户界面图2.1 PowerBuilder中分布式应用结构示意图从上图我们可以看出,分布式应用主要由数据库服务器、应用服务器(远程对象、服务器接口)和客户端程序(远程对象代理、客户端接口、用户界面)组成,下面我们将分别介绍各部份。21
10、1数据库服务器。数据库服务器的主要工作是进行数据的管理工作,包括数据库、数据存储过程、触发器等等其它数据库对象。目前流行的数据库服务器管理系统主要有ORACLE,MS SQL SERVER,SYBASE SQL SERVER等大中型数据库,以及SYBASE ANYWHERE,DBF,BTRIEVE等小型及桌面型数据库。212 远程对象远程对象指的是存在于应用服务器中,供客户端程序调用的对象;其功能由编写者确定。客户端程序通过网络调用应用服务器上的远程对象的功能来实现它自已的功能;远程对象负责与数据库服务器进行通迅,取得数据,并将数据传递给客户端程序。213服务器接口服务器接口的主要功能是负责应
11、用服务器与客户端的网络通迅工作,编写者在设置好相应的网络特性如使用的协议和服务器端口号等其它特性后,启动服务器接口,监听客户端对服务器的请求,并通过远程对象执行请求,然后将结果发送给客户端应用程序。214客户端接口客户端接口的功能主要是负责客户端程序与服务器接口之间的网络通迅工作,客户端程序通过客户端接口与应用服务器相连,并发送请求到应用服务器,然后接收结果。215远程对象代理远程对象代理实际上就是远程对象的一个定义,客户端程序通过此代理来正确的对应用服务器发送请求并正确的接收返回结果。即客户端程序通过远程对象代理来获知应用服务器上所提供的服务的类型,从而正确使用应用服务器。216用户界面用户
12、界面主要存在于客户端程序中,主要是用于与用户的交互。客户端程序通过用户界面接收用户的请求,执行相应的操作,然后将结果通过用户界面以一定方式展示给用户。第二节 PowerBuilder中分布式应用的实现本节的主要内容是介绍怎样来建立应用服务器应用,以及怎样将客户端程序连接到应用服务器上。221应用服务器的实现1 定义一服务器接口全局对象TransPort g_Server2 设置好服务器接口对象的属性g_Server = CREATE TRANSPORTg_Server.Driver = “WINSOCK” /使用的协议g_Server.Application = “9988” /服务器端口号详
13、细属性说明请见PowerBuilder中的帮助 TRANSPORT OBJECT3 调用服务器接口对象的函数,运行应用服务器if 0 <> g_Server.Listen() then /failuerelse /successend if4 在应用服务器退出之前,调用服务器接口对象的函数,退出应用服务器监听程序g_Server.StopListening()DESTROY g_Server222客户端程序实现1 定义一connection类型的变量(客户端连接对象):CONNECTION g_connection2 设置好客户端连接对象的各项属性:g_connection.Dri
14、ver = “WINSOCK”g_connection.Location = “主机名” /服务器域名或IP地址g_connection.Application = “9988” /服务器端口号3 调用成员函数,连接应用服务器:g_connection.ConnectToServer()4 在使用完成后,断开与应用服务器的连接:g_connection.DisconnectServer()第三节 远程对象及代理上节我们详细介绍了怎样建立应用服务器程序和客户端程序,以及怎样将客户端连接到应用服务器上,但是应用服务器可以提供什么样的服务呢?客户端程序又是怎样去调用应用服务器提供的服务的呢?这就是我
15、们这节要解决的问题。231应用服务器可以提供的服务应用服务器可以提供的服务就是远程对象。我们先来明确一个问题,在PowerBuilder中,到底什么是远程对象呢?简单的说,远程对象就是一种不可视的用户自定义对象,所有其提供的声名为公有的函数和成员变量都可以被客户端程序调用和访问。出于显而易见的原因,远程对象与一般的不可视用户对象相比,还要遵循以下规则:1 远程对象不能为自动生成对象,而只能使用CREATE来生成。2 远程对象的公有函数的参数不能为指针。3 远程对象的公有函数的参数的类型可能为PowerBuilder支持的所有简单类型和结构,但不能为PowerBuilder内部对象如DATAST
16、ORE。4 远程对象的公有函数的参数可以为用户自定义的不可视对象。5 上述对参数的描述同样适应于返回值。6 远程对象的公有函数中不能包含有对可视对象操作的代码。只要是符合上述条件的用户自定义不可视对象,都可以作为应用服务器的服务的提供载体,客户端程序可以通过远程对象代理来调用这些对象的函数或使用其成员。定义应用服务器的服务实际上就是在服务器应用中定义远程对象。232客户端程序存取应用服务器提供的服务客户端程序是通过远程对象代理来存取应用服务器提供的服务的。所谓远程对象代理,就是具有远程对象所有公有成员和函数定义的对象,它描述了远程对象所能提供的服务。我们可以使用PROXY类型的工程来生成远程对
17、象的相应远程对象代理。如有远程对象代理uo_timeserver 含如下成员函数:function datatime getdate(),在客户端如何调用此函数呢?如下:/客户端接口对象为 g_connectionuo_timeserver timeserver /定义一远程对象代理对象g_connection.CreateInstance(uo_timeserver) /建立远程对象实例messageBox(服务器时间,uo_timeserver.getdate() /调用远程对象的函数注意,上面MessageBox显示的时间是服务器的时间。如上所述,我们归纳出客户端调用应用服务器的服务的步
18、骤如下:1 定义相应的远程对象代理对象2 调用客户端接口对象connection的CreateInstance函数建立远程对象实例3 通过远程对象代理对象调用远程对象的函数或存取其数据成员233了解应用服务器的会话现在我们已经知道该怎样建立应用服务器、怎样通过应用服务器提供服务了;也知道怎样在客户端程序来使用这些服务。思考如下代码:在应用服务器端应用的OPEN事件中:/设置好SQLCA的各项属性。connect using sqlca;在应用服务器端有一远程对象,其中有一段代码:datastore dsUserdsUser = create datastroedsUser.dataobject
19、=dw_userdsUser.SetTransObject(sqlca)dsUser.Retrieve()MessageBox(信息,dsUser.RowCount()在预览dw_user数据窗口时,共有100行数据,那么上述代码运行结果如何呢?结果显示,dsUser.RowCount() = 0 !原来,每当一个客户端程序与应用服务器建立一连接时,应用服务器即为此连接启动一独立的会话(SESSION),此会话具有如下特点:1 会话具有单独的地址空间。对于会话来说,其它会话或服务器主会话都是不可见的。2 会话生命期从服务器的ConnectionBegin事件开始,到ConnectionEnd事
20、件结束。3 会话具有单独的全局对象的拷贝,就是说每一会话都具有其自已独立的全局变量。如上所述,我们就会知道,会话中的SQLCA对象和应用服务器中的SQLCA变量不同,前面我们所说的代码是不会成功的。TIPS:1 可以在ConnectionBegin事件中初始化会话的全局变量2 可以在ConnectionEnd事件中处理会话的结束工作,比如注销动态分配的对象第三章 深入了解PowerBuilder中的分布式应用体系本章主要是就PowerBuilder中分布式应用的一些比较高级的问题进行一些讨论,主要涉及到的问题有三个个:1 如何在客户端即会话之间进行通迅。2 如何控制用户对应用服务器的登录。3
21、异步远程调用及推(PUSH)技术31分布式应用中客户端之间的通迅在第二章中我们知道,会话之间是相互独立的,采用传统的方法如全局变量来进行会话间通迅是行不通的,还有什么方法呢?311文件或是数据库中的表。步骤如下:1 在远程对象中将要交换的数据写入到文件或表中。2 远程对角可以在需要的时候从文件或是表中读入需要的数据。可以看出,使用文件或表来存放会话间共同的数据,实现会话间通迅是可以实现的,但是,它具有以下几个缺点:1 需要自已解决会话间并行冲突的问题,决定何时读何时写数据2 要进行磁盘读写或网络存取,速度慢,不适合大用户量的应用最好的方法,当然是在内存在建立一共享内存区。下面介绍的方法就是这种
22、类型。312共享对象(SharedObject)从PowerBuilder 6.0开始,系统提供了一种叫做共享对象的技术,从名称上我们就知道,这种技术提供了一种会话间共享对象的方法。下面讲述在PowerBuilder中怎样使用这一技术:1 定义并完成一远程对象(以uo_sharedObject为例),并生成相应远程对象代理2 在服务器应用的OPEN事件中加入以下代码:SharedObjectRegister(uo_sharedObject,sharedObject)3 在服务器应用的CLOSE事件中加入以下代码:SharedObjectUnregister(sharedObject)4 在客户
23、端程序要使用共享对象的代码处加入:uo_sharedObject sharedObjectSharedObjectGet(sharedObject,sharedObject)/调用sharedObject的函数或存取其属性上述代码都做了些什么呢?其功能的实现主要通过几个函数,下面一一讲解:一SharedObjectRegister函数在调用所有其它函数之前,一定要调用此函数。此函数的功能是在应用服务器上注册了一个共享对象,即:在应用服务器上启动了一个独立会话;在此会话空间中建立一个指定类型的共享对象。二SharedObjectGet函数此函数取得一个已经注册了的共享对象的引用。通过此引用来调用
24、共享对象提供的函数或存取其数据成员。三SharedObjectUnregister函数此函数与SharedObjectRegister函数的功能刚好相反,其功能为注销一注册过的共享对象,即:注销此共享对象;结束与此共享对象相关的会话。共享对象具有以下特性:1 共享对象是一个远程对象,它具有远程对象的所有特性2 共享对象运行在一独立的会话中,具有会话的所有特性3 共享对象的会话开始于对象的构造事件,结束于其析构事件TIPS1 共享对象的初始化可以放在其构造事件中2 共享对象的结束代码可以放在其析构事件中32用户登录应用服务器的控制客户程序在使用应用服务器提供的服务之前,总是要先连接到应用服务器。
25、在实际应用中,一般情况下都要对连接的用户进行核对,以验证其身份,只有身份合法的用户才被许可连接到应用服务器上。在PowerBuilder中,系统提供了一系统手段来支持这一功能。321服务器应用的ConnectionBegin事件事件的参数:string userId /客户端用于登录到应用服务器的用户名connection.useridstring password /客户端用于登录到应用服务器的密码 connection.passwordstring connectstring /其它可以附带的信息 connection.connectString事件的返回值:ConnectPrivilege! /普通用户,允许
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度风力发电设备采购合同担保服务3篇
- 2024版学校运动场施工合作合同版B版
- 2024年食材供应链管理合同2篇
- 2024年版:建筑消防排烟系统施工合同
- 2024铁路工程项目信息化建设合同样本3篇
- 2024年足浴城加盟协议3篇
- 2025年度窗帘行业发展趋势研究与预测合同3篇
- 工厂供配电技术
- 2024版建筑木工班组劳务合作协议
- 2025年度锅炉设备节能评估与咨询服务合同3篇
- 新起点,新发展心得体会
- 区域分析与规划课件
- 第11章-胶体化学
- 深圳大学学校简介课件
- 财经基础知识课件
- 技术支持资料投标书
- 静压管桩施工技术交底
- 绿植花卉租摆及园林养护服务 投标方案(技术方案)
- 干细胞商业计划书
- 从教走向学:在课堂上落实核心素养
- 美世国际职位评估体系IPE3.0使用手册
评论
0/150
提交评论