分布式PowerBuilder设计

原创 2001年07月03日 13:28:00

分布式PowerBuilder设计


张健姿
01-6-22 下午 03:09:10


1996年6月推出的Power-Builder 5.0,增加了许多新特性,其中较为引人注目的是分布式PowerBuilder的计算方式(Distributing PowerBuilder)。
所谓分布式计算方式和三级系统结构,是近年来提出的一种新的计算方式,这就是在传统的客户机/服务器两级结构中再增加一个称作应用服务器的中间级,用以执行复杂的商业逻辑计算。传统的两级结构中商业逻辑一般是放在客户端,少量的则以存储过程的形式放在数据库服务器中。将商业逻辑从其他两级中独立出来,将更适应于日益复杂化和日益变化的商业逻辑的需要,从而带来了开发、维护和使用时的便利。虽然三级结构在传统的数据库领域还没有被人们广泛接受,但在Internet&Intranet领域,人们已开始大量使用这种分布式的计算方式了:在Intranet中,系统至少就是由浏览器(客户机)、Web服务器(应用服务器)、数据库这样的三级结构组成。而PowerBuilder支持这种分布式的计算方式,这使得我们使用PowerBuilder开发Internet应用成为了可能。
所谓分布式PowerBuilder的实现就是在客户端远程地初始化一个在服务器端的用户自定义对象,并且调用这一对象的属性和函数。
分布式PowerBuilder中的新概念
服务器应用:在以往的PowerBuilder版本中,Power-Builder应用是作为客户机/服务器体系结构中的客户端应用提交的,在分布式PowerBuilder中引入了服务器应用这个概念。这个应用包括了不可视的用户对象,并被客户端应用调用,这些用户对象被称作远过程对象。这种调用可以是跨进程或跨硬件平台的。分布式PowerBuilder在服务器端有一个PowerScript对象Transport来监听客户端对过程调用的需求,而这个服务器端的应用也可以同一般传统的客户机/服务器应用的客户端或远程的客户端应用一样来调用另外的PowerBuilder服务器应用。
客户应用:PowerBuilder客户应用是用以调用远端对象的部分。分布式PowerBuilder应用包括了一个新的对象,称作Connection,用以连接PowerBuilder服务器应用。当同服务器建立连接后,客户应用将像调用本地的不可视用户对象一样调用远程对象。
远程对象:与其他的不可视用户对象类同。一个远程对象包含了用PowerScript编写的商业逻辑,放在服务器端,作为不可视用户对象的特例,远程对象可以引用各种不可视的函数和数据库的指令,如使用DataWindow的不可视形式DataStore来实现对数据库访问的封装等。远程对象像是一个过程或函数的调用,并支持参数传递和返回结果,支持除对象数据类型以外的其他所有类型。
传输对象:是服务器端用以接收客户请求的特殊连接对象。当使用create transport命令创建一个传输实例后,该对象以对象的属性中所定义的协议监听接收客户的请求。这个对象的属性包括通讯驱动名称、通讯协议类型、超时协议等,得到和设定这些属性的方法同PowerBuilder的其他对象如transaction等一样。
连接对象:是客户端发送请求的客户端的对象。当使用create transport创建一个连接对象时,本对象的Connect To Server函数执行同服务器的连接,通讯方式如通讯名称、协议等由连接对象的属性来决定。
对象存储代理:一种存储用户对象的新选择。存储代理保存对象的远程名称并生成内部代码以供远程调用。当connec-tion对象与之建立连接后,该对象就能够用以远程调用。
新的PowerBuilder对象是nonvisualobject和structure的继承类,它们的关系如下:
nonvisualobject
connectobject(新)
connection(新)
transport(新)
remoteobject(新)
structure
connectioninfo(新)
设计一个分布式PowerBuilder应用举例
一、服务器端应用
首先您需要创建一个服务器端的应用。目前所有的分布式PowerBuilder服务器应用都应当运行在32位平台上(Windows NT或Windows 95)。这个应用需有三个组成部分:一、用户自定义的对象类;二、这个对象类在服务器端的代理;三、一个传输对象,这个传输对象并不被调用,它只是用以监听从网络上的客户一端的调用。
·创建用户对象
我们首先定义一个服务器端的对象类,它的步骤如下:
1.点击用户对象图标。
2.点击new按钮。
3.在NewUserObject对话框中选择Class组中的Custom类型。
4.在进入用户对象的设计中,选择Declare|User Object function菜单项。
5.点击new按钮。
6.函数起名为"of-my-message"。
7.函数的返回值为string型,无参数传递。
8.在函数的Script中写入:Return "Hello World"
9.关闭函数画笔,将这一用户对象存储为uo-my-object"
·设置代理对象
这个代理对象在客户端当作一个类被引用,但它首先应在服务器端创建,创建代理对象的步骤如下:
1.打开刚创建的用户对象uo-my-object。
2.在用户区点击鼠标右键。
3.在弹出菜单中选择"set proxy name"。
4.在代理名称的输入域输入"uo-proxy-my-object",点击OK按钮。
5.存储"uo-my-object"对象。
*这时如果您在Library画笔中看当前的PBL库,您将看到新创建的代理对象。
·设置传输对象
这个对象的工作方式与PowerBuilder中的事务对象(transaction)很相似,它是同客户端建立连接的结构。设置过程如下:
1.声明一个全局的transport变量。如:
transport gt-transport
2.在application的Open事件中写下:
gt-transport=Create transport
gt-transport.driver="namedpipes"
gt-transport.location="."
gt-transport.application="my-dpbserv"
gt-transport.options=""
gt-transport.Listen()
二、客户端的应用
在客户端的应用有四个组成部分:一、得到在Server端创建的代理对象,将其放入客户端的对象库中;二、连接服务器端的应用,这一步骤即是创建一个连接对象(connect)的实例;三、创建代理对象,设置它的连接(用SetConnec-tions()连接到Connect对象上);四、调用远过程对象,测试这一连接。
·将代理对象放入客户端的对象库中
这里您有以下两种方法实现:一是拷贝"uo-proxy-my-object"这一代理对象到客户端的应用对象库中;另一个办法是将服务器端"uo-proxy-my-object"这个对象所在的对象库也放入客户端的搜索库中。
·将客户端连接在服务器应用上: 1.声明一个全局连接对象:
connection gc-connection 2.在应用的Open事件中创建连接对象,定义其部分属性并建立同服务器的连接:
gc-connection=Create connection
gc-connection.driver="namedpipes"
gc-connection.location="SERVERNAME"
gc-connection.application="my-dpbserv"
gc-connection.options=""
gc-connection.ConnectToServer()
*其中location属性是指服务器应用运行所在的那个计算机的名字:application属性是传输对象所在的服务器端应用的名字。
·创建代理对象实例,将其连到连接对象上。 1.声明一个"uo-proxy-my-object"的全局变量。(这也正是要将这一代理对象置于客户端应用所搜索到的路径中的原因)
uo-proxy-my-object gp-uo-proxy-my-object 2.在应用对象的Open事件中键入下列代码:
gp-uo-proxy-my-object=Create uo-proxy-my-object 3.调用代理对象的SetConnect()函数传递连接对象的参数,将代理对象实例连到连接对象上:(这一端代码也可在应用的Open事件中执行)
gp-uo-proxy-my-object.SetConnect(gc-connection)
·调用远端对象
远端对象的of-my-message函数返回一个字符串,所以我们可以在下列程序中调用这一函数,将其返回值显示出来。 1.在窗口中,设计一个按钮,它的clicked事件如下编写:
string ls-retcode
ls-retcode=iuo-proxy-my-object.of-my-message()
MessageBox("Message From Remote Object",ls-retcode) 2.首先在服务器端运行服务器端的应用; 3.在客户上运行客户端的应用; 4.点击窗口按钮,我们即可得到结果,显示出一个标有"hello World"的消息框。

PowerBuilder窗口设计

一、窗口的类型 1、Main(主)窗口   2、 Popup(弹出式)窗口   3、Child(子)窗口   4、Response(响应)窗口   5、MDI(多文档界面)窗口 二、窗口的...
  • acmjk
  • acmjk
  • 2015年03月04日 17:10
  • 843

PowerBuilder开发简单计算器

简单计算器 指的是用户每输入完一个完整的表达式(一元或者二元)就计算。  1、设计好界面 2、在Declare Instance Variable里定义三个变量 decimal add1  //存...
  • acmjk
  • acmjk
  • 2015年03月05日 15:43
  • 1331

PowerBuilder创建登录实例—你的心我终于懂了(二)

我们的这个简单的登录功能终于写完了,由于第一次使用PB,对其功能不太了解,所以操作步骤写的比较详细,但是本程序有一个缺点就是在第三步和第四步中,创建了数据窗口对象,到最后却没有用到,感觉有点多余,本来...
  • u010168160
  • u010168160
  • 2014年12月23日 07:58
  • 4521

powerbuilder日期函数

PB系统函数 之 日期时间函数Day() ——————————————————————————- 功能得到日期型数据中的号数(1到31之间的整数值)。 语法Day ( date ) 参数dat...
  • u014679804
  • u014679804
  • 2015年07月15日 17:22
  • 906

powerbuilder初试——揭开那层薄纱

相信自己,自己就能超越自己,这就是我们这个时代的奇迹!信息时代的奇迹!...
  • xvshu
  • xvshu
  • 2014年02月13日 22:02
  • 4071

PowerBuilder总结——原来你是这么的简单

在自学考试最后的阶段是让我们用pb做一个小程序。当然,之前对pb只是有个简单的了解,但是真要是用它做个什么东西还真难。经过了几个星期的奋战,终于将毕业设计做完了。让我们怀着兴奋的心情,来回顾一下这段时...
  • u010168160
  • u010168160
  • 2015年03月22日 07:59
  • 2460

PowerBuilder基础知识

1、 PowerBuilder简介  PowerBuilder是一种功能强大并且易于开发复杂应用系统的前端数据库开发工具,利用它可以快速开发大型数据库应用系统。 PB是具有图形界面的分布式数据库前...
  • acmjk
  • acmjk
  • 2015年03月06日 11:04
  • 846

分布式系统设计系列 -- 基本原理及高可用策略

分布式系统设计系列之 -- 基本原理及高可用策略篇 这篇文章主要介绍一些入门的概念和原理,后面带来一些高可用、数据分布的实践方法!...
  • GugeMichael
  • GugeMichael
  • 2014年07月03日 21:16
  • 29199

PowerBuilder设计模式第0讲:Powerbuilder中的一些反射机制

首先说明一下,Powerbuilder并不包含像java和.net的下的完整反射机制。尤其是动态执行代码方面更是完全不行;本文介绍的主要内容是一些在实际的设计模式应用当中,可以模拟的反射功能。 1...
  • zhj149
  • zhj149
  • 2014年02月28日 12:15
  • 866

【实践】——PowerBuilder登录+PB自带数据库

用PowerBuilder实现登录小程序+用PB自带数据库 图文详细介绍了PowerBuider的创建窗体方法和如何创建连接数据库,并通过登录功能为实例,可以帮助初学者容易的理解体会。...
  • u012654963
  • u012654963
  • 2015年12月20日 22:12
  • 2138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分布式PowerBuilder设计
举报原因:
原因补充:

(最多只允许输入30个字)