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