| 网站首页 | 文章中心 | 电子书下载 | 矢量图库 | 视频教程 | 素材下载 | 程序代码下载 | JS代码 | 论坛 | 
常用软件类:
|杀毒安全 |联络聊天 |网络软件 |多媒体类 |系统工具 |图形图像 |系统工具 |应用软件 |行业软件
开发设计类:
|动画制作 |图像处理 |3D设计 |操作系统 |站长学院 |网络相关 |WEB设计 |数据库类 |程序开发
第十七章 PowerBuilder实列教程 创建一个分布式程序
作者:佚名    文章来源:网络    点击数:    更新时间:2006-11-2
 

17.1 创建分布式程序

上几章中,我们介绍了PowerBuilder分布式计算的基本概念,在接下来的章节中,我们将做一个简单的分布式程序。我们来看一下一个已经存在的应用程序,然后将做成的分布式运行的程序。

单击Library按钮,打开一个名为Clients的库,单击Clients应用对象。按Run按钮(图17-1)。

图17-1

这是一个商品预定程序,所预定的是个人电脑配件。这是一些电脑常用配件名,旁边所列的配件的价格,这些价格来自电脑分销商的远程数据库。分销商将定期更改这些数据库中的价格表。最后的分销商给购买者折扣。与电脑配件不同的是,折扣值的是不公开的,分销商将给予不同的购买用户以不同的折扣,折扣的计算方法是秘密的,并且不断变化。

因此,我们想把电脑预定程序做成一个分布式运行的程序,让计算折扣的程序运行在我们的服务器中,这样做的目的一方面是保密,另一方面,在分销商更改折扣算法时,只需更服务端程序,而不用更改在客户端中的电脑预定程序。

 

17.2 Nonvisual Object 与 Proxy Object

第一步,我们所做的是将折扣计算模块生成一个非可视对象NVO。

单击用户对象按钮,按NEW,然后选择Class框中的Custom按钮,系统出现一个用户对象窗口。我们可以注意到窗口的标题栏中有一句话为:Inherited from Nonvisual Object,它说明我们所创建的对象正是NVO。接着我们为NVO定义一个函数。打开Declare菜单中User Object Functions,按NEW按钮,这样就打开了函数定义窗口(图17-2)。这个函数名为GetDiscount,它需要有一个参数为Custom Name(用户名),类型为。字符串型。

图17-2

这就是我们的折扣函数。假若用户名为Mohair,则我们给予九折,否则,给九五折。实际函数可能不会这么简单,这里只是一个例子。关闭函数定义窗口,存盘。把这个NVO对象取名为Cnvo_discount

下面我们来生成非可视对象Cnvo_discount的代理对象。在用户对象画板上按右键,选中弹出式菜单的set proxy name,取名为Cpo_discount(图16-3)。在File菜单中选择Save,这样就生成了一个为名为Cpo_discount的代理对象。我们可以在Library画板检查一下,PowerBuilder是否真地生成了这个对象。注意,我们是在篇File菜单中选择Save后生成了这个对象的,如果不将之保存,那么,我们只是为这个NVO设置了一个属性,并未生成代理对象。现在,我们已有了两类对象,一个是非可视对象Cnvo_discount,它是折扣计算程序的真正实现的地方,一个完整的对象。另一个是名为Cpo_discount的代理对象,它定义了前者的接口。我们试用鼠标的右键,来编辑这个对象,可以发现,系统并不允许进行编辑,因为它并不是一真实的对象。

图17-3

 

17.3 创建 Connection Object

现在,我们已经定义了NVO,并生成它的代理对象,下一步再来看一看如何定义和初始化它一个链接对象Connection Object。与Transaction对象不一样,系统并不为应用程序自动生成这个对象,而需要自已手工定义。

打开应用程序画板,选择它的Open事件。在其中只有一句打开窗口语句:Open Win_shoping。我们定义一个全程变量,输入:Connection myconnection。再从脚本编辑器中输入myconnect = create connection,为这个connection对象进行初始化。接着我们赋予它三个最基本的属性值:application、driver和location.。在不清楚之前,我们先给它们空值。至此为止,已经为connection对象初始完毕,我们还需用它来服务器建立联系。输入myconnect ConnectToServer。为了检查它是否真地找到了服务器,我们还需要输入一些脚本来验证它的返回值。如它的返回值不为空,则程序提示一些出错信息。如果等于0,则说明它已经正确链接到服务器,于是进一步打开主窗口win_shoping(图17-4)。

我们建立了myconnect对象,相应地,还应该在程序结束之前将它释放掉,以便系统回收这个对象所占的内存空间。打开Close事件,先中止服务端的服务线程,同时释放服务器为我们分配的内存空间。输入myconnect DisconnectServer。随后,再释放myconnect对象,输入destroy myconnect。在PowerBuilder中,如果创建一个用户自定义的对象,我们就在不需要时把它释放掉。

图17-4

接下去,我们把这个代理对象加到应用程序中。打开窗口win_shoping,在“折扣”按钮中加入代码。Cpo_discount po_discount:定义一个NVO对象实例;po_discount SetConnect myconnect:这一句,我们为代理指定链接对象;这样每当代理对象调用了一函数,myconnect对象就为应用程序重定向到远程的NVO中,这个NVO存在于服务器中。po_discount = create Cpo_discount:初始化这个NVO实例;最后,我们释放这个实例。

现在,我们已经把程序改成了一个在分布式环境下运行的应用程序。在客户端中,所有函数都指向了这个po_discount代理对象。

在测试这个程序之前,我们对myconnect对象属性作一些修改。再打开Application画板,我们把myconnect的driver属性改为local,并让其它两个属性继续为空。当driver的值为local,PowerBuilder就会把分布式程序当作非分布式程序来运行。当程序调用代理对象,代理转向Connection对象,如果Connection对象发现driver为local,Connection就不会发链接请求信息。我们来测试一下这个程序。按下运行按钮,程序被正确运行了。单击“Discount”,程序返回了“0.9”。

[1] [2] [3] 下一页


  • 上一篇文章:

  • 下一篇文章: 没有了
  • 相关文章