Java 版 (精华区)

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

创 建 服 务 器 应 用 程 序

          下 面, 我 们 需 要 创 建 一 个 向 服 务 器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/sola
ris_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 的 通 讯。 这 种 请 求 方 式 由 下 面 两 行 代 码 实 现( 在VisiBro
ker 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 O
RB 的 类 可 与 小 应 用 一 起 动 态 下
 载, 也 可 能 与 浏 览 器 捆 绑 在 一 起。)

 DCOM: Microsoft 的 法 宝
          目 前,Microsoft 的 分 布 式 组 件 对 象 模 型(Distributed Componont
Object Model) 仅 运 行 于 两 种 操 作 系
 统 之 上:Windows 95 和Windows NT4。Microsoft 正 在 与 第 三 方 开 发 商 协 作?
? 以 将DCOM 移 到 其 它 的 操 作
 系 统 上( 包 括MVS 和 几 种UNIX 操 作 系 统)。 象CORBA 一 样,DCOM 是 独 立 ?
? 语 言 的, 它 用Microsoft 的
 对 象 描 述 语 言(ODL) 通 过 接 口 对 对 象 加 以 描 述。

          与CORBA 相 比,DCOM 有 三 个 重 大 缺 点。 首 先, 它 由 单 一 开 发 ?
撸? 微 软) 定 义 并 控 制, 这 大 大 限
 制 了DCOM 使 用 者 的 选 择 范 围( 比 方 说 开 发 工 具 和 风 格)。 其 次,DC
OM 缺 乏 众 多 的 平 台 支 持, 这 极
 大 程 度 地 制 约 了 代 码 的 可 重 用 性 和DCOM 应 用 的 可 扩 展 性。 最 后,
 与CORBA 相 比,DCOM 是 一 种 非
 常 不 成 熟 的 技 术。 尽 管 微 软 目 前 正 为DCOM 加 入 消 息 和 事 务 支 持,
 但 这 些 功 能 在1994 年 的CORBA 2.0
 就 已 经 实 现 了, 并 且 正 由 几 家 不 同 的CORBA 软 件 开 发 商 所 发 行。

          为 了 使 一 个Java 的 小 应 用/ 应 用 程 序 得 以 访 问 服 务 端 的DCO
M 对 象, 开 发 者 不 得 不 使 用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 Tra
nsaction Serveces)。 该 公 司 还 曾
 发 布 其 长 远 计 划: 使RMI 对 象 可 以 通 过IIOP 互 通 讯。

          总 而 言 之,RMI 对 于 用 纯Java 书 写 的 小 规 模 的 应 用 程 序 来 ?
担? 是 一 种 可 行 方 案。 但CORBA 提 供
 了 集 成 的 基 础, 这 种 集 成 是 指 新 开 发 的 代 码 和 已 有 对 象 的 集 成
, 同 时 允 许 将 来 加 以 扩 展。 在 做 出
 取 此 舍 彼 的 选 择 之 前, 你 必 须 权 衡 上 面 的 各 种 因 素, 并 仔 细 审
视 每 种 技 术 的 现 状。


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