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毫秒