WEB开发网
开发学院WEB开发Jsp CORBA与Java的结合使用 阅读

CORBA与Java的结合使用

 2008-01-05 19:40:14 来源:WEB开发网   
核心提示:学习使用CORBA编写访问服务器对象的分布式java小应用 沈加翔 编译 摘 要: 若 想 实 现Web 上 分 布 式 客 户 机/ 服 务 器 模 式 的 应 用 程 序, 可 以 选 择 多 种 不 同 的 技 术,CORBA与Java的结合使用, 但 是, 对 于 必 须 服 务 于 大 量

  学习使用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 软 件 资 源 加 以 利 用, 或 是 编 写 真 正 功 能 强 大 的 应 用 程 序, 使Internet/Intranet 成 为 通 信 主 干, 所 使 用 的 技 术 必 须 具 有 以 下 特 性:

支 持 现 有 的C、C + + 和COBOL 代 码

支 持Java, 以 建 立 具 有 可 移 值 性、 平 台 独 立 性 的 面 向 对 象 的 应 用 程 序

商 业 中 立 性, 只 有 这 样, 应 用 程 序 才 易 于 维 护, 且 不 会 被 时 间 淘 汰。

可 扩 充 性, 能 够 支 持 大 量 用 户

它 应 该 被 多 种 平 台 所 支 持, 而 不 是 固 定 于 某 种 平 台 之 上。

开 发 模 型 应 该 是 面 向 对 象 的( 因 为OOP 有 许 多 固 有 优 势)

端 到 端 的 安 全 性

广 泛 的 业 界 支 持
CORBA 入 门
通 读 本 文 之 后, 你 会 发 现 只 有 一 种 技 术, 那 就 是CORBA 才 具 有 上 述 特 性( 其 优 势 不 止 于 此)。 另 外, 由 于Java 和CORBA 是 互 补 的 两 项 技 术, 你 可 以 迅 速 的 学 会 用Java 进 行CORBA 的 开 发。

CORBA 简 介
CORBA 是 一 种 规 范, 它 定 义 了 分 布 式 对 象 如 何 实 现 互 操 作。 在World Wide Web 盛 行 之 前, 特 别 是Java 编 程 语 言 风 靡 之 前,C + + 开 发 者 基 本 将CORBA 作 为 其 高 端 分 布 式 对 象 的 解 决 方 案。

实 际 的CORBA 规 范 归 对 象 管 理 组(Objeot Management Group) 管 辖, 这 是 一 家 由700 多 家 公 司 组 成 的 开 放 的 研 讨 会, 其 工 作 是 制 订 对 象 计 算 的 开 放 标 准。CORBA 对 象 可 以 用 任 何 一 种CORBA 软 件 开 发 商 所 支 持 的 语 言, 如C、C++、Java、Ada 和Small talk, 来 编 写。 同 样 地,CORBA 对 象 可 以 运 行 在 任 何 一 种CORBA 软 件 开 发 商 所 支 持 的 平 台 上, 如Solaris,Windows 95/NT,Open VMS、Digital Unix、HP-UX 或AIX 等。 这 意 味 着, 我 们 可 以 在Windows 95 下 运 行Java 应 用 程 序, 同 时 动 态 调 入 并 使 用C + + 对 象, 而 实 际 上, 该 对 象 可 能 存 储 于 一 个 在Internet 上 的Unix Web 服 务 器 上。

使 用 接 口 描 述 语 言(Interface Description Language) 编 写 的 对 象 接 口, 使 得 与 语 言 无 关 的 独 立 性 成 为 可 能。IDL 使 得 所 有CORBA 对 象 以 一 种 方 式 被 描 述, 仅 仅 需 要 一 个 由 本 地 语 言(C/C++、CORBA、Java) 到IDL 的“ 桥 梁”。CORBA 对 象 的 互 通 信 要 以 对 象 请 求 解 析 器(Object Request Broker) 为 中 介, 这 种 互 通 可 以 在 多 种 流 行 通 信 协 议 之 上( 如TCP/IP 或 是IPX/SPX) 实 现。 在TCP/IP 上, 来 自 于 不 同 开 发 商 的ORB 用Internet Inter-Orb 协 议(IIOP) 进 行 通 讯, 这 是CORBA 2.0 标 准( 最 新 的 版 本) 的 一 部 分。

目 前, 对 于 较 为 流 行 的 编 程 语 言( 包 括C + +,Smalltalk,Java 和Ada 95), 已 经 有 了 许 多 第 三 方 的ORB。 随 着 其 他 语 言 的 逐 渐 流 行,CORBA 开 发 商 毫 无 疑 问 地 要 做 出 相 应 的ORB 来 支 持 它 们。

最 初,OMG 在1990 年 制 订 了 对 象 管 理 体 系(Object Management Architecture), 即OMA, 来 描 述 应 用 程 序 如 何 实 现 互 操 作。 作 为 其 中 的 一 部 分, 需 要 有 一 个 标 准 规 范 应 用 程 序 片 段 即 对 象 的 互 操 作 ─ ─ 这 导 致 了CORBA 的 诞 生。OMA 定 义 了 组 成CORBA 的 四 个 主 要 部 分。

Object Request Broker, 作 为 对 象 互 通 讯 的 软 总 线。

CORBAServices, 定 义 加 入ORB 的 系 统 级 服 务, 如 安 全 性, 命 名 和 事 务 处 理。

CORBAFacilities 定 义 应 用 程 序 级 服 务, 如 复 合 文 档 等。

Business Objects 定 义 现 实 世 界 的 对 象 和 应 用, 如 飞 机 或 银 行 帐 户。
用Java 做CORBA 开 发
为 了 创 建 一 个 分 布 式 的Java 小 应 用, 并 让 它 用CORBA 访 问 服 务 器 对 象, 我 们 利 用 一 个 流 行 的 商 用ORB, 并 用IDL 定 义 对 象 接 口。 在 示 例 小 应 用 中, 我 选 用 了Visigenic Visi Broker for Java。 这 种ORB 已 经 经 过Oracle、Netscape 和Novell 等 公 司 的 认 证, 并 已 被 纳 入Netscape Navigator 4.0。

注 意: 你 可 以 在 非Netscape Navigator 4.0 的 浏 览 器 中 运 行 这 个 小 应 用。 由 于 它 首 先 要 从 别 处 下 载 一 些Java 类 文 件, 启 动 速 度 可 能 会 稍 慢 一 些。

我 们 将 用 一 个 简 单 的Java 小 应 用 调 用 一 个 使 用CORBA 的 服 务 器 对 象。 为 简 单 起 见, 同 样 用Java 书 写 服 务 器 对 象。 该 服 务 器 对 象 用 一 个 数 组 存 储 有 关 各 种CORBA ORB 开 发 商 及 他 们 产 品 的 信 息。 客 户 小 应 用 将 调 用 该 对 象 并 查 询 数 组。 一 个 更 为 完 整 的 例 子( 我 推 荐 你 仔 细 思 考 一 下) 是 将ORB 信 息 存 储 于 关 系 数 据 库 中, 利 用JDBC( 或 是 别 的 数 据 库 访 问 方 法) 获 得 相 关 信 息。 这 种 方 法 将 用CORBA 生 成 一 个 真 正 的 三 层 应 用 程 序。

在 开 始 这 个 例 子 之 前, 我 们 要 先 介 绍 一 下 定 义 对 象 接 口 的IDL 和ORB 的 技 术 细 节。

Object Request Broker 详 述
OMA 最 重 要 的 部 分 就 是ORB。 为 了 创 建 一 个 遵 从CORBA 规 范 的 应 用 程 序,ORB 是CORBA 四 大 部 分 中 唯 一 必 须 提 供 的。 许 多ORB 版 本 根 本 不 带CORBAServices 或 是CORBAFacilities, 你 可 以 自 制( 或 购 买) 商 用 对 象。 但 是, 没 有ORB,CORBA 应 用 程 序 决 对 无 法 工 作。

CORBA ORB 最 显 见 的 功 能, 是 对 你 的 应 用 程 序 或 是 其 它ORB 的 请 求 予 以 响 应。 在CORBA 应 用 程 序 运 行 期 间, 你 的ORB 可 能 被 请 求 做 许 多 不 同 的 事 情, 包 括:

查 找 并 调 用 远 程 计 算 机 上 的 对 象

负 责 不 同 编 程 语 言 之 间 的 参 数 转 换( 如C + + 到Java)

可 超 越 本 机 界 限 的 安 全 管 理

为 其 它 的ORB 收 集 并 发 布 本 地 对 象 的metadata

用 下 载 的 代 码(stub) 中 描 述 的 静 态 方 法 调 用 去 击 活 远 程 对 象 中 的 方 法

用 动 态 方 法 调 用 击 活 远 程 对 象

自 动 击 活 一 个 当 前 没 有 装 入 内 存 运 行 的 对 象。

将 回 调 方 法 导 引 向 其 管 理 之 下 的 本 地 对 象
实 现 细 节 对 软 件 开 发 者 的 透 明 性, 是ORB 的 一 个 杰 出 的 特 性。 用 户 只 须 在 代 码 中 提 供 相 应 的hooks, 用 于 初 始 化ORB 并 向ORB 登 记 该 应 用 程 序, 就 可 以 将 该 应 用 程 序 和 大 量 分 布 式 对 象 建 立 联 系。

用IDL 描 述 对 象
为 了 保 持CORBA 的 商 业 中 立 性 和 语 言 中 立 性, 必 须 有 一 个 中 介, 存 在 于 象C + +CORBA 服 务 器 代 码 和Java CORBA 客 户 机 这 样 的 实 体 之 间。 这 就 是IDL。 一 个 底 层 对 象 的 若 干 相 关 方 法 和 属 性 被IDL 集 入 一 个 单 一 接 口。 一 旦IDL 接 口 定 义 完 成, 它 可 以 以stub 码 或 框 架 代 码(skeleton code) 的 形 式 编 译 成 你 选 用 的 语 言。 在 所 有 的ORB 中 都 有 IDL 编 译 器。 例 如,Visigenic VisiBroker for Java ORB 中 就 含 有 Java/IDL 编 译 器, 而Visigenic VisiBroker for C++ ORB 则 提 供 了C + +/IDL 编 译 器。

有 一 点 值 得 注 意 的 是IDL 不 同 于 其 它 的 面 向 对 象 程 序 设 计 语 言, 我 们 不 能 用 它 指 定 它 所 定 义 的 类 或 是 方 法 的 具 体 实 现。 因 此, 将 它 仅 仅 作 为 一 种 定 义 底 层 对 象 接 口 的 语 言 要 好 得 多。

就 象 在Java 中 将 属 性 和 方 法 封 装 到 相 关 的 类 中 一 样, 上 述 各 项 均 包 含 在IDL 的 模 块 之 中。 在 一 个 模 块 之 中 可 以 定 义 一 个 或 多 个 接 口。 表 一 中 的 简 单IDL 模 块 名 为TheModule, 它 含 有 一 个 称 为TheInterface 的 基 本 接 口。 该 接 口 仅 有 一 个 定 义 为 整 型 的 简 单 变 量( 即TheVariable)。



表 1 最 简 单 的IDL 模 块

Module TheModule
{
interface TheInterface
{
long TheVariable;
};
};

如 果 你 用 一 个IDL 到Java 的 编 译 器 编 译 这 个IDL 模 块( 如Visigenic 的idl2 java), 就 会 得 到 表2 中 的Java 接 口。



表 2 与TheModule 相 应 的Java 代 码

package TheModule;
public interface TheInterface
{
public int TheVariable;
}



ORBQuery 小 应 用
这 个 客 户 端 的 小 应 用 含 有 标 准 的Java GUI, 并 将 调 用 一 个 远 程CORBA 对 象。 一 旦 该 对 象 被 调 用, 就 可 以 使 用 其 方 法 获 得 某 一 指 定CORBA ORB 的 信 息。 在 服 务 器 端, 为 了 获 得 特 定ORB 的 如 下 信 息: 名 称(Name)、 销 售 商(Vendor)、 操 作 系 统(Operating System)、 语 言(Languages) 和URL, 我 们 必 须 定 义 五 个 方 法。 因 此, 必 须 在IDL 接 口 中 定 义 这 五 种 方 法 才 能 获 取 相 应 信 息。 表3 定 义 了 这 个 名 为ORBInfo 的 接 口:



表 3: ORBInfo IDL 界 面

module ORBQuery
{
interface ORBInfo
{
string GetName(in long index);
string GetVendor(in long index);
string GetOS(in long index);
string GetLanguages(in long index);
string GetURL(in long index);
};
};

VisiBroker 安 装 中 含 有 一 个IDL 编 译 器 ─ ─idl2java, 你 可 以 用 它 生 成 实 现 该 接 口 必 需 的Java 代 码。 软 件 安 装 完 成 之 后, 只 要 执 行 如 下 命 令 即 可 生 成 代 码:

idl2java ORBInfo.idl

这 步 操 作 将 创 建 一 个 名 为ORBQuery 的 子 目 录( 与ORBQuery Java 包 相 对 应)。 在 该 目 录 内 有8 个 文 件:ORBInfo.java,ORBInfoHolder.java、ORBInfo Helper.java、_st_ORBInfo.java,_sk_ORBInfo.java、ORBInfoOperations.java、_tie_ORBInfo.java 和_example_ORBInfo.java。 你 可 能 已 经 猜 到,ORBInfo.java 文 件 含 有 定 义ORBInfo 接 口 的Java 源 文 件, 但 其 它 的Java 类 又 怎 样 呢 ?

ORBInfoHolder.java 文 件 内 含 有 一 个 传 递 参 数 时 使 用 的 主 类(holder class), 而ORBInfo-Helper 类 则 定 义 了 各 种 实 用 函 数。_st_ORBInfo 类 定 义 了 客 户stub,_sk_ORBInfo 定 义 了 服 务 器 框 架 类(skeleton class)。ORBInfoOperations 和_tie_ORBInfo 类 用 于 实 现 一 种 捆 绑 机 制, 这 是VisiBroker 的 一 个 特 性, 它 使 得 实 现 类 能 够 继 承 框 架 类 之 外 的 类。 在 示 例 中, 我 们 不 会 直 接 使 用 这 几 个 类。 最 后,_example_ORBInfo 含 有 一 个 示 例 服 务 器 对 象, 对 它 加 以 扩 展 就 可 创 建 一 个 服 务 器 应 用 程 序。

通 过IDL 编 译 器 生 成 的 这 八 个Java 类, 我 们 可 以 构 建 一 个 框 架, 由 一 个 接 口(interface)、 一 个stub、 一 个skeleton 和 几 个 帮 助 类, 我 们 可 以 用Java 创 建 自 己 的 客 户 机/ 服 务 器 模 式 的CORBA 应 用 程 序。

创 建 服 务 器 应 用 程 序
下 面, 我 们 需 要 创 建 一 个 向 服 务 器ORB 登 记ORBInfo 对 象 的 服 务 器 应 用 程 序。 这 个 新 对 象 将 扩 充 框 架 类(skeleton class) 并 实 现ORBInfo 接 口。 因 此, 该 服 务 器 共 需 两 个 新 类: 一 个 用 于 定 义 服 务 器 对 象 并 实 现ORBInfo 接 口, 另 一 个 向 服 务 器ORB 登 记 该 对 象。ORBQuery 类 包 含 的 标 准Java 代 码 负 责 取 回 数 组 中 的 指 定 元 素。Server 类 中 含 有CORBA 特 有 的 功 能。

接 下 来 的 例 子 中, 开 始 是 初 始 化ORB。 然 后, 用“ORBInfo” 字 符 串 向ORB 登 记 类, 客 户 机 利 用 这 个 字 符 串 检 索 一 个 对 象。 所 有 的 操 作 完 成 后, 调 用boa.obj_is_ready(), 通 知ORB 一 切 准 备 就 绪。

表4 是Server 类, 它 向ORB 登 记 了ORBInfo 对 象。

表 4   服 务 器 类

public class Server {
public static void main(String[] args) {
try {
// Initialize the ORB.
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init();
// Initialize the BOA.
org.omg.CORBA.BOA boa = orb.BOA_init();
// Create the ORBQuery.
ORBQuery serverQuery = new ORBQuery("ORBInfo");
// EXPort the newly create object.
boa.obj_is_ready(serverQuery);
System.out.PRintln(serverQuery + " is ready.");
// Wait for incoming requests
boa.impl_is_ready();
}
catch(org.omg.CORBA.SystemException e) {
System.err.println(e);
}
}
}

表5 给 出 了ORBQuery 类, 它 实 现 了 接 口 及 五 个 帮 助 方 法。



表 5: ORBQuery 类

import java.util.*;

class ORBQuery extends ORBQuery._sk_ORBInfo {
String[][] ORBVendors =

{{"PowerBroker","Orbix","VisiBroker","ComponentBroker","
Solaris NEO"},
{"Expersoft Corp.","Iona Technologies","Visigenic Software",
"IBM","Sun"},
{"OLE and ActiveX Bridges; Windows95/NT;
Solaris; HP-UX; AIX; JDK 1.0.2",
"Windows95/NT, MVS, OS/2, QNX, VxWorks, Solaris, HP-UX,
Irix, AIX, Digital UNIX, OLE Bridge",
"Windows95/NT, Sun OS, Solaris, HP-UX, AIX, Irix",
"Windows95/NT, Solaris, HP-UX, AIX, OS/390, OS/2, AS/400",
"Solaris (Client & Server), Windows95/NT (client), JDK 1.0.2"},
{"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 Object Model) 仅 运 行 于 两 种 操 作 系 统 之 上: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 Windows NT/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 提 供 了 集 成 的 基 础, 这 种 集 成 是 指 新 开 发 的 代 码 和 已 有 对 象 的 集 成, 同 时 允 许 将 来 加 以 扩 展。 在 做 出 取 此 舍 彼 的 选 择 之 前, 你 必 须 权 衡 上 面 的 各 种 因 素, 并 仔 细 审 视 每 种 技 术 的 现 状。

Tags:CORBA Java 结合

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接