Software 版 (精华区)
发信人: checcy (老巴夺), 信区: Software
标 题: Java RMI 应 用
发信站: 哈工大紫丁香 (Mon Apr 6 12:13:50 1998), 转信
Java RMI 应 用
黄 朝 与
RMI
---- 作 为 一 种 优 秀 的 计 算 平 台,Java 在 许 多 方 面 具
有 其 突 出 的 优 越 性, 其 中RMI(Remote Method Invoke) 最
典 型 地 展 现 了Java 平 台 强 大 的 分 布 计 算 能 力。 本 文
用 一 个 简 单 的 例 子 说 明RMI 给 分 布 计 算 带 来 的 方
便, 以 及RMI 对 很 多 应 用 领 域 的 重 要 意 义, 如 桌 面
超 级 计 算 的 可 能 性。
---- 简 言 之,RMI 是 一 种Java 虚 拟 机 之 间 对 象 互 相 调
用 对 方 函 数、 启 动 对 方 进 程 的 一 种 机 制, 用 这 种
机 制, 某 一 台Java 虚 拟 机 上 的 对 象 在 调 用 另 外 一
台Java 虚 拟 机 上 的 函 数 时, 使 用 的 程 序 语 法 规 则
和 在 本 台Java 虚 拟 机 上 对 象 间 的 函 数 调 用 的 语 法
规 则 一 样。 正 是 这 种 机 制 给 分 布 计 算 的 系 统 设 计
和 编 程 都 带 来 了 极 大 的 方 便。 只 要 按 照RMI 规 程 设
计 程 序, 程 序 员 可 以 不 必 再 过 问 RMI 之 下 的 网 络 细
节, 如TCP/IP、Socket 等, 更 不 必 担 心 其 下 面 的 软 硬 件
环 境。 任 意 两 台Java 虚 拟 机 之 间 的 通 讯 完 全 由Java
虚 拟 机 自 己 的RMI 来 负 责。 对 程 序 员 来 讲, 这 两 台
Java 虚 拟 机 之 间 完 全 是 透 明 的, 远 程Java 虚 拟 机 上
的 对 象, 使 用 起 来 就 像 近 在 眼 前 一 样。
范 例
---- 本 文 的 例 子 是 利 用RMI 设 计 的 一 个 简 单 的 网 络
计 算 器, 其 功 能 是 一 个 三 阶 多 项 式 的 求 值, 然 后
画 出 轨 迹。 读 者 如 没 有 时 间, 在 阅 读 时 暂 时 不 必
细 究 其 语 法 细 节, 特 别 是 有 些 用IBM 的VisualAge for
Java 自 动 生 成 的 用 户 界 面 代 码, 但 从 该 例 子 的 程
序 结 构 中, 读 者 可 足 以 了 解RMI 简 明 的 风 格。 另 外,
本 文 主 要 从 应 用 的 角 度 讨 论RMI, 省 去 了 对 其 原 理
的 分 析, 感 兴 趣 的 读 者 可 直 接 访 问
http://java.sun.com。
---- 计 算 器 的 设 计 方 法 有 很 多 种, 从 结 构 上 看, 归
纳 起 来, 大 致 有 三 种。
---- 1、 本 地 机 在 本 机 上 输 入 参 数, 计 算 在 本 机 上
完 成, 结 果 由 本 机 显 示 给 用 户。
---- 2、 本 地 机 -TCP/IP - 远 程 机 在 本 地 机 上 输 入 参
数, 本 地 机 将 参 数 通 过 网 络 送 给 远 程 机, 远 程 机
启 动 一 个 进 程 计 算 出 结 果, 然 后 将 结 果 通 过 网 络
(Socket、 HTTP 等) 送 给 本 地 机, 结 果 由 本 地 机 显 示 给
用 户。
---- 3、 本 地 机 -RMI -TCP/IP -RMI - 远 程 机 本 地 机
从 远 程 机 上 得 到 一 个 小 程 序(Applet) 用 作 数 据 输 入
( 多 项 式 系 数) 和 结 果 显 示, 在 本 地 机 上 输 入 的
数 据 将 作 为 调 用 远 程 机 上 函 数 的 参 数。 该 远 程 函
数 计 算 出 结 果, 反 过 来, 将 该 结 果 作 为 调 用 本 地
机 上 对 象( 如 该Applet) 的 函 数( 如 屏 幕 刷 新) 的 参 数
调 用 该 本 地 函 数。 这 样 计 算 结 果 就 自 然 地 被 送 回
来, 显 示 在 本 地 机 上。
---- 显 然, 第3 种 方 案 是 最 灵 活、 最 优 雅 的 网 络 计
算 模 式, 本 文 的 程 序 正 是 基 于 这 种 模 式。 由 于 篇
幅 所 限, 程 序 没 有 过 多 考 虑 完 备 性, 如 对Exception
只 作 了 简 单 的 处 理。
---- 程 序 中,ServerManager、ServerManagerListener 用 于 简
单 控 制RMIServer 的 启 动、 停 止、 退 出。RMIServer 设 计 成
一 个 简 单 的RMI 服 务 器, 其 中:
RMIServer(String sMAPServerName) 完 成 服 务 器 的 命
名, 在1099 口 上 作 注 册 登 记 准 备。
startRMI() 的Naming.rebind(“/" +sServerName,this) 启
动 该 服 务 器, 名 称 为“RMIServer", 启 动 后,
RMIServer 开 始 在1099 口 上 监 听 来 自 网 络 的 呼
叫。
stopRMI() 的Naming.unbind(sServerName) 用 于 停 止 该
服 务 器。
calculateIT(double[] dA,
ClientRemoteInterfacecrInterface) throws
RemoteException 是 供 客 户 端Java 虚 拟 机 作 远 程 调
用 的 函 数,dA 是 多 项 式 系 数(a3,a2,a1,a0), 该 多
项 式 定 义 为:
---- F(X)=a3 *X3 +a2 *X2 +a1 *X +a0
crInterface 是 客 户 端Java 虚 拟 机 远 程 调 用 服 务
器 端Java 虚 拟 机 时 作 为 参 数 送 过 来 的 代 表 客 户
端 的 远 程 接 口, 供 服 务 器 端 需 要 时 反 过 来 对
客 户 端 作 远 程 调 用 时 使 用。calculateIT 结 果 计 算
出 来 后, 服 务 器 端 用:
---- crInterface.drawIT(iXY);
语 句 激 活 在 客 户 端 的drawIT(iXY) 函 数。 计 算 结 果iXY
作 为 函 数 参 数 自 动 地 传 送 到 客 户 端。
客 户 端Java 虚 拟 机 靠CalculatorDisplay 这 个Applet 来
激 发 服 务 器 端Java 虚 拟 机 上 的calculateIT 函 数,
浏 览 器( 如HotJava) 从 服 务 器 上 获 得
CalculatorDisplay 以 后, 该Applet 的init() 函 数 里 有
两 条 关 键 的 语 句:
---- srInterface = (ServerRemoteInterface)Naming.lookup(
“//" +getCodeBase().getHost() +“/" +“RMIServer");
---- UnicastRemoteObject.exportObject(this);
---- 第 一 句 的 目 的 是 在 提 供 该Applet 的 服 务 器 上 寻
找 名 为RMIServer 的RMI 远 程 对 象, 找 到 以 后, 用
srInterface 接 口 表 示; 第 二 句 是 输 出 本 对 象, 即 将
本 对 象 的 远 程 接 口 作 为 远 程 函 数 调 用 的 参 数 传 送
到 服 务 器 端。 当 需 要 调 用( 或 启 动) 服 务 器 端 的
calculateIT 函 数 时, 也 只 是 用 简 单 的 下 面 一 条 语
句:
---- srInterface.calculateIT(dA,this);
Java 工 具 还 会 自 动 生 成CalculatorDisplay_Skel、
CalculatorDisplay_Stub、RMIServer_Skel、RMIServer_Stub
文 件, 在 此 可 暂 不 理 会。
前 景
---- 虽 然 本 文 描 述 的 只 是 一 个 小 小 的 多 项 式 求 值
及 轨 迹 输 出 例 子, 但 不 难 想 象, 计 算 对 象 可 以 是
高 阶 微 分 方 程、 高 阶 矩 阵 运 算 等。 服 务 器 可 以 是
超 级 计 算 机, 在 其 上 可 进 行 诸 如 流 体 力 学 模 型 仿
真、 风 洞 模 拟 试 验、 实 时 图 像 处 理、 气 象 分 析、 股
市 预 测、 人 工 智 能、 大 型 数 据 库 访 问 等 等。 客 户 机
可 以 是PC 机, 用 于 调 节 参 数、 控 制 进 程、 观 测 结 果
等, 其 效 果 如 同 置 身 于 超 级 计 算 机 上 直 接 运 行 程
序 一 样。
---- 从 商 业 上 看, 超 级 计 算 机 可 以 向 更 多 的 用 户
提 供 商 业 服 务, 如 向 远 程 用 户 提 供 模 拟 试 验, 而PC
用 户 既 能 享 受PC 的 廉 价 方 便, 又 可 以 享 受 到Java RMI
带 来 的 原 来 不 可 想 象 的 超 级 计 算 的 威 力。
---- 由 于 源 程 序 较 长, 故 发 表 在 本 报 的WWW 站 点 上,
地 址 是:http: / /www.javaworld.com.cn /98 /jprogram.htm
。 欢 迎 访 问!
--
*********************************
Chengyan Che - Software Freelancer
Harbin, P.R.China
mailto: checcy@public.hr.hl.cn
ICQ: 5116726
--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: checcy@public.hr.hl.]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:13.990毫秒