第 4 章 JSP 与 J2EE 分布式处理技术
4.3 CORBA 技术
第 4 章 JSP 与 J2EE 分布式处理技术
Date:2001.5
Note:the client for rmi object --%>
<%@ page import=” java.rmi.*” %>
<%@ page import=”java.net.*” %>
<%@ page import=”java.io.*” %>
<%@ page import=”Rem.class” %>
<%
try {
String host = "localhost";
//通过URL在远程主机上查找对象 并把它转化为本地接口Rem类型
Rem remObject=(Rem)Naming.lookup("rmi://" + host + "/Rem");
out.println(remObject.getMessage()+”<br>”); //调用远程对象的方法 out.println(remObject.getMessage()); //调用远程对象的方法
}
catch(RemoteException re) {
out.println("RemoteException: " + re);
}
catch(NotBoundException nbe) {
out.println("NotBoundException: " + nbe);
}
catch(MalformedURLException mfe) {
out.println("MalformedURLException:"+ mfe);
}
%>
程序清单4.5 和程序清单 4.4 的输出结果一致
4.3 CORBA 技术
4.3.1 CORBA 技术简介
公用对象请求代理程序体系结构 Common Object Request Broker Architecture 缩写 为 CORBA 是对象管理组织 Object Management Group 简称为 OMG 对应当今快速增 长的软硬件的协同工作能力的要求而提出的方案 简而言之 CORBA 允许应用程序和其 他的应用程序通讯 而不论它们在什么地方或者由谁来设计 CORBA 1.1 标准由对象管理 组织(OMG)在 1991 年发布 它定义了接口定义语言 IDL 和应用编程接口 API 从 而通过实现对象请求代理 ORB Object Request Broker 来激活客户/服务器的交互 CORBA 2.0 标准于 1994 年的 12 月发布 它定义了如何跨越不同的 ORB 提供者而进行通讯
JAVA编程技术支持:
http://shop61582462.taobao.com/
第一部分 JSP 技术与 J2EE 技术
ORB (Object Request Broker)是一个中间件 它在对象间建立客户-服务器的关系 通过 ORB 一个客户可以很简单地使用服务器对象的方法而不论服务器是在同一机器上还是通 过一个网络访问 ORB 截获调用 然后负责找到一个对象实现这个请求 传递参数和方法 最后返回结果 客户不用知道对象在哪里 是什么语言实现的 远程对象所在的操作系统 以及其它和远程对象接口无关的东西
在传统的客户/服务器程序中 开发者使用他们自己设计的或者公认的标准定义设备/
对象之间通信的协议 协议的定义依赖于实现的语言 网络的传输和其他许许多多因素 ORB 将这个过程简单化 使用 ORB 协议定义是通过应用接口 而该接口是接口定义语 言 IDL 的一个实现 它和使用的编程语言无关的 并且 ORB 提供了很大的灵活性 它 让程序员选择最适当的操作系统 运行环境和设计语言来建设系统中每个组件 更重要的 是 它允许集成已经存在的组件
CORBA 是在面向对象标准化和互操作性道路上的一个信号 通过 CORBA 用户不必 要知道软硬件的平台和他们处在企业网的什么地方就可以操作
Java 提供了一个概念清晰 结构紧凑的分布计算模型和构件互操作的方法 为构件应 用开发提供了相当的灵活性 但由于它还处于发展时期 因此其形态很难界定 CORBA 是一种集成技术 而不是编程技术 它提供了对各种功能模块进行构件化处理并将它们捆 绑在一起的粘合剂 Java 技术和 CORBA 技术在很大的程度上可以看作是互补的 为了适 应Web 应用的发展要求 许多软件厂商都急于促成 CORBA 技术和 Java 技术的结合 RMI 可以建立在IIOP 协议之上 CORBA 不只是对象请求代理 ORB 也是一个非常完整的分布 式对象平台 CORBA 可以扩展 Java 在网络 语言 组件边界 操作系统中的各种应用 其次 Java 也不仅仅是与 CORBA 捆绑的语言 它还是一个易变的对象系统 也是一个运 行对象的便携式OS 而且允许 CORBA 对象在主机 网络计算机和蜂窝电话等应用上运行 Java 还简化了大型 CORBA 系统中的代码分配 其中内置的多线程和垃圾收集使编写可靠 的网络对象更为方便 此外 Java 能创建可移动对象并将它们分发出去 而采用 CORBA 可以将它们连接在一起 并与计算环境中的数据库 遗留系统 其他语言编写的对象和应 用相互集成
CORAB 与 Java 的基础结构也可以很好地互补 CORBA 处理网络透明性 Java 处理 实现透明性 CORBA 提供了 Java 便携应用环境与对象间的连接 由此看来 CORAB/Java 技术紧密结合的趋势是势不可挡的 而且二者的结合将成为Object Web 技术的主要形态之 一
4.3.2 CORBA 模型
OMG 是一个开放组织 成立于 1989 年 到今天已有 600 多名成员 其主要目标是 使用对象技术 使基于对象的软件成员在分布的异构环境中可重用 可移植 可互操作 OMG 成立不久便制定了对象管理体系结构 Object Management Architecture OMA 它 由以下4 个部分组成
z 对象请示代理ORB Object Request Broker 使对象在分布式环境中透明地收发 请求和响应 它是构造分布式对象应用 使应用在不同的层次的异构环境下相互 操作的基础
JAVA编程技术支持:
http://shop61582462.taobao.com/
第 4 章 JSP 与 J2EE 分布式处理技术
z 对象服务OS(Object Services) 是为使用和实现对象而提供的基本服务集合 对于 分布式应用来说是基本服务 同时这些服务独立于应用领域 如生命循环服务定 义了对象创建 删除 拷贝 移动的方式 它不考虑对象在应用中如何实现的
z 通用设施CE(Common Facilites) 是许多应用提供的共享服务集合 如系统管理 电子邮件等
z 应用对象AO(Application Objects) 它相当于传统的应用 应用对象可由独立的厂 商生产 是参考模型中的最高层 OMG 对此不作规定
由此可见 ORB 在对象管理系统中处于最关键的位置 是对象间的 通信总线 为 ORB 制定的规范称为 CORBA 规范 CORBA 是一种规范 它定义了分布式对象如何实现 相互操作 在World Wide Web 盛行之前 特别是 Java 编程语言风靡之前 C 开发者基 本将CORBA 作为其高端分布式对象的解决方案 最初 OMG 在 1990 年制订了对象管理 体系 Object Management Architecture 即 OMA 来描述应用程序如何实现互操作 的时 候 作为其中(OMA)的一部分 需要有一个标准规范应用程序片段即对象的互操作 这导 致了CORBA 的诞生 OMA 定义了组成 CORBA 的 4 个主要部分 分别与上面提到过的 OMA 的 4 个部分相对应 它们是
z Object Request Broker ORB 作为对象互通讯的软总线
z CORBA Services CORBA 服务 定义加入 ORB 的系统级服务 如安全性 命名 和事务处理 是开发分布式应用所必需的模块 这些服务提供异步事件管理 事 务 持续 并发 名字 关系和生存周期的管理
z CORBA Facilities CORBA 工具 定义应用程序级服务 如复合文档等 对于开 发分布式应用不是必需的 但是在某些情况下是有用的 这些工具提供信息管理 系统管理 任务管理和用户界面
z Business Objects 或者是 Application Objects 商业对象或者应用对象 主要用于 定义现实世界的对象和应用 如飞机或银行帐户
上述4 部分的关系如图 4.1 所示
图4.1 CORBA 的组成
CORBA 组件包括 ORB 核心 ORB 接口 IDL 存根(stub) DII(Dynamic Invocation Interface 动态调用接口) 对象适配器 IDL 框架(skeleton) DSI(Dynamic Skeleton Interface 动态框架界面) CORBA 运行结构 ORB 核心 是由特定开发商决定的 不是由 CORBA 定义的 不管怎样 ORB 接口是一个标准的功能接口 是由所有的 CORBA 兼容 ORB 提
JAVA编程技术支持:
http://shop61582462.taobao.com/
第一部分 JSP 技术与 J2EE 技术
供的 IDL 编译器为每个界面产生存根(stub) 这就屏蔽了低层次的通信 提供了较高层次 的对象类型的特定 API DII 是相对于 IDL 存根的另一种方法 它为运行时构建请求提供 了一个通用的方法 对象适配器 为把可选的对象技术集成进 OMA(Object Management Architecture)提供支持 IDL 框架类似于 IDL 存根 但是 它是工作于服务器端的 对象实 现 对象适配器发送请求给IDL 框架 然后 IDL 框架就为之调用合适的对象实现中的方 法
CORBA 接口和数据类型是用 OMG 接口定义语言(OMG IDL)定义的 每个接口方法也 是用OMG IDL 声明的 IDL 是 CORBA 体系结构的关键部分 它为 CORBA 和特定程序设 计语言的数据类型之间提供映射(例如从 CORBA 到 Java 之间的映射) IDL 也允许对原有 代码实行封装 IDL 是一个面向对象的接口定义语言 具有和 C++相类似的语法 由于所 有的接口都是通过 IDL 定义的 CORBA 规范允许客户端程序和服务端对象用不同的程序 设计语言书写 彼此的细节都是透明的 CORBA 在不同对象请求代理(ORB)之间使用 IIOP 协议进行通信 使用TCP 协议作为网络通信协议
使用接口描述语言(IDL Interface Description Language)编写的对象接口 使得与语言 无关的独立性成为可能 IDL 使得所有 CORBA 对象以一种方式被描述 仅仅需要一个由 本地语言 C/C++ CORBA Java 到 IDL 的“桥梁”
CORBA 被设计和架构为服务端对象使用不同程序语言书写 运行于不同平台上的对 象系统 CORBA 依赖于 ORB 中间件在服务器和客户之间进行通信 ORB 扮演一个透明地 连接远程对象的对象 每个 CORBA 对象提供一个调用接口 并且有一系列的方法与之相 联 ORB 负责为请求发现相应的实现 并且把请求传递给 CORBA 服务器 ORB 为客户提 供透明服务 客户永远都不需要知道远程对象的位置以及用何种语言实现的 OMA 最重要 的部分就是ORB 为了创建一个遵从 CORBA 规范的应用程序 ORB 是 CORBA 4 大部分 中唯一必须提供的 许多ORB 产品根本不带 CORBA Services 或是 CORBA Facilities 你 可以自己编写商用对象 但是 没有ORB CORBA 应用程序绝对无法工作
既然ORB 如此重要 那么我们就来讨论一些 ORB 的细节问题 CORBA ORB 最显而 易见的功能 就是对你的应用程序或是其它ORB 的请求予以响应 在 CORBA 应用程序运 行期间 你的ORB 可能被请求做许多不同的事情 包括
z 查找并调用远程计算机上的对象
z 负责不同编程语言之间的参数转换 如C 到Java
z 可超越本机界限的安全管理
z 为其它的ORB 收集并发布本地对象的元数据(metadata)
z 用下载的客户端存根代码 stub 中描述的静态方法调用去激活远程对象中的方法
z 用动态方法调用激活远程对象
z 自动激活一个当前没有装入内存运行的对象
z 将回调方法导引向其(当前 ORB 对象)管理之下的本地对象
实现细节对软件开发者的透明性 是 ORB 的一个杰出的特性 用户只须在代码中提
实现细节对软件开发者的透明性 是 ORB 的一个杰出的特性 用户只须在代码中提