使用 CORBA 和 Java IDL关于 CORBACORBA(Common Object Request Broker Architecture,公用对象请求代理体系结构)是 Object Management Group (OMG) 协会开发的标准分布式对象体系结构。自 1989 年以来,OMG 的任务就是为开放式软件总线或对象请求代理(Object Request Broker,ORB)提供体系结构规范。以此为基础,不同厂商编写的对象组件可跨过网络和操作系统实现互操作。该标准允许 CORBA 对象相互调用,而无需知道所访问对象的位置或实现被请求对象所用的语言。OMG 指定的接口定义语言(Interface Definition Language,IDL)用于为 CORBA 对象定义接口。 CORBA 对象与典型编程语言对象的不同之处在于:
关于 Java IDLJava IDL 是同 JDK 1.2 一起提供的对象请求代理。它可与 Java IDL ORB 支持瞬态 CORBA 对象 - 该对象的生命期受服务器进程生命期的限制。Java IDL 也提供瞬态名字服务器,以便将对象组织为树型目录结构。名字服务器符合在 CORBAservices:通用对象服务规范中所述的命名服务规范标准。瞬态对象及名字服务器将在下文中讨论。 接口库并不是作为 Java IDL 的组成部分来提供的。由于一般情况下客户机可访问已生成的 stub 文件,因此不需要接口库。 Nutshell 中的 CORBA 概念本节引入的概念在 CORBA/IIOP 2.0 规范中有更全面的论述。 下图展示从客户机传送到服务器 CORBA 对象实现的方法请求。客户机是调用 CORBA 对象上某方法的任意代码(其本身也可能是 CORBA 对象)。servant 是对象实现的实例 - 实现该 CORBA 对象的实际代码和数据。
CORBA 对象的客户机具有对该对象的对象引用,并用该对象引用来发出方法请求。如果该服务器对象是远程对象,则对象引用将指向 stub 函数,该函数则使用 ORB 机制向服务器对象传送调用。stub 代码使用 ORB 来标识运行该服务器对象的计算机,并且向该计算机的 ORB 请求与该对象服务器连接。stub 代码取得该连接时,会将对象引用和参数发送到链接目标对象实现的 skeleton 代码。skeleton 代码将该调用和参数变换为所需的、与实现有关的格式,然后调用该对象。任何结果或异常都会沿同一路径返回。 客户机不知 CORBA 对象的位置、实现详情及用来访问该对象的 ORB。不同的 ORB 通过由 OMG 指定的 Internet InterORB 协议 (IIOP) 通讯。[CORBA/IIOP 2.0:ch 9,10] 客户机只能调用在 CORBA 对象接口中指定的方法。CORBA 对象接口通过 OMG 接口定义语言 (IDL) [CORBA/IIOP 2.0 ch3] 进行定义。接口定义对象类型,同时指定一组已命名的方法和参数及这些方法可能返回的异常类型。IDL 编译器(如
定义并实现 CORBA 对象开发 CORBA 对象的目的是创建并注册对象服务器或普通服务器。服务器是一个程序,其中包含一个或多个对象类型的实现并注册到 ORB。例如,用户可以开发一个桌面排版服务器,实现“Document”对象类型、“Paragraph”对象类型及其它相关的对象类型。 CORBA 对象接口所有 CORBA 对象都支持定义对象类型的 IDL 接口。一个接口可继承一个或多个其它接口。IDL 语法与 Java 或 C++ 非常相似,CORBA 的 IDL 文件在功能方面与语言无关,类似于 C++ 头文件。将 IDL 映射到每个编程语言后,即可提供从该语言到对象接口的访问。有了 Java IDL,这些 IDL 接口可用 IDL 接口声明一组客户机可访问的操作、异常及有类型的属性(值)。每个操作都有一个说明定义操作的名称、参数、结果及异常。以下为描述经典“Hello World”程序的简单 IDL 接口。 module HelloApp { interface Hello { string sayHello(); }; }; 当出现错误条件时,操作会抛出异常。异常的类型表明了所遇到的错误种类。除正常结果外,客户机还必须准备处理每个操作的已定义异常和 CORBA 标准异常。 基于 Java 语言的实现一旦定义了 IDL 接口,且 对象实现将为它所支持的接口的所有操作和属性定义行为。一个接口可能有多个实现(例如每个实现都用来强调特定的时间和空间权衡)。实现定义创建/破坏接口和对象的行为。 由于只有服务器能创建新的 CORBA 对象,因此应为每种对象类型定义并实现工厂对象接口。例如,如果一种对象类型为 Document,则带有 create 方法的 DocumentFactory 对象类型将作为服务器的一部分来定义和实现(注意,“create”不是保留的,可以用任何方法名)。而后,create 方法的实现可用 DocumentServant document = new DocumentServant(): orb.connect(document); 可在 Document 上定义并实现 Java IDL ORB 只支持瞬态对象,其生命期受服务器进程生命期的限制。虽然当服务器进程终止运行时瞬态对象也会消失,但该对象的实现可以来将其状态保存到文件中,并在创建时从该文件重新初始化。 客户机实现客户机代码与 客户机只可使用服务器提供的已公布工厂接口来创建 CORBA 对象。同样,只有该对象公布一个破坏方法,客户机才能删除 CORBA 对象。由于一个 CORBA 对象可能为网络上的很多客户机所共享,因此,只有对象服务器才能够知道该对象何时成为垃圾。 客户机代码在 CORBA 对象上发送方法请求的唯一方式是经由该对象的对象引用。对象引用是不透明结构,它标识 CORBA 对象的主机、主机服务器监听请求的端口及在进程中指定对象的指针。因为 Java IDL 只支持瞬态对象,所以在服务器进程终止并重启时该对象引用将无效。 客户机一般以如下方式获得对象引用:
一旦获得对象引用,客户机必须将它限定为适当类型。IDL 支持继承,其继承的根目录为 IDL 中的 Java IDL 瞬态名字服务器Java IDL Transient Nameservice 是同 Java IDL 一起提供的对象服务器。在命令行提示中使用 名字服务器通过与文件目录相似的树型结构按名称存储对象引用。客户机可通过名称查找或解析对象引用。因为名字服务器是一种普通的 Java IDL 瞬态服务器,所以每次 有关详细信息,参见命名服务。 分布式应用程序似的概念 | 使用 CORBA | 词汇表版权所有© 1996-98 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA. 94043-1100 USA.,保留所有权利。 |
|