Database 版 (精华区)

发信人: wodeji (西西), 信区: Database
标  题: [转载] PowerBuilder 开 发 系 列 谈 (8) 
发信站: 紫 丁 香 (Tue Sep 29 17:51:00 1998), 站内信件

【 以下文字转载自 Programming 讨论区 】
【 原文由 two 所发表 】


 ----1996 年6 月 推 出 的Power-Builder 5.0, 增 加 了 许 多 新 特 性, 其 中 较 为 引 人 注
 目 的 是 分 布 式 PowerBuilder 的 计 算 方 式(Distributing PowerBuilder)。 

 ---- 所 谓 分 布 式 计 算 方 式 和 三 级 系 统 结 构, 是 近 年 来 提 出 的 一 种 新 的 计
 算 方 式, 这 就 是 在 传 统 的 客 户 机/ 服 务 器 两 级 结 构 中 再 增 加 一 个 称 作 应
 用 服 务 器 的 中 间 级, 用 以 执 行 复 杂 的 商 业 逻 辑 计 算。 传 统 的 两 级 结 构 中
 商 业 逻 辑 一 般 是 放 在 客 户 端, 少 量 的 则 以 存 储 过 程 的 形 式 放 在 数 据 库 服
 务 器 中。 将 商 业 逻 辑 从 其 他 两 级 中 独 立 出 来, 将 更 适 应 于 日 益 复 杂 化 和
 日 益 变 化 的 商 业 逻 辑 的 需 要, 从 而 带 来 了 开 发、 维 护 和 使 用 时 的 便 利。
 虽 然 三 级 结 构 在 传 统 的 数 据 库 领 域 还 没 有 被 人 们 广 泛 接 受, 但
 在Internet&Intranet 领 域, 人 们 已 开 始 大 量 使 用 这 种 分 布 式 的 计 算 方 式 了:
 在Intranet 中, 系 统 至 少 就 是 由 浏 览 器( 客 户 机)、Web 服 务 器( 应 用 服 务 器)、
 数 据 库 这 样 的 三 级 结 构 组 成。 而PowerBuilder 支 持 这 种 分 布 式 的 计 算 方 式,
 这 使 得 我 们 使 用PowerB uilder 开 发Internet 应 用 成 为 了 可 能。 

 ---- 所 谓 分 布 式PowerBuilder 的 实 现 就 是 在 客 户 端 远 程 地 初 始 化 一 个 在 服
 务 器 端 的 用 户 自 定 义 对 象, 并 且 调 用 这 一 对 象 的 属 性 和 函 数。 

                      分 布 式PowerBuilder 中 的 新 概 念 

 ---- 服 务 器 应 用: 在 以 往 的PowerBuilder 版 本 中,Power-Builder 应 用 是 作 为 客 户
 机/ 服 务 器 体 系 结 构 中 的 客 户 端 应 用 提 交 的, 在 分 布 式PowerBuilder 中 引 入
 了 服 务 器 应 用 这 个 概 念。 这 个 应 用 包 括 了 不 可 视 的 用 户 对 象, 并 被 客 户
 端 应 用 调 用, 这 些 用 户 对 象 被 称 作 远 过 程 对 象。 这 种 调 用 可 以 是 跨 进 程
 或 跨 硬 件 平 台 的。 分 布 式PowerBuilder 在 服 务 器 端 有 一 个PowerScript 对
 象Transport 来 监 听 客 户 端 对 过 程 调 用 的 需 求, 而 这 个 服 务 器 端 的 应 用 也 可
 以 同 一 般 传 统 的 客 户 机/ 服 务 器 应 用 的 客 户 端 或 远 程 的 客 户 端 应 用 一 样
 来 调 用 另 外 的PowerBuilder 服 务 器 应 用 。 

 ---- 客 户 应 用:PowerBuilder 客 户 应 用 是 用 以 调 用 远 端 对 象 的 部 分。 分 布
 式PowerBuilder 应 用 包 括 了 一 个 新 的 对 象, 称 作Connection, 用 以 连 接PowerBuilder
 服 务 器 应 用。 当 同 服 务 器 建 立 连 接 后, 客 户 应 用 将 像 调 用 本 地 的 不 可 视
 用 户 对 象 一 样 调 用 远 程 对 象。 

 ---- 远 程 对 象: 与 其 他 的 不 可 视 用 户 对 象 类 同。 一 个 远 程 对 象 包 含 了
 用PowerScript 编 写 的 商 业 逻 辑, 放 在 服 务 器 端, 作 为 不 可 视 用 户 对 象 的 特
 例, 远 程 对 象 可 以 引 用 各 种 不 可 视 的 函 数 和 数 据 库 的 指 令, 如 使
 用DataWindow 的 不 可 视 形 式DataStore 来 实 现 对 数 据 库 访 问 的 封 装 等。 远 程
 对 象 像 是 一 个 过 程 或 函 数 的 调 用, 并 支 持 参 数 传 递 和 返 回 结 果, 支 持 除
 对 象 数 据 类 型 以 外 的 其 他 所 有 类 型。 

 ---- 传 输 对 象: 是 服 务 器 端 用 以 接 收 客 户 请 求 的 特 殊 连 接 对 象。 当 使
 用create transport 命 令 创 建 一 个 传 输 实 例 后, 该 对 象 以 对 象 的 属 性 中 所 定 义
 的 协 议 监 听 接 收 客 户 的 请 求。 这 个 对 象 的 属 性 包 括 通 讯 驱 动 名 称、 通
 讯 协 议 类 型、 超 时 协 议 等, 得 到 和 设 定 这 些 属 性 的 方 法 同Po werBuilder 的
 其 他 对 象 如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" 的 消
 息 框。 

                       


--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: 202.97.236.132]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: whs.hit.edu.cn]
--
※ 转载:.紫 丁 香 bbs.hit.edu.cn.[FROM: cadcam.hit.edu.c]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:205.142毫秒