当前位置: 首页 > 图灵资讯 > 技术篇> CORBA 与Java 的 结 合 使 用

CORBA 与Java 的 结 合 使 用

来源:图灵教育
时间:2024-02-25 13:56:06

  摘 要: 若 想 实 现Web 上 分 布 式 客 户 机/ 服 务 器 模 式 的 应 用 程 序,可 以 选 择 多 种 不 同 的 技 术。 但 是, 对 于 必 须 服 务 于 大 量 用 户 的应 用, 我 们 认 为 应 该 首 选择CORBA, 因 为 它 具 有 可 扩 展 性 和 业 界 广泛 的 支 持。 因为CORBA 的 强 健 性 可 以 提 高Java 编 程 语 言 的 性 能, 利 用 已 有 的 基于 标 准 的 技 术,Java 开 发 者 可 以 编 写 出 功 能 强 大 的Web 应 用 程 序。

  在 这 篇 文 章 里, 我 们 首 先 简 单 介 绍 一 下CORBA, 然 后 作 为 该 技术 的 实 例, 我 们将 着 手 编 写 一 个N 层 客 户 机/ 服 务 器 应 用 程 序。 另 外, 在 附 文 中, 我 们 对 几 种 分 布 式 对 象 技 术 作 了 一 个 比 较, 它 们 分 别 是CORBA、RMI 还有DCOM。利 用HTML 表 和 通 用 网 关 接 口(Common Gateway Interface), 用 户 可 以 对Web 网 点 上 的 服 务 器 脚 本 进 行 交 互 式 的 访 问。 许 多 网 点 上 使 用这 种 技 术 提 示 用 户 输 入 用 户 名 和 密 码。 这 些 东 西 传 入 服 务 器脚 本 之 后, 用 于验 证 该 用 户 是 否 可 以 访 问 网 点 中 的 某 一 部 分 内 容。 这 一 过 程用 到 HTTP, 而 它 是 一 种 无 状 态(stateless) 的 协 议。 每 次 下 载 一个 页 面, 客 户 机 就 与 服 务 器 完 全 脱 离, 服 务 器 方 无 从 得 知 客 户机 的 信 息, 更无 法 知 道 脱 离 后 的 客 户 机 正 在 进 行 的 动 作。 这 样, 哪 怕 是 在 成功 的 登 录 到 某 一 网 点 之 后, 客 户 程 序 每 查 询 一 个 页 面, 仍 需将 用 户 名 和 密 码 传 向 服 务 器 方 进 行 重 复 的 认 证。 换 句 话 说, 在你 的 客 户 应 用程 序(Web 浏 览 器) 和 服 务 器 应 用 程 序 之 间, 不 存 在 局 部 变 量、方 法 调 用 或 是 对 象。经 过 数 十 年 的 努 力, 软 件 开 发 者 们 几 乎 可 以 成 功 地 将 代 码 以对 象 的 形 式 加 以 封 装。

  但 是, 上 面 提 到 的 现 象, 无 疑 表 明 了 我们 正 在 倒 退, 因 为 那 是 无 状 态 的、 批 处 理 的 计 算 模 式。当 然,CGI 技 术 并 非 一 无 是 处。Web 给 我 们 带 来 了 革 命 性 的 优 势,那 就 是 基 于 标 准 的 开 放 协 议 和 与 平 台 无 关 的 独 立 性。 尽 管 成千 上 万 的Web 网 点 使 用HTTP 和CGI 来 获 得 用 户 信 息、 在 服 务 器 上 运行 一 段 脚 本、 甚至 还 可 能 向 用 户 返 回 信 息, 但 是 从 传 统 的 的 观 点 看 来, 这 些 网点 并 不 能 算 是 真 正 的“ 应 用 程 序”。 除 此 之 外, 由 于 新 技 术 的应 用(HTTP 和CGI), 所 有 这 些 网 点 的 代 码 必 须 要 全 部 重 写。 想 要对 已 有 的Web 软件 资 源 加 以 利 用, 或 是 编 写 真 正 功 能 强 大 的 应 用 程 序, Internet/Intranet 成 为 通 信 主 干, 所 使 用 的 技 术 必 须 具 有 以 下 特性:曋? 想 要对 已 有 的Web 软件 资 源 加 以 利 用, 或 是 编 写 真 正 功 能 强 大 的 应 用 程 序, Internet/Intranet 成 为 通 信 主 干, 所 使 用 的 技 术 必 须 具 有 以 下 特性: 现 有 的C、C + + 和COBOL 代 码?持有Java, 以 建 立 具 有 可 移 值 性、 平 台 独 立 性 的 面 向 对 象 的 应用 程 序暽?业 中 立 性, 只 有 这 样, 应 用 程 序 才 易 于 维 护, 且 不 会 被 时 间淘 汰。昵?扩 充 性, 能 够 支 持 大 {"C++, Java", "Java, Smalltalk, Ada95,C++", "Java, C++","Java, C++", "Java, C++"},{"http://www.expersoft.com", "http://www.iona.com","http://www.visigenic.com","http://www.software.ibm.com/ad/cb","http://www.sun.com/solaris/neo/solaris_neo/index.html"}};ORBQuery(String name) {super(name);}public java.lang.String GetName(int index){String Name;Name = ORBVendors[index][0];return Name;}public java.lang.String GetVendor(int index){String Vendor;Vendor = ORBVendors[index][1];return Vendor;}public java.lang.String GetOS(int index){String OS;OS = ORBVendors[index][2];return OS;}public java.lang.String GetLanguages(int index){String Languages;Languages = ORBVendors[index][3];return Languages;}public java.lang.String GetURL(int index){String URL;URL = ORBVendors[index][4];return URL;}}至 此, 我 们 已 经 写 好 了 所 有 服 务 器 方 必 需 的 代 码, 下 一 步 的 工作 是 创 建 客 户 小 应 用, 初 始 化 客 户ORB, 进 而 击 活 并 调 用 刚 刚生 成 的 服 务 器 对 象。

  创 CORBA建设 小 应 用正 如 服 务 器 对 象 要 向 服 务 器ORB 登 记 一 样, 客 户 端 小 应 用 或 应用 程 序 需 要 向 客 户 机ORB 登 记。 当 要 获 得 远 程CORBA 对 象 时, 客 户机 采 用 了 一 种 间 接 的 方 法, 它 通 知 客 户 机ORB 其 意 图, 由ORB 负 责ORB 到ORB 的 通讯。 这 种 请 求 方 式 由 下 面 两 行 代 码 实 现( visiBroker for Java 中):// 初 始 化 ORB ( 使 applet)org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(this);// 检 索applet 要 调 用 的 ORBInfo 接 口 对 ORBInfoQuer= ORBQuery.ORBInfoHelper.bind(orb, "ORBInfo");执 行 bind() 方 法 调 用 之 后, 我 们 ORBInfoQuery 本 地 变 量 与 服 务器 ORBInfo 对 象 绑 在 一 起。 这 一 操 作 完 成 之 后, 我 们 就 可 以 调用 帮 助 方 法 来 实 现 客 户 端 小 应 用。 记 住, 尽 管 示 例 中 我 们 完 全使 用 了Java 语言, 但 实 际 上, 服 务 器 对 象 也 可 以 用 其 他 语 言 来 实 现, 如:COBOL、C + +、Ada 和Small talk。结 论与 单 纯 的Java 小 应 用 相 比, 创 CORBA建设 Java 应 用 稍 显 复 杂。结 论与 单 纯 的Java 小 应 用 相 比, 创 建立CORBA Java 应 用 稍 显 复 杂。 事 实 上, 这 同 样 比 用RMI 创 建 纯 粹 的Java 分 布 式 对 象 应 用 要 难 一 些。

  但是,CORBA 和Java 的 联 合, 所 创 建 的 应 用 程 序 功 能 更 为 强 大, 更 具可 扩 充 性, 这 是单 纯 用JDK 开 发 所 无 法 比 拟 的。 另 外, 现 实 是 企 业 界 很 少 使 用Java 应 用 程 序。CORBA 是 两 全 其 美 的 选 择, 一 方 面 它 允 许 开 发 者利 用 已 有 的 代 码 保 护 投 资, 另 一 方 面 又 可 以 充 分 发 挥Java 编 程语 言 的 优 势。分 布 式 对 象 另 外 两 种 选 择:DCOM 和RMI大 多 数Java 开 发 者 可 能 更 熟 悉DCOM 和RMI, 这 是CORBA 两 个 主 要 的 竞争 对 手。 现 在 让 我 们 对 三 者 做 一 下 比 较。CORBA 重 描述CORBA 有 几 个 基 本 的 优 点: 与 开 发 语 言 无 关 的 独 立 性, 与 开 发 者无 关 的 独 立 性 和 与 操 作 系 统 无 关 的 独 立 性。CORBA 的ORB 在 当 前每 一 种 主 流 操 作 系 统 上 均 有 实 现( 仅 Microsoft 的 各 种 操 作 系统 来 说,CORBA 获得 的 支 持 甚 至 超 越 DCOM)。 除 此 之 外,CORBA ORB 可 以 访 问 多 种 语言 实 现 的 对 象( 包 括C++、COBOL、Smalltalk 还有Java)。 借 助 IIOP, 某一 开 发 者( 比 如 说说Visigenic) 开 发 CORBA ORB 能 够 获 取, 操 作 远 程的 由 其 他 的 开发 者( 比 如 谈谈IONA) 开 发 的 对 象。Java ORB 允 许 客 户 端 在 没 有 安 装任 何 特 别 软 件 的 情 况 下 实 现Java 客 户 端 应 用 程 序。(Java ORB 的 类可 与 小 应 用 一 起 动 态 下 载, 也 可 能 与 浏 览 器 捆 绑 在 一 起。)DCOM: Microsoft 的 法 宝目 前,Microsoft 的 分 布 式 组 件 对 象 模 型(Distributed Componont ObjectModel) 仅 运 行 于 两 种 操 作 系 统 之 上:Windows 95 Windows NT4。Microsoft 正 在 与 第 三 方 开 发 商 协 作, 以 将DCOM 移 到 其 它 的 操 作 系统 上( 包 括MVS 和 几个UNIX 操 作 系 统)。 就像CORBA 一 样,DCOM 是 独 立 于 语 言 的, 它 使用Microsoft 的 对 象 描 述 语 言(ODL) 通 过 接 口 对 对 象 加 以 描 述。

  与CORBA 相 比,DCOM 有 三 个 重 大 缺 点。 首 先, 它 由 单 一 开 发 者( 微软) 定 义 并 控 制, 这 大 大 限 制 了DCOM 使 用 者 的 选 择 范 围( 比 方 说开 发 工 具 和 风 格)。 其 次,DCOM 缺 乏 众 多 的 平 台 支 持, 这 极 大 程度 地 制 约 了 代码 的 可 重 用 性 和DCOM 应 用 的 可 扩 展 性。 最 后, 与CORBA 相 比,DCOM 是一 种 非 常 不 成 熟 的 技 术。 尽 管 微 软 目 前 正 为DCOM 加 入 消 息 和 事务 支 持, 但 这 些 功 能 在1994 年 CORBA 2.0 就 已 经 实 现 了, 并 且 正由 几 家 不 同CORBA 软 件 开 发 商 所 发 行。为 了 使 一 个Java 的 小 应 用/ 应 用 程 序 得 以 访 问 服 务 端 的DCOM 对 象, 开 发 者 不 得 不 使 使用Internet Explorer 浏 览 器 Windows 95/NT 平 台,只 有 这 样 才 能 支 持 客 户 机 软 件。 这 样 的 限 制 当 然 削 弱 了 应 用程 序 在Web 上 的 可用 性。 而 另 一 方 面,DCOM 的 一 个 重 大 优 势 在 于, Microsoft WindowsNT/95 用 户 免 费。 过 去 的 历 史 已 经 多 次 表 明, 这 是 与Microsoft 竞 争的 重 大 障 碍。RMI:Sun 的Java-Only 解 决 方 案例Remote Method Invocation 是 最 新 的JDK 1.1 中 的 重 要 特 色。RMI 使 Java客 户 能 够 访 问 远 地 的 服 务 对 象。 这 听 起 来 似 乎 十 分 类 似 在CORBA, 但 两 者 并 不 一 样。 其 关 键 在 于 服 务 器 端 的 应 用 程 序 也 必 Java必须使用 编 写, 且 只能 使 用JDK 1.1 中 提 供 的 工 具。 你 根 本 无 法 把 过 去 编 制 的 代 码 加到 新 程 序 中 去, 除 此 之 外,RMI 还 有 许 多 其 它 缺 陷。与CORBA 不 同,RMI 没 有 服 务 这 一 概 念。

  另 外, 根 据RMI 写 出 的Java 服务 器 对 象 往 往 性 能 低 劣, 这 个 缺 点 源 于Java 虚 拟 机。( 有 趣 的 是,Java CORBA 服 务 器 比RMI 服 务 器 表 现 出 更 好 的 性 能。)RMI 也 不 包括 就像CORBA ORB 那样 的 对 象 击 活 功 能。实 际 上,RMI 及Java 技 术 更 可 能 向OMG 的 标 准 靠 拢, 而 不 是 背 道 而驰。Sun 已 经 宣 布,Java 事 务 服 务(Java Transaction Serveces) 将 建 立 在OMG 的 对 象 事 务 服 务(Object Transaction Serveces)。 该 公 司 还 曾 发 布其 长 远 计 画:使RMI 对 象 可 以 通 过IIOP 互 通 讯。总 而 言 之,RMI 对 于 用 纯Java 书 写 的 小 规 模 的 应 用 程 序 来 说, 是一 种 可 行 方 案。 但是CORBA 提 供 了 集 成 的 基 础, 这 种 集 成 是 指 新 开发 的 代 码 和 已 有 对 象 的 集 成, 同 时 允 许 将 来 加 以 扩 展。 在 做 出取 此 舍 彼 的 选择 之 前, 你 必 须 权 衡 上 面 的 各 种 因 素, 并 仔 细 审 视 每 种 技 术 的现 状。