Java 版 (精华区)

发信人: angle (finder), 信区: Java
标  题: CORBA与Java(3)
发信站: 哈工大紫丁香 (Sat Jun 19 13:51:53 1999), 转信

现在进入正题了。
.....
用Java 做CORBA 开 发

          为 了 创 建 一 个 分 布 式 的Java 小 应 用, 并 让 它 用CORBA 访 问 服
 务 器 对 象, 我 们 利 用 一 个 流 行 的 商
 用ORB, 并 用IDL 定 义 对 象 接 口。 在 示 例 小 应 用 中, 我 选 用 了Visigeni
c Visi Broker for Java。 这 种ORB 已
 经 经 过Oracle、Netscape 和Novell 等 公 司 的 认 证, 并 已 被 纳 入Netscape Na
vigator 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 或 是CORBA
Facilities, 你 可 以 自 制( 或 购
 买) 商 用 对 象。 但 是, 没 有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 模 块( 如Visig
enic 的idl2 java), 就 会 得 到 表2 中
 的Java 接 口。



          表 2 与TheModule 相 应 的Java 代 码

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



--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: www-post@bbs.hit.edu]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.268毫秒