1
第 12章 数据库应用的结构与开发环境
? 数据库应用开发概述
? 开放的客户端开发
? 数据库应用开发工具 PowerBuilder
? 基于组件的数据库开发
? Web数据库应用开发
2
数据库应用开发概述
客户端 中间层 /中间件 数据库
3
开放的客户端开发
? 开放式客户体系结构与 ODBC
? ODBC的基本概念
? ODBC的构成
? Visual FoxPro作为客户端开发工具
? 使用远程视图操作 SQL Server
? 使用 ODBC函数操作 SQL Server
4
开放式客户体系结构与 ODBC
开放式客户体系结构使得客户端应用不再紧密地
依赖于数据库管理系统,用户有广泛的挑选余地来选
择自己喜欢和熟悉的开发工具。甚至开发的过程都可
以不依赖于数据库管理系统,可以在客户端独立地进
行开发,当真正联调时再连接到数据库服务器。这也
有利于团队的开发方式。
5
ODBC的基本概念
ODBC( Open DataBase Connectivity)
的全称是开放数据库互连,它是一种访问
数据库的统一界面标准。
6
ODBC的两个部分
一部分是连接客户端的标准
客户端界面。从客户端的角度
ODBC遵守共同的标准,这使得
不同的开发工具连接和使用数据
库的方式是一样的,另一方面也
使得使用不同的数据库管理系统
的方式也是一样的;
另一部分是连接专门的数据
库管理系统的服务器端界面或驱
动程序。
7
ODBC的构成
?应用程序
?驱动程序管理器
?驱动程序
?数据源
8
ODBC函数完成哪些工作?
? 请求对数据源的连接, 获取连接句柄;
? 指定事务控制方式;
? 定义接收结果的数据区;
? 向数据源发送 SQL语句;
? 接收 SQL的查询结果;
? 处理出错信息, 并将出错信息返回给应用程序;
? 终止对数据源的连接 。
9
驱动程序管理器的工作
? 安装指定的驱动程序;
? 定义数据源, 并把数据源映射到具体的
ODBC驱动程序上 ;
? 为每个驱动程序提供 ODBC函数的入口点;
? 为 ODBC调用提供参数验证等 。
10
ODBC驱动程序的具体任务
? 建立与数据源的连接;
? 向数据源提交 SQL请求;
? 处理查询结果;
? 将数据源错误转换为标准错误代码, 并返回给
应用程序;
? 提交事务的开始请求, 完成请求和撤消请求等 。
11
什么是数据源?
? 数据源就是通过一种 ODBC连接的 SQL数据库或
关系数据库,它可以是 PC平台上的 FoxPro数据
库,Windows NT平台上的 SQL Server数据库或
OS/2平台的 Oracle数据库等。
12
Visual FoxPro作为客户端开发工具
? 使用远程视图操作 SQL Server
? 使用 ODBC函数操作 SQL Server
13
使用远程视图操作 SQL Server
? Visual FoxPro的 视图概念:本地视图和远程视图
? 连接
? 使用 CREATE CONNECTION命令建立
? 建立远程视图
? CREATE VIEW … REMOTE
14
使用远程视图的例子
? 建立连接
CREATE CONNECTION Myconn ;
DATASOURCE "MQIS" USERID "sa" PASSWORD ""
? 建立远程视图
CREATE SQL VIEW rv_仓库 REMOTE CONNECTION myconn;
AS SELECT * FROM 仓库
15
使用 ODBC函数操作 SQL Server
16
连接到 SQL Server
SQLCONNECT([DataSourceName,
cUserID,cPassword | cConnectionName])
已经定义好的
数据源的名字
要注册到数据源
上的用户标识
与用户标识相
对应的口令
由 CREATE CONNECTION建
立的一个命名连接的名称
17
例,连接到 MQIS数据源,用户标识是 sa,没有口令。
gnConnHandle = SQLCONNECT("MQIS","sa","")
IF gnConnHandle < 0
= MESSAGEBOX("不能建立到 MQIS数据库的连接 ",16,"SQL连接错误 ")
CANCEL
ELSE
= MESSAGEBOX("成功地连接到 MQIS数据库 ",64,"SQL连接信息 ")
ENDIF
18
断开或注销与数据库的连接
SQLDISCONNECT(nConnectionHandle)
19
对 SQL Server进行操作
向数据源提交或发送 SQL语句的函数 是:
SQLEXEC(nConnectionHandle,
[cSQLCommand,[CursorName]])
由 SQLCONNECT( )
函数返回的连接句柄
要传送给数据
源的 SQL语句
用来存放结果的
Visual FoxPro的
临时文件名
20
例 执行 SQL命令
= SQLEXEC(gnConnHandle,"SELECT * FROM 仓库 ","MyCursor")
SQLEXEC( )函数除了可以自己向数据源传送 SQL语句之外,还可以
执行由 SQLPREPARE( )函数准备好的 SQL语句。
21
动态 SQL语句
? SQLPREPARE()函数
SQLPREPARE(nConnectionHandle,cSQLCommand,[CursorName])
? 该函数的参数的含义与 SQLEXEC函数的参数相同,但
该函数的功能是将 SQL语句传送给数据源,它并不执
行此 SQL语句,而是将它编译好准备由 SQLEXEC函数
来执行。
22
例 执行动态 SQL语句
gcCity = "北京 "
= SQLPREPARE(gnConnHandle,"SELECT * FROM 仓库 ;
WHERE 城市 =?gcCity")
= SQLEXEC(gnConnHandle)
...
gcCity = "上海 "
= SQLEXEC(gnConnHandle)
23
Visual FoxPro中其他 ODBC函数
? SQLCANCEL函数
? 请求中断正在执行的 SQL语句
? SQLCOMMIT函数
? 事务的提交
? SQLROLLBACK函数
? 事务的撤消
? SQLTABLES函数
? 获得指定数据源(数据库)中表的信息
? SQLCOLUMNS函数
? 获得指定数据源下某个表中列的信息
24
Visual FoxPro中其他 ODBC函数
? SQLSETPROP函数
? 设置指定数据源的环境参数值
? SQLGETPROP函数
? 获取指定数据源的环境参数值
? SQLMORERESULTS函数
? 当 SQLEXEC函数返回多个查询结果集时,利
用该函数可以分别将结果送到不同的 Visual
FoxPro临时文件
25
数据库应用开发工具 PowerBuilder
? PowerBuilder的数据库接口
? PowerBuilder应用的构成与开发方法
? 对象、属性与事件
? PowerBuilder的开发环境
? 数据库操作与事务对象
? 初步体验 PowerBuilder的开发方法
26
PowerBuilder的数据库接口
? 通过 ODBC连接数据库
? 通过 JDBC连接数据库
? 通过 OLE DB连接数据库
? 通过专用接口连接数据库
27
通过 ODBC连接数据库
28
通过 JDBC连接数据库
29
通过 OLE DB连接数据库
30
PowerBuilder应用的构成与开发方法
31
使用 PowerBuilder进行开发的实质是:
? 定义对象及其属性;
? 定义对象上某个事件发生时要执行的程序。
使
用Pow
erB
uilder
进
行
应
用
开
发
的
流
程
32
对象、属性与事件
? 对象、属性和事件是面向对象开发方法的三个
要素
? 对象是组成应用程序的部件
? 属性决定了对象的特征
? 事件决定了当发生什么动作时要执行的程序
33
PowerBuilder的主要对象
? 窗口( Windows)
? 数据窗口( DataWindow)
? 命令按钮( CommandButton)
? 选择框( CheckBox)
? 单选按钮( RadioButton)
? 图形按钮( PictureButton)
? 下拉列表框( DropDownListBox)
? 列表框( ListBox)
? 图形( Graph)
? 图片( Picture)
? 单行编辑器( SingleLineEdit)
? 多行编辑器( MultiLineEdit)
? 静态文本( StaticText)
? 菜单( Menu)
? …… 等等。
34
例:命令按钮的常用属性
? Default
? 在一组命令按钮中指定本按钮是否是默认选择的,
取值为 True或 False;
? Enabled
? 说明命令按钮当前是否起作用,取值为 True或
False;
? Text
? 显示在命令按钮中的文字提示;
? Visible
? 说明命令按钮当前是否可见,取值为 True或 False;
? 等等 ……
35
常用事件
? 单击命令按钮的 Clicked事件
? 双击图片的 DoubleClicked
? 窗口打开时的 Open事件
? 数据窗口中记录行改变的 RowFocusChanged事件
? 等等 ……
36
PowerBuilder的开发环境
? 工作空间和目标
? PowerBuilder的工作空间( 8.0版以后才有)可以看
作是开发各种应用的“空间”或“容器”,可以根
据需要在一个工作空间中建立一个或多个目标(应
用),可以同时打开和编辑多个目标中的对象,可
以同时编译和部署多个目标。
? PowerBuilder目标可以是 PowerScript目标(客户端
可执行程序或服务器端组件),也可以是 Web目标
( Web应用)。
37
画板( Painter)
? 应用( Application)对象画板
? 窗口( Window)画板
? 菜单( Menu)画板
? 数据窗口( DataWindow)画板
? 数据库( Database)画板
? 对象库管理( Library)画板
? 用户对象( User Object)画板
? 调试工具( Debug)画板
38
数据库操作与事务对象
? 通过事务对象完成对数据库的操作
? 什么是事务对象?
? PowerBuilder的事务对象是 PowerScript与数据库的
通讯区
? 如果需要同时和多个数据库相连或进行多种数
据库操作,则需要多个事务对象变量
? 默认的全局事务对象变量是 SQLCA
? 事务对象类型是 Transaction
39
事务对象
? 每个事务对象有 15个属性,其中 10个用于给出连接数据库的信息,5个用
于返回操作数据库的结果代码(错误或成功)。对于不同的数据库及数
据库管理系统事务对象的属性取值是不一样的,下表给出了事务对象的
属性及其描述。
属 性 数据类型 描 述
DB M S S t r i n g 数据库厂商名,如 S y b as e, ODB C 等
Datab as e S t r i n g 要连接的数据库名
U s er I d S t r i n g 所连接数据库的用户 ID
DB P as s S t r i n g 所连接数据库的用户口令
L o ck S t r i n g 使用级别
L o g I D S t r i n g 注册到服务器的用户 ID
L o g P as s S t r i n g 注册到服务器的用户口令
S er v er Nam e S t r i n g 数据库所在的服务器名
Au t o C o m m i t B o o l ea n 是否自动提交事务 (仅用于 S QL S er v er )
Db P ar m S t r i n g 特定 DB M S 参数,使用 OD B C 接口时用此参数
S QL R etu r n Data S t r i n g 特定 DB M S 信息
S QL C o d e L o n g 操作成功或失败的代码。 0 成功,1 0 0 没发现,
- 1 失败 ( 使用 S QL D B C o d e 或 S QL E r r T ex t 获取详细信息 )
S QL NR o ws L o n g S QL 语句有效的行数
S QL DB C o d e L o n g 数据库出错代码
S QL E r r T ex t S t r i n g 数据库出错信息
40
连接到数据库
? 连接到数据库的语句是 CONNECT,在使用该语句之前,
相应的事务对象必须存在,并且所需的属性也已经赋值。
? CONNECT语句的格式:
? CONNECT [USING <TransVar>];
? 例
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=stock'"
CONNECT;
41
和事务对象有关的几条语句
? 断开和数据库的连接
? DISCONNECT
? 事务提交
? COMMIT
? 事务撤消
? ROLLBACK
42
事务对象应用举例
//说明 SQLServerTrans事务对象
transaction SQLServerTrans
//置默认事务对象的属性值
SQLCA.DBMS = "ODBC"
SQLCA.Database = "sample"
SQLCA.Userid = "admin"
SQLCA.dbParm = "dsn=sample,DataSource='sample',
ConnectString='DSN=sample' "
//使用默认的 SQLCA连接到指定数据库
CONNECT;
//建立 SQLServerTrans事务对象
SQLServerTrans = CREATE TRANSACTION
//接下页
43
//置 SQLServerTrans事务对象的属性值
SQLServerTrans.DBMS = "Sybase"
SQLServerTrans.database = "personnel"
SQLServerTrans.logid = "JPL"
SQLServerTrans.logPass = "jplpass"
SQLServerTrans.servername = "SERVER2"
//使用 SQLServerTrans连接到 Sybase数据库
CONNECT USING SQLServerTrans ;
//插入一条记录到 SQLCA对应的数据库
INSERT INTO CUSTOMER VALUES('CUST789','BOSTON') ;
//插入一条记录到 Sybase数据库
INSERT INTO EMPLOYEE VALUES('Peter Smith','New York')
USING SQLServerTrans ;
//断开与数据库的连接
DISCONNECT;
DISCONNECT USING SQLServerTrans ;
//撤消 SQLServerTrans事务对象
DESTROY SQLServerTrans
44
? 建立工作空间
? 建立目标和应用对象
? 建立应用程序的主窗口
? 建立查询职工信息的数据窗口对象
? 修改建立好的数据窗口对象
? 在主窗口中添加控件
? 写事件驱动程序
? 增加排序功能
? 关联与条件查询
初步体验 PowerBuilder的开发方法
45
基于组件的数据库开发
? 组件与组件模型
? 基于组件的开发
? 有关标准
? 使用 PowerBuilder和 EAServer开发组件应用
? 从 EAServer组件访问数据库
46
组件与组件模型
? 基于组件的开发建立在面向对象的基础
之上,面向对象的基本组成单元是类和
对象,面向对象开发方法可以实现类一
级的封装和重用。而类一级的封装和重
用对企业应用还远远不够,它需要更粗
粒度的封装,这就是组件。
47
组件与组件模型
48
组件与组件模型
? 组件模型是组件及其环境所必需的一组要求。组
件模型中虽然最重要的是组件自身及其封装;但
是从应用组件和开发的角度,我们也非常关心如
何定义和约束接口。
? 组件模型中的接口定义了其他代码实体(可以是
应用程序、其他组件及一些容器等)与组件之间
的关系 。
49
组件模型接口的分类
? 组件 API(应用编程接口):定义了一组应用程序可以用来使用组件
服务的接口标准。
? 设计模式:是一组类、接口及其关系,提供对一般问题分类常用的设
计解决方案,应用代码通过提供基于设计模式的更具体的且与应用相
关的设计行为来规范设计模式。
? 组件 SPI(服务提供商接口):由专门的组件服务提供商提供,按照
某种标准提供完成某种功能的组件和接口,并且可以修改底层服务而
不改变应用接口。
? 组件 -容器接口:一种被组件假定的容器环境接口。
? 容器 -组件接口:一种被容器假定的组件接口。
50
组件与组件模型
? 组件模型接口可能与平台相关、也可能与平台无关等,这
些可能会影响到对组件模型的选择。这方面的问题可以概
括如下:
? 语言相关
? 平台相关
? 分布式通信协议相关
? 数据表示相关
? 通信同步
? 行为定制
51
基于组件的开发
? 基于组件的开发( Component-Based Development,
CBD)已经成为开发数据库应用的基本技术,组件
可以是商用的现成产品,也可以是自己开发的,重
要的是整个应用的开发要遵循基于组件的方案和结
构。
52
基于组件的开发
? 基于组件的开发以面向对象技术为基础,
所以基于组件开发的许多方法都依赖于
UML描述及其相关组件,其开发过程也
与面向对象方法类似。
53
基于组件的开发
? 在需求分析阶段要分析系统的行为以及组件接口,
在此阶段要明确组件模型、标准组件接口以及系
统外部的组件接口等。
? 在概要设计阶段要:
? 确定组件模型技术,通过确定组件模型技术可以驱动
用于系统设计的技术和工具;
? 确定组件,根据系统的行为需求和支持的接口与技术
定义组件;
? 组件选择,对一些商用组件和其他项目开发的组件进
行适用性评估,以选择合适的组件应用到项目中。
54
基于组件的开发
? 在详细设计阶段主要对组件进行详细设计和调整,
并确定组件实现规范。
? 在组件实施阶段完成代码的编写和修改,或通过
子类来扩展已有的组件代码。
? 在组件选择、调整和编码之后,需对组件进行单
元测试。
? 在完成单元测试之后则可以进行组件装配,从而
形成功能模块,然后对功能模块进行测试。
? 最后进行系统的测试和部署。
55
有关标准
? 关于组件模型有许多标准, 近几年最具代表性的
是用于构建 Java企业系统的模型, 其中 J2EE
( Java 2 Enterprise Edition) 提供了一种集成的,
简化的访问组件和建立组件的方法 。 除此之外,
也有其他一些重要的模型, 如对象管理组织
( Object Management Group,OMG) 和微软公
司也定 义了 很有影 响的 组件 模型和 方法 。
56
有关标准
? 小应用程序 Applet
? JavaBean
? CORBA
? RMI
? COM/DCOM
? Java API/SPI
? J2EE Web组件
? J2EE企业 JavaBean
? CORBA component
57
小应用程序 Applet
? Java Applet定义了简单的容器 -组件和
组件 -容器接口,使 Java代码可以嵌入
到 Web浏览器中的 Applet中运行。
58
JavaBean
? JavaBean组件模型定义了编写 Java代码的标准
模型, 对外提供组件属性和事件以及 JavaBean
容器的接口 。 容器一般嵌入到一个集成的开发
环境中, 以便 JavaBean组件在设计时使用基于
GUI( Graphic User Interface) 的工具进行定制 。
59
CORBA
? 通用对象请求代理体系结构 ( Common Object
Request Broker Architecture,CORBA) 是由
OMG定义的分布式组件模型标准 。 该方法通
过标准协议把从分布式客户机发出的调用请
求传送至服务器端的代码, 该代码将激活分
布式对象的方法 。 除了标准的组件通信和激
活框架之外, CORBA模型还包括一些标准的,
更 高 级 的 分 布 式 组 件 服 务 和 功 能 。
60
RMI
? 远程方法调用( Remote Method Invocation,
RMI)为分布式访问组件定义了一个 Java相
关的接口模型。 RMI容器环境包含了 Java平
台,并扩展支持使用相同的底层通信协议
(如 CORBA的标准协议的通信)。
61
COM/DCOM
? 微软的组件对象模型( Component Object
Model,COM)定义了一个与在微软平台
上实现的组件交互的标准模型。分布式组
件对象模型( DCOM)是 COM模型的分
布式版本。
62
Java API/SPI
? Java不仅仅是一种语言, 各种 Java API实际
定义了一组标准组件服务, 这些服务能够
被应用程序使用并访问数据库 ( JDBC) 服
务, 事务服务 ( JTS), 消息服务 ( JMS)
等 。 而且这样的 API模块还允许开发人员使
用 SPI把它们插接到不同的底层服务中 。
63
J2EE Web组件
? Java Servlet和 Java Server page是服务器
端的组件,它处理 Web请求和生成 Web
的表示内容。这样的 Web组件运行和操
作在基于 J2EE的 Web容器环境内部。
64
J2EE企业 JavaBean
? 企业级 JavaBean( EJB)是服务器端
的组件模型,它们在 EJB容器和服务
器内操作,这样的服务器能够为 EJB
提供一组标准的服务框架,如事务、
安全和可伸缩性等。
65
CORBA component
? CORBA component是基于 CORBA的
应用服务器模型,它和 EJB模型非常
类似。
66
使用 PowerBuilder和 EAServer开发组件应用
? EAServer( Enterprise Application Server)是 Sybase公
司提供的企业级应用服务器,可以应用于企业级 Web、
分布式和多层客户 /服务器应用的解决方案,EAServer
支持 Java,JavaBean,CORBA,COM和 J2EE等标准组
件模型。
? PowerBuilder不仅仅是客户端的数据库应用开发工具,
它还可以开发 EAServer组件。 PowerBuilder和 EAServer
一起提供了一个无缝的开发和提交环境,支持 HTML、
Java,XML等语言,并且能够访问商用的系统组件。
67
PowerBuilder和 EAServer是完全集成的
? PowerBuilder应用程序可以充当 EAServer服务器的客户;而
EAServer服务器的中间层组件也可以包含 PowerBuilder的不
可见的定制类用户对象。
? EAServer可以直接与 PowerBuilder的不可见用户对象通信,
PowerBuilder的不可见对象也可以与 EAServer通信。在
PowerBuilder上开发设计的组件能充分利用 PowerScript容易
使用和适应性好的优点,并且可以使用丰富的 PowerBuilder
系统对象。
68
PowerBuilder和 EAServer是完全集成的
69
EAServer的服务器结构
? 组件和包
? 连接缓存
? 事务支持
? 实例池
? 共享组件
? 装入平衡、失败和高有效性
70
组件和包
? EAServer服务器可以为 PowerBuilder,Java,C,C++和
COM/ActiveX组件提供服务,所谓组件是一个被封装
了的类的集合,它包括了在 EAServer事务服务器中运
行的业务逻辑。组件由一个或多个方法组成,这些方
法为 EAServer的客户端提供服务。如果客户端要求组
件提供服务,则必须先创建组件的一个实例,然后才
能调用组件上的方法。
? EAServer中有一个包的概念,包是组件的集合,是将
应用程序资源分组组织在一起,并作为分布式计算的
一个单元。
71
连接缓存
? 为了优化数据库处理,EAServer提供了对连接
缓存的支持。连接缓存允许 EAServer组件共享
与远程数据库服务器预先分配的连接,避免由
于组件的每个实例都创建一个不同的连接而增
加开销。通过建立连接缓存,EAServer服务器
可以重用对相同数据存储建立的连接。
72
事务支持
? 在 PowerBuilder中开发的组件可以在 EAServer事务
中共享。当一个组件提供事务支持时,EAServer
确保组件的数据库操作作为事务的一部分执行。
? 多个 EAServer组件可以共享一个单一的 EAServer
事务; EAServer确保数据库的改变是由共享的事
务通过提交和撤消实现的。如果在定义组件时使
用了 EAServer事务,那么所有的工作都通过组件
实现,并且这些组件共享已经发生的事务。
73
实例池
? EAServer组件对实例池提供支持。实例
池允许 EAServer客户重用组件实例,从
而避免了由于重复分配组件实例而引起
的资源消耗,因而增强了 EAServer服务
器的性能。
74
共享组件
? EAServer对共享组件提供支持,允许客户共享状
态信息。共享组件允许多个客户共享相同的组件
实例。当程序员插接一个 PowerBuilder不可见对
象到 EAServer时,可以指定该对象为 EAServer共
享组件。使用共享组件的好处是:
? 对公共数据提供方便的存取,否则将需要被每
个客户连接分开检索;
? 减少数据存取的次数,允许数据库服务器去做
其他的处理。
75
命名服务
? EAServer执行 CORBA标准 CosNaming命
名服务,当应用程序中包括多个服务器
时,命名服务允许定义本地服务器名代
替服务器地址。通过定义初始服务器名
再加上包和组件名就可以标识组件。
76
装入平衡、失败和高有效性
? EAServer提供对装入平衡、失败和高有效性的支持,
这些特征确保进入服务器的客户要求分布在多个
EAServer服务器之中,当一个或多个 EAServer服务
器已经无效时,EAServer服务仍然有效。
? 为了实现装入平衡、失败和高有效性,必须创建一
个服务器集群(一组运行在不同机器上的 EAServer
服务器),集群中的服务器共享为客户提供的服务。
如果集群中的一个或多个服务器失败或掉线,集群
中的其他服务器仍可提供对客户端的服务。
77
EAServer的客户端结构
? 存取 EAServer服务器的 PowerBuilder客户
有三种主要的组件:
? 用户接口
? Connection(连接)对象
? EAServer代理对象
78
用户接口
? 用户接口是指客户应用程序上包括的所
有与业务用户进行交互的窗口和菜单,
以及客户应用程序中包含的响应用户的
每个动作的程序,用户动作可以是单击
命令按扭,或者选择了菜单项,或是在
编辑框中输入了数据等,而相应的程序
则完成对应的工作。
79
Connection对象
? Connection对象负责客户应用程序与 EAServer
的连接并要求它的服务。 Connection对象应该
在客户端的程序中实例化,它的属性值包括了
PowerBuilder客户与 EAServer服务器连接所需
要的信息。 Connection对象要验证 EAServer的
主机名和端口号,并且选择一个默认的包。
80
EAServer代理对象
? EAServer服务器中的每个组件在客户应用程序
中都有一个与之对应的代理对象,在运行期间,
代理对象所代理的远程对象可以由客户在本地
实例化。只有创建了远程对象的实例,才能对
远程对象上的函数进行调用。
81
其他客户端技术
? 创建兼容 CORBA的客户
? 创建兼容 EJB的客户
? 建立 SSL连接
82
从 EAServer组件访问数据库
? 在 PowerBuilder下开发的 EAServer组件可
以使用数据存储( DataStore)对象与数
据库进行交互,数据存储对象是不可视
的数据窗口控件,除了没有可视属性外,
数据存储对象与数据窗口控件具有完全
相同的特征和用途。
83
从 EAServer组件访问数据库
? 为了能让客户看到服务器上的被检索数据,
必须提供一个可视接口给用户,也就是要
在客户端建立一个带有数据窗口控件的窗
口。当服务器检索到数据时,客户端的数
据窗口就能显示出服务器上的数据存储所
检索到的结果集。同样,当用户修改了客
户端的数据时,服务器上的数据存储内容
要被更新,以反映客户端上的数据窗口控
件的当前状态。
84
使用连接缓存( connection caching)
? 为了优化数据库处理,EAServer提供了
对连接缓存的支持。连接缓存允许
EAServer组件共享预先分配的远程数据
库服务器的连接池,以避免由于组件的
每个实例都创建不同的连接而增加开销。
通过建立连接缓存,EAServer服务器可
以重用对相同数据存储建立的连接。
85
实现检索操作
? 为了使用数据存储实现检索操作,首先
必须在程序中建立一个数据存储对象的
实例,并为该数据存储对象分配一个数
据窗口对象;然后,需要为数据存储设
置一个事务对象。一旦完成了这些设置
步骤,就可以检索数据到数据存储,并
实现各种对检索结果集的处理。
86
数据窗口同步
? 在传统的客户 /服务器应用程序中,数据
库修改是由运行在客户端的应用程序完
成的,PowerBuilder可以自动的管理数据
窗口状态信息。但是在分布式和组件处
理中,情况有所不同,因为应用程序组
件将客户与服务器分开了,所以需要写
程序来保证客户端的数据缓冲区和状态
标志与服务器上的数据存储同步。
87
移动数据窗口缓冲区和状态标志
? 为了从一个数据窗口(或数据存储)提供完整的状态信息
到另一个数据窗口,程序中必须包括下列处理:
? 捕获源数据窗口的当前状态;
? 将源数据窗口的当前状态应用到目标数据窗口。
? 当一个数据窗口(或数据存储)发生了变化,为了让另一
个数据窗口也随之变化,程序中必须包括下列处理:
? 捕获源数据窗口的变化;
? 将源数据窗口的变化传送到目标数据窗口。
88
Web数据库应用开发
Components
Browser or C/S
Components
Client/Server
Application
Browser
Production
Data
Production
Data
Production
Data
Production
Data
Production
Data
Enterprise JavaBeans,
COM,CORBA,PB
NVOs
Templates,Scripts
Page
ServerHTML Pages
FileSystem
Very
Thin
Thin
Rich
Web Server
Components
Transaction
Server
Client Middle Tier Data
89
Web数据库应用的一般结构和方法之一
? 中间件负责管理 Web服务器和数据库服务器之间的通信并
提供应用程序服务,它能够直接访问数据库或调用外部程
序或利用脚本代码来访问数据库,因此它可以提供与数据
库相关的动态 HTML页面,或执行用户查询,并将查询结
果格式化成 HTML页面,然后通过 Web服务器返回给用户
浏览器。
90
Web数据库应用的一般结构和方法之二
? 通过 Web浏览器把应用下载到客户端运行,在客户端直接
访问数据库。客户端应用包括,Java Applet,ActiveX、
Plug-in等等,其中最典型的就是 Java Applet。
? Java是一种与平台无关的编程语言,因而具有极强的可移
植性。在 Java Applet中访问数据库,可以使用 JDBC技术,
通过 JDBC提供的 API来实现对分布在网上的不同数据库的
各种操作。
91
使用 PowerBuilder和 EAServer建立 Web应用
? Power Dynamo简介及工作流程
? Web数据窗口
? Web Target( Web目标)
92
Power Dynamo简介及工作流程
? EAServer实际上有两部分组成:
? Jaguar CTS( Component Transaction Server)
? Power Dynamo
93
Power Dynamo功能介绍
? Power Dynamo负责数据库与 Web站点的
协调和管理,负责解释 Web页面中的数
据请求。为此,使用 Power Dynamo可以
在网页中嵌入相关的命令,当客户端浏
览器显示网页或与其交互时,Power
Dynamo开始处理这些嵌入的指令,并将
从数据库中获得的动态数据嵌入到 Web
页面中。
94
解释器
? Power Dynamo的核心是一个解释器,负
责处理嵌入在 HTML页面和其他文档中
的标记( Tags)指令(如嵌入的 SQL语
句等),并将结果嵌入在 HTML页面中
返回给 Web服务器。
95
HTML模板和脚本
? Power Dynamo可以处理静态 Web页面,
还可以处理两种类型的动态页面:
HTML模板和 Script脚本。
96
在模板中嵌入动态内容
? 使用 Power Dynamo可以在 HTML或 XML
模板中嵌入 SQL语句,这使得用户可以
通过 Web页面灵活的访问数据库。由于
支持文本替换和主变量,所以不仅可以
嵌入静态的 SQL语句,还可以嵌入动态
的 SQL语句。
97
Power Dynamo工作流程
5) Power Dynamo页面服务器将结果
以 HTML格式返回给 Web服务器;
6) Web服务器将最终结果返回给客户
端浏览器。
1) Web服务器将请求传送给 Power
Dynamo;
2) Power Dynamo从模板库中取出相
应的 HTML模板,处理嵌入在模
板中的指令;
3) 根据要求从数据库中提取数据,
然后继续处理脚本;
4) 如果有 Jaguar CTS组件调用,则
完成相应的组件方法调用和执行,
执行结果返回给 Power Dynamo;
98
Dynamo Script语言简介
? Power Dynamo的脚本语言称作 Dynamo
Script,是一种服务器端的脚本语言,它
用于控制从 Web服务器传递给客户机浏
览器的动态内容。 Dynamo Script在语法
上和 JavaScript非常相似。
99
Web数据窗口
? Web数据窗口( DataWindow)是用于 HTML
的数据窗口,它提供了一种瘦客户端解决方
案,可以提供 PowerBuilder数据窗口的大部
分数据操作功能,而且不需要在 Web客户端
安装任何 PowerBuilder动态连接库( DLL)
或其他组件。显示在 Web浏览器中的数据窗
口和数据窗口画板中设计的数据窗口看起来
非常相像。
100
Web数据窗口的工作流程
1) 在客户端浏览器中用户发出一个页面请求(含有 Web数据窗口);
2) Web服务器将请求传递给页面服务器,然后由页面服务器查找请求
页面的模板并执行模板中的服务器端脚本;
3) 服务器端脚本连接到服务器组件,并将数据窗口和数据库连接的
信息传递给组件;
4) 服务器组件的方法从数据库中为数据窗口检索数据,并根据数据
窗口的定义、数据和状态等生成 HTML或 JavaScript页面;
5) 服务器组件将 HTML或 JavaScript页面返回给页面服务器;
6) 页面服务器使用生成的 HTML或 JavaScript页面替换 Web请求页面中
服务器端的脚本,并通过 Web服务器将这个页面传送给 Web客户端
浏览器;
7) 用户通过数据窗口进行信息交互,如修改数据或请求下一页数据
等;
8) Web服务器接收带有用户需求行为参数的 URL,并传送给页面服务
器,然后开始以上各步骤的循环。
101
Web Target( Web目标)
? Web目标由建立 Web应用的一组文件和组
件构成,使用 PowerBuilder建立的 Web应用
可以提供交互的、动态的内容,这是通过
集成数据库中的数据、客户和服务器端的
脚本以及访问事务服务器上的组件来实现
的。使用 PowerBuilder开发环境可以简化对
各种类型 Web应用的开发和维护。
102
创建 Web目标
103
Web目标中可以包含如下文件类型
? HTML文件,HTML文件确定 Web应用的显示
风格,也提供将组件应用于网页的结构;
? 脚本文件,Web目标支持客户端和服务器端的
脚本;
? 组件文件,Web目标可以包含 EAServer组件、
Web数据窗口,Java Applet和 Java Bean组件、
Microsoft Active X控件等;
? 附属文件,Web目标中可以包含图像文件、音
频文件、视频文件等各种附属文件。
104
建立 Web页面
105
页面开发环境
106
HTML源代码编辑器
107
预览页面
108
编译和部署
? 在完成了 Web目标的设计和实施后,需要对目标进行编译
和部署( Deploy)。用户在开发的过程中可以随时进行编
译,这时可以对 Web目标的一部分或全部进行测试。
? 编译一个 Web目标包括两个步骤:
? 提供链接验证;
? 将 Web目标中的文件传送到编译文件夹中,以便在部署时使用。
? 部署一个 Web目标包括如下步骤:
? 获得:从编译文件夹中检索和获得文件;
? 转换:对要部署的文件进行转换和处理,按照适合目标服务器的
需要改变 HTML标签和脚本;
? 存放:将部署的页面发送到 Web站点或应用服务器。
109
【 本章小节 】
? 本章介绍了目前流行的数据库应用的体
系结构,普通的客户端开发、如何访问
和操作数据库是所有开发的基础。组件
技术越来越被人们重视,无论是 Web应
用、还是非 Web应用,组件技术将普遍
被人们使用。组件化的开发,对提高软
件的生产率和软件的质量都有着非常重
要的意义。
110
对于新环境要有良好的适应能
力 …
第 12章 数据库应用的结构与开发环境
? 数据库应用开发概述
? 开放的客户端开发
? 数据库应用开发工具 PowerBuilder
? 基于组件的数据库开发
? Web数据库应用开发
2
数据库应用开发概述
客户端 中间层 /中间件 数据库
3
开放的客户端开发
? 开放式客户体系结构与 ODBC
? ODBC的基本概念
? ODBC的构成
? Visual FoxPro作为客户端开发工具
? 使用远程视图操作 SQL Server
? 使用 ODBC函数操作 SQL Server
4
开放式客户体系结构与 ODBC
开放式客户体系结构使得客户端应用不再紧密地
依赖于数据库管理系统,用户有广泛的挑选余地来选
择自己喜欢和熟悉的开发工具。甚至开发的过程都可
以不依赖于数据库管理系统,可以在客户端独立地进
行开发,当真正联调时再连接到数据库服务器。这也
有利于团队的开发方式。
5
ODBC的基本概念
ODBC( Open DataBase Connectivity)
的全称是开放数据库互连,它是一种访问
数据库的统一界面标准。
6
ODBC的两个部分
一部分是连接客户端的标准
客户端界面。从客户端的角度
ODBC遵守共同的标准,这使得
不同的开发工具连接和使用数据
库的方式是一样的,另一方面也
使得使用不同的数据库管理系统
的方式也是一样的;
另一部分是连接专门的数据
库管理系统的服务器端界面或驱
动程序。
7
ODBC的构成
?应用程序
?驱动程序管理器
?驱动程序
?数据源
8
ODBC函数完成哪些工作?
? 请求对数据源的连接, 获取连接句柄;
? 指定事务控制方式;
? 定义接收结果的数据区;
? 向数据源发送 SQL语句;
? 接收 SQL的查询结果;
? 处理出错信息, 并将出错信息返回给应用程序;
? 终止对数据源的连接 。
9
驱动程序管理器的工作
? 安装指定的驱动程序;
? 定义数据源, 并把数据源映射到具体的
ODBC驱动程序上 ;
? 为每个驱动程序提供 ODBC函数的入口点;
? 为 ODBC调用提供参数验证等 。
10
ODBC驱动程序的具体任务
? 建立与数据源的连接;
? 向数据源提交 SQL请求;
? 处理查询结果;
? 将数据源错误转换为标准错误代码, 并返回给
应用程序;
? 提交事务的开始请求, 完成请求和撤消请求等 。
11
什么是数据源?
? 数据源就是通过一种 ODBC连接的 SQL数据库或
关系数据库,它可以是 PC平台上的 FoxPro数据
库,Windows NT平台上的 SQL Server数据库或
OS/2平台的 Oracle数据库等。
12
Visual FoxPro作为客户端开发工具
? 使用远程视图操作 SQL Server
? 使用 ODBC函数操作 SQL Server
13
使用远程视图操作 SQL Server
? Visual FoxPro的 视图概念:本地视图和远程视图
? 连接
? 使用 CREATE CONNECTION命令建立
? 建立远程视图
? CREATE VIEW … REMOTE
14
使用远程视图的例子
? 建立连接
CREATE CONNECTION Myconn ;
DATASOURCE "MQIS" USERID "sa" PASSWORD ""
? 建立远程视图
CREATE SQL VIEW rv_仓库 REMOTE CONNECTION myconn;
AS SELECT * FROM 仓库
15
使用 ODBC函数操作 SQL Server
16
连接到 SQL Server
SQLCONNECT([DataSourceName,
cUserID,cPassword | cConnectionName])
已经定义好的
数据源的名字
要注册到数据源
上的用户标识
与用户标识相
对应的口令
由 CREATE CONNECTION建
立的一个命名连接的名称
17
例,连接到 MQIS数据源,用户标识是 sa,没有口令。
gnConnHandle = SQLCONNECT("MQIS","sa","")
IF gnConnHandle < 0
= MESSAGEBOX("不能建立到 MQIS数据库的连接 ",16,"SQL连接错误 ")
CANCEL
ELSE
= MESSAGEBOX("成功地连接到 MQIS数据库 ",64,"SQL连接信息 ")
ENDIF
18
断开或注销与数据库的连接
SQLDISCONNECT(nConnectionHandle)
19
对 SQL Server进行操作
向数据源提交或发送 SQL语句的函数 是:
SQLEXEC(nConnectionHandle,
[cSQLCommand,[CursorName]])
由 SQLCONNECT( )
函数返回的连接句柄
要传送给数据
源的 SQL语句
用来存放结果的
Visual FoxPro的
临时文件名
20
例 执行 SQL命令
= SQLEXEC(gnConnHandle,"SELECT * FROM 仓库 ","MyCursor")
SQLEXEC( )函数除了可以自己向数据源传送 SQL语句之外,还可以
执行由 SQLPREPARE( )函数准备好的 SQL语句。
21
动态 SQL语句
? SQLPREPARE()函数
SQLPREPARE(nConnectionHandle,cSQLCommand,[CursorName])
? 该函数的参数的含义与 SQLEXEC函数的参数相同,但
该函数的功能是将 SQL语句传送给数据源,它并不执
行此 SQL语句,而是将它编译好准备由 SQLEXEC函数
来执行。
22
例 执行动态 SQL语句
gcCity = "北京 "
= SQLPREPARE(gnConnHandle,"SELECT * FROM 仓库 ;
WHERE 城市 =?gcCity")
= SQLEXEC(gnConnHandle)
...
gcCity = "上海 "
= SQLEXEC(gnConnHandle)
23
Visual FoxPro中其他 ODBC函数
? SQLCANCEL函数
? 请求中断正在执行的 SQL语句
? SQLCOMMIT函数
? 事务的提交
? SQLROLLBACK函数
? 事务的撤消
? SQLTABLES函数
? 获得指定数据源(数据库)中表的信息
? SQLCOLUMNS函数
? 获得指定数据源下某个表中列的信息
24
Visual FoxPro中其他 ODBC函数
? SQLSETPROP函数
? 设置指定数据源的环境参数值
? SQLGETPROP函数
? 获取指定数据源的环境参数值
? SQLMORERESULTS函数
? 当 SQLEXEC函数返回多个查询结果集时,利
用该函数可以分别将结果送到不同的 Visual
FoxPro临时文件
25
数据库应用开发工具 PowerBuilder
? PowerBuilder的数据库接口
? PowerBuilder应用的构成与开发方法
? 对象、属性与事件
? PowerBuilder的开发环境
? 数据库操作与事务对象
? 初步体验 PowerBuilder的开发方法
26
PowerBuilder的数据库接口
? 通过 ODBC连接数据库
? 通过 JDBC连接数据库
? 通过 OLE DB连接数据库
? 通过专用接口连接数据库
27
通过 ODBC连接数据库
28
通过 JDBC连接数据库
29
通过 OLE DB连接数据库
30
PowerBuilder应用的构成与开发方法
31
使用 PowerBuilder进行开发的实质是:
? 定义对象及其属性;
? 定义对象上某个事件发生时要执行的程序。
使
用Pow
erB
uilder
进
行
应
用
开
发
的
流
程
32
对象、属性与事件
? 对象、属性和事件是面向对象开发方法的三个
要素
? 对象是组成应用程序的部件
? 属性决定了对象的特征
? 事件决定了当发生什么动作时要执行的程序
33
PowerBuilder的主要对象
? 窗口( Windows)
? 数据窗口( DataWindow)
? 命令按钮( CommandButton)
? 选择框( CheckBox)
? 单选按钮( RadioButton)
? 图形按钮( PictureButton)
? 下拉列表框( DropDownListBox)
? 列表框( ListBox)
? 图形( Graph)
? 图片( Picture)
? 单行编辑器( SingleLineEdit)
? 多行编辑器( MultiLineEdit)
? 静态文本( StaticText)
? 菜单( Menu)
? …… 等等。
34
例:命令按钮的常用属性
? Default
? 在一组命令按钮中指定本按钮是否是默认选择的,
取值为 True或 False;
? Enabled
? 说明命令按钮当前是否起作用,取值为 True或
False;
? Text
? 显示在命令按钮中的文字提示;
? Visible
? 说明命令按钮当前是否可见,取值为 True或 False;
? 等等 ……
35
常用事件
? 单击命令按钮的 Clicked事件
? 双击图片的 DoubleClicked
? 窗口打开时的 Open事件
? 数据窗口中记录行改变的 RowFocusChanged事件
? 等等 ……
36
PowerBuilder的开发环境
? 工作空间和目标
? PowerBuilder的工作空间( 8.0版以后才有)可以看
作是开发各种应用的“空间”或“容器”,可以根
据需要在一个工作空间中建立一个或多个目标(应
用),可以同时打开和编辑多个目标中的对象,可
以同时编译和部署多个目标。
? PowerBuilder目标可以是 PowerScript目标(客户端
可执行程序或服务器端组件),也可以是 Web目标
( Web应用)。
37
画板( Painter)
? 应用( Application)对象画板
? 窗口( Window)画板
? 菜单( Menu)画板
? 数据窗口( DataWindow)画板
? 数据库( Database)画板
? 对象库管理( Library)画板
? 用户对象( User Object)画板
? 调试工具( Debug)画板
38
数据库操作与事务对象
? 通过事务对象完成对数据库的操作
? 什么是事务对象?
? PowerBuilder的事务对象是 PowerScript与数据库的
通讯区
? 如果需要同时和多个数据库相连或进行多种数
据库操作,则需要多个事务对象变量
? 默认的全局事务对象变量是 SQLCA
? 事务对象类型是 Transaction
39
事务对象
? 每个事务对象有 15个属性,其中 10个用于给出连接数据库的信息,5个用
于返回操作数据库的结果代码(错误或成功)。对于不同的数据库及数
据库管理系统事务对象的属性取值是不一样的,下表给出了事务对象的
属性及其描述。
属 性 数据类型 描 述
DB M S S t r i n g 数据库厂商名,如 S y b as e, ODB C 等
Datab as e S t r i n g 要连接的数据库名
U s er I d S t r i n g 所连接数据库的用户 ID
DB P as s S t r i n g 所连接数据库的用户口令
L o ck S t r i n g 使用级别
L o g I D S t r i n g 注册到服务器的用户 ID
L o g P as s S t r i n g 注册到服务器的用户口令
S er v er Nam e S t r i n g 数据库所在的服务器名
Au t o C o m m i t B o o l ea n 是否自动提交事务 (仅用于 S QL S er v er )
Db P ar m S t r i n g 特定 DB M S 参数,使用 OD B C 接口时用此参数
S QL R etu r n Data S t r i n g 特定 DB M S 信息
S QL C o d e L o n g 操作成功或失败的代码。 0 成功,1 0 0 没发现,
- 1 失败 ( 使用 S QL D B C o d e 或 S QL E r r T ex t 获取详细信息 )
S QL NR o ws L o n g S QL 语句有效的行数
S QL DB C o d e L o n g 数据库出错代码
S QL E r r T ex t S t r i n g 数据库出错信息
40
连接到数据库
? 连接到数据库的语句是 CONNECT,在使用该语句之前,
相应的事务对象必须存在,并且所需的属性也已经赋值。
? CONNECT语句的格式:
? CONNECT [USING <TransVar>];
? 例
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=stock'"
CONNECT;
41
和事务对象有关的几条语句
? 断开和数据库的连接
? DISCONNECT
? 事务提交
? COMMIT
? 事务撤消
? ROLLBACK
42
事务对象应用举例
//说明 SQLServerTrans事务对象
transaction SQLServerTrans
//置默认事务对象的属性值
SQLCA.DBMS = "ODBC"
SQLCA.Database = "sample"
SQLCA.Userid = "admin"
SQLCA.dbParm = "dsn=sample,DataSource='sample',
ConnectString='DSN=sample' "
//使用默认的 SQLCA连接到指定数据库
CONNECT;
//建立 SQLServerTrans事务对象
SQLServerTrans = CREATE TRANSACTION
//接下页
43
//置 SQLServerTrans事务对象的属性值
SQLServerTrans.DBMS = "Sybase"
SQLServerTrans.database = "personnel"
SQLServerTrans.logid = "JPL"
SQLServerTrans.logPass = "jplpass"
SQLServerTrans.servername = "SERVER2"
//使用 SQLServerTrans连接到 Sybase数据库
CONNECT USING SQLServerTrans ;
//插入一条记录到 SQLCA对应的数据库
INSERT INTO CUSTOMER VALUES('CUST789','BOSTON') ;
//插入一条记录到 Sybase数据库
INSERT INTO EMPLOYEE VALUES('Peter Smith','New York')
USING SQLServerTrans ;
//断开与数据库的连接
DISCONNECT;
DISCONNECT USING SQLServerTrans ;
//撤消 SQLServerTrans事务对象
DESTROY SQLServerTrans
44
? 建立工作空间
? 建立目标和应用对象
? 建立应用程序的主窗口
? 建立查询职工信息的数据窗口对象
? 修改建立好的数据窗口对象
? 在主窗口中添加控件
? 写事件驱动程序
? 增加排序功能
? 关联与条件查询
初步体验 PowerBuilder的开发方法
45
基于组件的数据库开发
? 组件与组件模型
? 基于组件的开发
? 有关标准
? 使用 PowerBuilder和 EAServer开发组件应用
? 从 EAServer组件访问数据库
46
组件与组件模型
? 基于组件的开发建立在面向对象的基础
之上,面向对象的基本组成单元是类和
对象,面向对象开发方法可以实现类一
级的封装和重用。而类一级的封装和重
用对企业应用还远远不够,它需要更粗
粒度的封装,这就是组件。
47
组件与组件模型
48
组件与组件模型
? 组件模型是组件及其环境所必需的一组要求。组
件模型中虽然最重要的是组件自身及其封装;但
是从应用组件和开发的角度,我们也非常关心如
何定义和约束接口。
? 组件模型中的接口定义了其他代码实体(可以是
应用程序、其他组件及一些容器等)与组件之间
的关系 。
49
组件模型接口的分类
? 组件 API(应用编程接口):定义了一组应用程序可以用来使用组件
服务的接口标准。
? 设计模式:是一组类、接口及其关系,提供对一般问题分类常用的设
计解决方案,应用代码通过提供基于设计模式的更具体的且与应用相
关的设计行为来规范设计模式。
? 组件 SPI(服务提供商接口):由专门的组件服务提供商提供,按照
某种标准提供完成某种功能的组件和接口,并且可以修改底层服务而
不改变应用接口。
? 组件 -容器接口:一种被组件假定的容器环境接口。
? 容器 -组件接口:一种被容器假定的组件接口。
50
组件与组件模型
? 组件模型接口可能与平台相关、也可能与平台无关等,这
些可能会影响到对组件模型的选择。这方面的问题可以概
括如下:
? 语言相关
? 平台相关
? 分布式通信协议相关
? 数据表示相关
? 通信同步
? 行为定制
51
基于组件的开发
? 基于组件的开发( Component-Based Development,
CBD)已经成为开发数据库应用的基本技术,组件
可以是商用的现成产品,也可以是自己开发的,重
要的是整个应用的开发要遵循基于组件的方案和结
构。
52
基于组件的开发
? 基于组件的开发以面向对象技术为基础,
所以基于组件开发的许多方法都依赖于
UML描述及其相关组件,其开发过程也
与面向对象方法类似。
53
基于组件的开发
? 在需求分析阶段要分析系统的行为以及组件接口,
在此阶段要明确组件模型、标准组件接口以及系
统外部的组件接口等。
? 在概要设计阶段要:
? 确定组件模型技术,通过确定组件模型技术可以驱动
用于系统设计的技术和工具;
? 确定组件,根据系统的行为需求和支持的接口与技术
定义组件;
? 组件选择,对一些商用组件和其他项目开发的组件进
行适用性评估,以选择合适的组件应用到项目中。
54
基于组件的开发
? 在详细设计阶段主要对组件进行详细设计和调整,
并确定组件实现规范。
? 在组件实施阶段完成代码的编写和修改,或通过
子类来扩展已有的组件代码。
? 在组件选择、调整和编码之后,需对组件进行单
元测试。
? 在完成单元测试之后则可以进行组件装配,从而
形成功能模块,然后对功能模块进行测试。
? 最后进行系统的测试和部署。
55
有关标准
? 关于组件模型有许多标准, 近几年最具代表性的
是用于构建 Java企业系统的模型, 其中 J2EE
( Java 2 Enterprise Edition) 提供了一种集成的,
简化的访问组件和建立组件的方法 。 除此之外,
也有其他一些重要的模型, 如对象管理组织
( Object Management Group,OMG) 和微软公
司也定 义了 很有影 响的 组件 模型和 方法 。
56
有关标准
? 小应用程序 Applet
? JavaBean
? CORBA
? RMI
? COM/DCOM
? Java API/SPI
? J2EE Web组件
? J2EE企业 JavaBean
? CORBA component
57
小应用程序 Applet
? Java Applet定义了简单的容器 -组件和
组件 -容器接口,使 Java代码可以嵌入
到 Web浏览器中的 Applet中运行。
58
JavaBean
? JavaBean组件模型定义了编写 Java代码的标准
模型, 对外提供组件属性和事件以及 JavaBean
容器的接口 。 容器一般嵌入到一个集成的开发
环境中, 以便 JavaBean组件在设计时使用基于
GUI( Graphic User Interface) 的工具进行定制 。
59
CORBA
? 通用对象请求代理体系结构 ( Common Object
Request Broker Architecture,CORBA) 是由
OMG定义的分布式组件模型标准 。 该方法通
过标准协议把从分布式客户机发出的调用请
求传送至服务器端的代码, 该代码将激活分
布式对象的方法 。 除了标准的组件通信和激
活框架之外, CORBA模型还包括一些标准的,
更 高 级 的 分 布 式 组 件 服 务 和 功 能 。
60
RMI
? 远程方法调用( Remote Method Invocation,
RMI)为分布式访问组件定义了一个 Java相
关的接口模型。 RMI容器环境包含了 Java平
台,并扩展支持使用相同的底层通信协议
(如 CORBA的标准协议的通信)。
61
COM/DCOM
? 微软的组件对象模型( Component Object
Model,COM)定义了一个与在微软平台
上实现的组件交互的标准模型。分布式组
件对象模型( DCOM)是 COM模型的分
布式版本。
62
Java API/SPI
? Java不仅仅是一种语言, 各种 Java API实际
定义了一组标准组件服务, 这些服务能够
被应用程序使用并访问数据库 ( JDBC) 服
务, 事务服务 ( JTS), 消息服务 ( JMS)
等 。 而且这样的 API模块还允许开发人员使
用 SPI把它们插接到不同的底层服务中 。
63
J2EE Web组件
? Java Servlet和 Java Server page是服务器
端的组件,它处理 Web请求和生成 Web
的表示内容。这样的 Web组件运行和操
作在基于 J2EE的 Web容器环境内部。
64
J2EE企业 JavaBean
? 企业级 JavaBean( EJB)是服务器端
的组件模型,它们在 EJB容器和服务
器内操作,这样的服务器能够为 EJB
提供一组标准的服务框架,如事务、
安全和可伸缩性等。
65
CORBA component
? CORBA component是基于 CORBA的
应用服务器模型,它和 EJB模型非常
类似。
66
使用 PowerBuilder和 EAServer开发组件应用
? EAServer( Enterprise Application Server)是 Sybase公
司提供的企业级应用服务器,可以应用于企业级 Web、
分布式和多层客户 /服务器应用的解决方案,EAServer
支持 Java,JavaBean,CORBA,COM和 J2EE等标准组
件模型。
? PowerBuilder不仅仅是客户端的数据库应用开发工具,
它还可以开发 EAServer组件。 PowerBuilder和 EAServer
一起提供了一个无缝的开发和提交环境,支持 HTML、
Java,XML等语言,并且能够访问商用的系统组件。
67
PowerBuilder和 EAServer是完全集成的
? PowerBuilder应用程序可以充当 EAServer服务器的客户;而
EAServer服务器的中间层组件也可以包含 PowerBuilder的不
可见的定制类用户对象。
? EAServer可以直接与 PowerBuilder的不可见用户对象通信,
PowerBuilder的不可见对象也可以与 EAServer通信。在
PowerBuilder上开发设计的组件能充分利用 PowerScript容易
使用和适应性好的优点,并且可以使用丰富的 PowerBuilder
系统对象。
68
PowerBuilder和 EAServer是完全集成的
69
EAServer的服务器结构
? 组件和包
? 连接缓存
? 事务支持
? 实例池
? 共享组件
? 装入平衡、失败和高有效性
70
组件和包
? EAServer服务器可以为 PowerBuilder,Java,C,C++和
COM/ActiveX组件提供服务,所谓组件是一个被封装
了的类的集合,它包括了在 EAServer事务服务器中运
行的业务逻辑。组件由一个或多个方法组成,这些方
法为 EAServer的客户端提供服务。如果客户端要求组
件提供服务,则必须先创建组件的一个实例,然后才
能调用组件上的方法。
? EAServer中有一个包的概念,包是组件的集合,是将
应用程序资源分组组织在一起,并作为分布式计算的
一个单元。
71
连接缓存
? 为了优化数据库处理,EAServer提供了对连接
缓存的支持。连接缓存允许 EAServer组件共享
与远程数据库服务器预先分配的连接,避免由
于组件的每个实例都创建一个不同的连接而增
加开销。通过建立连接缓存,EAServer服务器
可以重用对相同数据存储建立的连接。
72
事务支持
? 在 PowerBuilder中开发的组件可以在 EAServer事务
中共享。当一个组件提供事务支持时,EAServer
确保组件的数据库操作作为事务的一部分执行。
? 多个 EAServer组件可以共享一个单一的 EAServer
事务; EAServer确保数据库的改变是由共享的事
务通过提交和撤消实现的。如果在定义组件时使
用了 EAServer事务,那么所有的工作都通过组件
实现,并且这些组件共享已经发生的事务。
73
实例池
? EAServer组件对实例池提供支持。实例
池允许 EAServer客户重用组件实例,从
而避免了由于重复分配组件实例而引起
的资源消耗,因而增强了 EAServer服务
器的性能。
74
共享组件
? EAServer对共享组件提供支持,允许客户共享状
态信息。共享组件允许多个客户共享相同的组件
实例。当程序员插接一个 PowerBuilder不可见对
象到 EAServer时,可以指定该对象为 EAServer共
享组件。使用共享组件的好处是:
? 对公共数据提供方便的存取,否则将需要被每
个客户连接分开检索;
? 减少数据存取的次数,允许数据库服务器去做
其他的处理。
75
命名服务
? EAServer执行 CORBA标准 CosNaming命
名服务,当应用程序中包括多个服务器
时,命名服务允许定义本地服务器名代
替服务器地址。通过定义初始服务器名
再加上包和组件名就可以标识组件。
76
装入平衡、失败和高有效性
? EAServer提供对装入平衡、失败和高有效性的支持,
这些特征确保进入服务器的客户要求分布在多个
EAServer服务器之中,当一个或多个 EAServer服务
器已经无效时,EAServer服务仍然有效。
? 为了实现装入平衡、失败和高有效性,必须创建一
个服务器集群(一组运行在不同机器上的 EAServer
服务器),集群中的服务器共享为客户提供的服务。
如果集群中的一个或多个服务器失败或掉线,集群
中的其他服务器仍可提供对客户端的服务。
77
EAServer的客户端结构
? 存取 EAServer服务器的 PowerBuilder客户
有三种主要的组件:
? 用户接口
? Connection(连接)对象
? EAServer代理对象
78
用户接口
? 用户接口是指客户应用程序上包括的所
有与业务用户进行交互的窗口和菜单,
以及客户应用程序中包含的响应用户的
每个动作的程序,用户动作可以是单击
命令按扭,或者选择了菜单项,或是在
编辑框中输入了数据等,而相应的程序
则完成对应的工作。
79
Connection对象
? Connection对象负责客户应用程序与 EAServer
的连接并要求它的服务。 Connection对象应该
在客户端的程序中实例化,它的属性值包括了
PowerBuilder客户与 EAServer服务器连接所需
要的信息。 Connection对象要验证 EAServer的
主机名和端口号,并且选择一个默认的包。
80
EAServer代理对象
? EAServer服务器中的每个组件在客户应用程序
中都有一个与之对应的代理对象,在运行期间,
代理对象所代理的远程对象可以由客户在本地
实例化。只有创建了远程对象的实例,才能对
远程对象上的函数进行调用。
81
其他客户端技术
? 创建兼容 CORBA的客户
? 创建兼容 EJB的客户
? 建立 SSL连接
82
从 EAServer组件访问数据库
? 在 PowerBuilder下开发的 EAServer组件可
以使用数据存储( DataStore)对象与数
据库进行交互,数据存储对象是不可视
的数据窗口控件,除了没有可视属性外,
数据存储对象与数据窗口控件具有完全
相同的特征和用途。
83
从 EAServer组件访问数据库
? 为了能让客户看到服务器上的被检索数据,
必须提供一个可视接口给用户,也就是要
在客户端建立一个带有数据窗口控件的窗
口。当服务器检索到数据时,客户端的数
据窗口就能显示出服务器上的数据存储所
检索到的结果集。同样,当用户修改了客
户端的数据时,服务器上的数据存储内容
要被更新,以反映客户端上的数据窗口控
件的当前状态。
84
使用连接缓存( connection caching)
? 为了优化数据库处理,EAServer提供了
对连接缓存的支持。连接缓存允许
EAServer组件共享预先分配的远程数据
库服务器的连接池,以避免由于组件的
每个实例都创建不同的连接而增加开销。
通过建立连接缓存,EAServer服务器可
以重用对相同数据存储建立的连接。
85
实现检索操作
? 为了使用数据存储实现检索操作,首先
必须在程序中建立一个数据存储对象的
实例,并为该数据存储对象分配一个数
据窗口对象;然后,需要为数据存储设
置一个事务对象。一旦完成了这些设置
步骤,就可以检索数据到数据存储,并
实现各种对检索结果集的处理。
86
数据窗口同步
? 在传统的客户 /服务器应用程序中,数据
库修改是由运行在客户端的应用程序完
成的,PowerBuilder可以自动的管理数据
窗口状态信息。但是在分布式和组件处
理中,情况有所不同,因为应用程序组
件将客户与服务器分开了,所以需要写
程序来保证客户端的数据缓冲区和状态
标志与服务器上的数据存储同步。
87
移动数据窗口缓冲区和状态标志
? 为了从一个数据窗口(或数据存储)提供完整的状态信息
到另一个数据窗口,程序中必须包括下列处理:
? 捕获源数据窗口的当前状态;
? 将源数据窗口的当前状态应用到目标数据窗口。
? 当一个数据窗口(或数据存储)发生了变化,为了让另一
个数据窗口也随之变化,程序中必须包括下列处理:
? 捕获源数据窗口的变化;
? 将源数据窗口的变化传送到目标数据窗口。
88
Web数据库应用开发
Components
Browser or C/S
Components
Client/Server
Application
Browser
Production
Data
Production
Data
Production
Data
Production
Data
Production
Data
Enterprise JavaBeans,
COM,CORBA,PB
NVOs
Templates,Scripts
Page
ServerHTML Pages
FileSystem
Very
Thin
Thin
Rich
Web Server
Components
Transaction
Server
Client Middle Tier Data
89
Web数据库应用的一般结构和方法之一
? 中间件负责管理 Web服务器和数据库服务器之间的通信并
提供应用程序服务,它能够直接访问数据库或调用外部程
序或利用脚本代码来访问数据库,因此它可以提供与数据
库相关的动态 HTML页面,或执行用户查询,并将查询结
果格式化成 HTML页面,然后通过 Web服务器返回给用户
浏览器。
90
Web数据库应用的一般结构和方法之二
? 通过 Web浏览器把应用下载到客户端运行,在客户端直接
访问数据库。客户端应用包括,Java Applet,ActiveX、
Plug-in等等,其中最典型的就是 Java Applet。
? Java是一种与平台无关的编程语言,因而具有极强的可移
植性。在 Java Applet中访问数据库,可以使用 JDBC技术,
通过 JDBC提供的 API来实现对分布在网上的不同数据库的
各种操作。
91
使用 PowerBuilder和 EAServer建立 Web应用
? Power Dynamo简介及工作流程
? Web数据窗口
? Web Target( Web目标)
92
Power Dynamo简介及工作流程
? EAServer实际上有两部分组成:
? Jaguar CTS( Component Transaction Server)
? Power Dynamo
93
Power Dynamo功能介绍
? Power Dynamo负责数据库与 Web站点的
协调和管理,负责解释 Web页面中的数
据请求。为此,使用 Power Dynamo可以
在网页中嵌入相关的命令,当客户端浏
览器显示网页或与其交互时,Power
Dynamo开始处理这些嵌入的指令,并将
从数据库中获得的动态数据嵌入到 Web
页面中。
94
解释器
? Power Dynamo的核心是一个解释器,负
责处理嵌入在 HTML页面和其他文档中
的标记( Tags)指令(如嵌入的 SQL语
句等),并将结果嵌入在 HTML页面中
返回给 Web服务器。
95
HTML模板和脚本
? Power Dynamo可以处理静态 Web页面,
还可以处理两种类型的动态页面:
HTML模板和 Script脚本。
96
在模板中嵌入动态内容
? 使用 Power Dynamo可以在 HTML或 XML
模板中嵌入 SQL语句,这使得用户可以
通过 Web页面灵活的访问数据库。由于
支持文本替换和主变量,所以不仅可以
嵌入静态的 SQL语句,还可以嵌入动态
的 SQL语句。
97
Power Dynamo工作流程
5) Power Dynamo页面服务器将结果
以 HTML格式返回给 Web服务器;
6) Web服务器将最终结果返回给客户
端浏览器。
1) Web服务器将请求传送给 Power
Dynamo;
2) Power Dynamo从模板库中取出相
应的 HTML模板,处理嵌入在模
板中的指令;
3) 根据要求从数据库中提取数据,
然后继续处理脚本;
4) 如果有 Jaguar CTS组件调用,则
完成相应的组件方法调用和执行,
执行结果返回给 Power Dynamo;
98
Dynamo Script语言简介
? Power Dynamo的脚本语言称作 Dynamo
Script,是一种服务器端的脚本语言,它
用于控制从 Web服务器传递给客户机浏
览器的动态内容。 Dynamo Script在语法
上和 JavaScript非常相似。
99
Web数据窗口
? Web数据窗口( DataWindow)是用于 HTML
的数据窗口,它提供了一种瘦客户端解决方
案,可以提供 PowerBuilder数据窗口的大部
分数据操作功能,而且不需要在 Web客户端
安装任何 PowerBuilder动态连接库( DLL)
或其他组件。显示在 Web浏览器中的数据窗
口和数据窗口画板中设计的数据窗口看起来
非常相像。
100
Web数据窗口的工作流程
1) 在客户端浏览器中用户发出一个页面请求(含有 Web数据窗口);
2) Web服务器将请求传递给页面服务器,然后由页面服务器查找请求
页面的模板并执行模板中的服务器端脚本;
3) 服务器端脚本连接到服务器组件,并将数据窗口和数据库连接的
信息传递给组件;
4) 服务器组件的方法从数据库中为数据窗口检索数据,并根据数据
窗口的定义、数据和状态等生成 HTML或 JavaScript页面;
5) 服务器组件将 HTML或 JavaScript页面返回给页面服务器;
6) 页面服务器使用生成的 HTML或 JavaScript页面替换 Web请求页面中
服务器端的脚本,并通过 Web服务器将这个页面传送给 Web客户端
浏览器;
7) 用户通过数据窗口进行信息交互,如修改数据或请求下一页数据
等;
8) Web服务器接收带有用户需求行为参数的 URL,并传送给页面服务
器,然后开始以上各步骤的循环。
101
Web Target( Web目标)
? Web目标由建立 Web应用的一组文件和组
件构成,使用 PowerBuilder建立的 Web应用
可以提供交互的、动态的内容,这是通过
集成数据库中的数据、客户和服务器端的
脚本以及访问事务服务器上的组件来实现
的。使用 PowerBuilder开发环境可以简化对
各种类型 Web应用的开发和维护。
102
创建 Web目标
103
Web目标中可以包含如下文件类型
? HTML文件,HTML文件确定 Web应用的显示
风格,也提供将组件应用于网页的结构;
? 脚本文件,Web目标支持客户端和服务器端的
脚本;
? 组件文件,Web目标可以包含 EAServer组件、
Web数据窗口,Java Applet和 Java Bean组件、
Microsoft Active X控件等;
? 附属文件,Web目标中可以包含图像文件、音
频文件、视频文件等各种附属文件。
104
建立 Web页面
105
页面开发环境
106
HTML源代码编辑器
107
预览页面
108
编译和部署
? 在完成了 Web目标的设计和实施后,需要对目标进行编译
和部署( Deploy)。用户在开发的过程中可以随时进行编
译,这时可以对 Web目标的一部分或全部进行测试。
? 编译一个 Web目标包括两个步骤:
? 提供链接验证;
? 将 Web目标中的文件传送到编译文件夹中,以便在部署时使用。
? 部署一个 Web目标包括如下步骤:
? 获得:从编译文件夹中检索和获得文件;
? 转换:对要部署的文件进行转换和处理,按照适合目标服务器的
需要改变 HTML标签和脚本;
? 存放:将部署的页面发送到 Web站点或应用服务器。
109
【 本章小节 】
? 本章介绍了目前流行的数据库应用的体
系结构,普通的客户端开发、如何访问
和操作数据库是所有开发的基础。组件
技术越来越被人们重视,无论是 Web应
用、还是非 Web应用,组件技术将普遍
被人们使用。组件化的开发,对提高软
件的生产率和软件的质量都有着非常重
要的意义。
110
对于新环境要有良好的适应能
力 …