(2020年)企业管理制度CORBA程序设计指南

上传人:精****库 文档编号:139754796 上传时间:2020-07-23 格式:DOCX 页数:104 大小:848.75KB
返回 下载 相关 举报
(2020年)企业管理制度CORBA程序设计指南_第1页
第1页 / 共104页
(2020年)企业管理制度CORBA程序设计指南_第2页
第2页 / 共104页
(2020年)企业管理制度CORBA程序设计指南_第3页
第3页 / 共104页
(2020年)企业管理制度CORBA程序设计指南_第4页
第4页 / 共104页
(2020年)企业管理制度CORBA程序设计指南_第5页
第5页 / 共104页
点击查看更多>>
资源描述

《(2020年)企业管理制度CORBA程序设计指南》由会员分享,可在线阅读,更多相关《(2020年)企业管理制度CORBA程序设计指南(104页珍藏版)》请在金锄头文库上搜索。

1、 CORBA 程序设计指南(入门)这里假设你对CORBA毫无所知。对JAVA略有所知,因为这里使用JAVA作为程序设计语言。学习了本书,你将对CORBA有个初步了解,并能编写一个简单完整的CORBA应用程序。1 CORBA 简介CORBA(Common Object Request Broker Architecture)是为了实现分布式计算而引入的。为了说明CORBA在分布计算上有何特点,我们从它与其它几种分布计算技术的比较中进行说明。与过去的面向过程的RPC(Remote Procedure Call)不同,CORBA是基于面向对象技术的,它能解决远程对象之间的互操作问题。MicroSof

2、t 的DCOM (Distributed Component Object Model)也是解决这一问题的, 但它基于Windows操作系统,尽管到本书编写时,DCOM已有在其他操作系统如Sun Solaris, Digital Unix, IBM MVS 上的实现,但毫无疑问,只有在微软的操作系统上才会实现得更好。而只有CORBA是真正跨平台的,平台独立性正是CORBA的初衷之一。另一种做到平台无关性的技术是Java RMI(Remote Method Invocation),但它只能用JAVA实现。CORBA与此不同,它通过一种叫IDL(Interface Definition Langu

3、age)的接口定义语言,能做到语言无关,也就是说,任何语言都能制作CORBA组件,而CORBA组件能在任何语言下使用。 因此,可以这样理解CORBA:CORBA一种异构平台下的语言无关的对象互操作模型。1.1 CORBA体系结构CORBA的体系结构如下:图1.1 CORBA体系结构CORBA上的服务用IDL描述,IDL将被映射为某种程序设计语言如C+或Java,并且分成两分,在客户方叫IDL Stub(桩), 在服务器方叫IDL Skeleton(骨架)。两者可以采用不同的语言。服务器方在Skeleton的基础上编写对象实现(Object Implementation),而客户方要访问服务器对

4、象上的方法,则要通过客户桩。而双方又要通过而ORB(Object Request Broker,对象请求代理)总线通信。与传统的Client/Server模式(我们称为Two-tier client/server)不同,CORBA是一种multi-tier client/server architecture,更确切的说,是一种three-tier client/server模式。双重客户/服务器模式存在的问题是两者耦合太紧,它们之间采用一种私有协议通信,服务器的改变将影响到客户方。多重客户/服务器与此不同,两者之间的通信不能直接进行,而需要通过中间的一种叫代理的方式进行。在CORBA中这种代

5、理就是ORB。通过它,客户和服务器不再关心通信问题,它们只需关心功能上的实现。从这个意义上讲,CORBA是一种中间件(Middleware)技术。下面列出CORBA中的一些重要概念,或者说CORBA中的几个重要名词,有助于读者了解CORBA的一些重要的方面。1.2 CORBA中的几个概念1.2.1 ORB(Object Request Broker)CORBA体系结构的核心就是ORB。可以这样简单理解:ORB就是使得客户应用程序能调用远端对象方法的一种机制。图1.2 ORB模型具体来说就是:当客户程序要调用远程对象上的方法时,首先要得到这个远程对象的引用,之后就可以像调用本地方法一样调用远程对

6、象的方法。当发出一个调用时,实际上ORB会截取这个调用(通过客户Stub完成,“提高”篇中会详细解释),因为客户和服务器可能在不同的网络、不同的操作系统上甚至用不同的语言实现,ORB还要负责将调用的名字、参数等编码成标准的方式(称Marshaling)通过网络传输到服务器方(实际上在同一台机器上也如此),并通过将参数Unmarshaling的过程,传到正确的对象上(这整个过程叫重定向,Redirecting),服务器对象完成处理后,ORB通过同样的Marshaling/Unmarshaling方式将结果返回给客户。因此,ORB是一种功能,它具备以下能力:1对象定位(根据对象引用定位对象的实现)

7、2对象定位后,确信Server能接受请求3将客户方请求通过Marshaling/Unmarshing方式重定向到服务器对象上4如果需要,将结果以同样的方式返回。1.2.2 IDL(Interface Definition Language)IDL,接口定义语言,是CORBA体系中的另一个重要概念。如果说ORB使CORBA做到平台无关,那么IDL, 则使CORBA做到语言无关。正像其名字中显示的那样,IDL仅仅定义接口,而不定义实现,类似于C中的头文件。实际上它不是真正的编程语言。要用它编写应用,需要将它映射它相应的程序设计语言上去,如映射到C+或JAVA上去。映射后的代码叫Client Stu

8、b Code和 Server Skeleton Code。IDL的好处是使高层设计人员不必考虑实现细节而只需关心功能描述。IDL可以说是描述性语言。设计IDL的过程也是设计对象模型的过程。它是编写CORBA应用的第一步,在整个软件设计过程中至关重要。IDL的语法很像C+,当然也像Java。很难想像一个程序设计人员是不懂C或Java的,所以,几乎所有的程序设计人员都能迅速理解IDL。而这正是IDL设计者所希望的。下面是一个IDL定义的简单例子:/ grid.idl/ IDL definition of a 2-D grid:module simpleDemointerface grid read

9、only attribute short height; / height of the grid readonly attribute short width; / width of the grid / IDL operations / set the element row,col of the grid, to value: void set(in short row, in short col, in long value); / return element row,col of the grid: long get(in short row, in short col); ;Th

10、is IDL defines an interface for a grid CORBA object that maintains a grid or 2-D array of data values, which a client can access or modify remotely. Module类似于Java中包(Package)的概念,实际上module simpleDemo映射到JAVA正是package simpleDemo。而Interface类似于C+中的类(classs)声明,或是Java中的Interface 定义。附录中列出了IDL的全部语法。1.2.3 Stub

11、 Code 和 Skeleton CodeStub code 和Skeleton Code 是由IDL Complier自动生成的,前者放在客户方,后者放在服务器方。不同厂商的IDL complier生成的Stub 和Skeleton会略有区别,但影响不大。如上面的grid.idl, 编译后,Stub Code包含以下文件:grid.java_gridStub.javagridHelper.javagridHolder.javagridOperations.javaSkeleton Code则包含以下文件: gridOperations.java gridPOA.java gridPOATie

12、.java(在Stud Code 也包含gridOperations.java, 是因为在使用Call back机制时会用到。)这些文件的用途后面会讲到。 1.2.4 GIOP 和 IIOP我们知道,客户和服务器是通过ORB交互的,那么,客户方的ORB和服务器方的ORB又是通过什么方式通信呢?通过GIOP(General Inter-ORB Protocol)。也就是说,GIOP是一种通信协议,它规定了两个实体:客户和服务器ORBs间的通信机制。 图1.3 ORBs通信机制GIOP在设计时遵循以下目标: Widest possible availability Simplicity Scala

13、bility Low cost Generality Architectural neutrality也是说,GIOP设计的尽可能简单,开销最小,同时又具有最广泛的适应性和可扩展性,以适应不同的网络。GIOP定义了以下几个方面:1The Common Data Representation (CDR) definition.通用数据表示定义。它实际上是IDL数据类型在网上传输时的编码方案。它对所有IDL数据类型的映射都作了规定。2GIOP Message Formats. 它规定了Client和Server两个角色之间要传输的消息格式。主要包括Request和Reply两种消息。一个Reque

14、st 消息有以下几部分组成: A GIOP message header A Request Header The Request Body相应的,一个Reply消息则包括A GIOP message header A Reply Header The Reply BodyGIOP1.1规定 GIOP message header格式如下:/ GIOP 1.1struct MessageHeader_1_1 char magic 4;Version GIOP_version;octet flags; / GIOP 1.1 changeoctet message_type;unsigned lo

15、ng message_size; Request Header格式如下:/ GIOP 1.1struct RequestHeader_1_1 IOP:ServiceContextList service_context;unsigned long request_id;boolean response_expected;octet reserved3; / Added in GIOP 1.1sequence object_key;string operation;Principal requesting_principal; Request Body则按CDR规定的方式编码,它主要对方法调用的参数进行编码, 如方法: double example (in short m, inout Principal p); 可表示成:struct example_body short m; / leftmost in or inout parameterPrincipal p;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号