xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
学 习 使 用corba 编 写 访 问 服 务 器 对 象 的 分 布 式java 小 应 用
------------------------------------------------------------------------
摘 要: 若 想 实 现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 软件 资 源 加 以 利 用, 或 是 编 写 真 正 功 能 强 大 的 应 用 程 序, 使inte.net/intr.net 成 为 通信 主 干, 所 使 用 的 技 术 必 须 具 有 以 下 特性:
曋?持 现 有 的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 接 口 对 象
orbinfoquery= orbquery.orbinfohelper.bind(orb, "orbinfo");
执 行 了bind() 方 法 调 用 之 后, 我 们 的orbinfoquery 本 地 变 量 与 服 务器 的orbinfo 对 象 绑 在 一 起。这 一 操 作 完 成 之 后, 我 们 就 可 以 调用 帮 助 方 法 来 实 现 客 户 端 小 应 用。 记 住, 尽 管 示 例 中 我 们 完 全使用 了java 语言, 但 实 际 上, 服 务 器 对 象 也 可 以 用 其 他 语 言 来 实 现, 如:cobol、c + +、ada 和small talk。
结 论
与 单 纯 的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 对 象, 开 发 者 不 得 不 使 用inte.net 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 提 供 了 集成 的 基 础, 这 种 集 成 是 指 新 开发 的 代 码 和 已 有 对 象 的 集 成, 同 时 允 许 将 来 加 以 扩 展。 在 做 出取 此 舍彼 的 选择 之 前, 你 必 须 权 衡 上 面 的 各 种 因 素, 并 仔 细 审 视 每 种 技 术 的现 状。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器