CORBA 程序设计指南
- 格式:doc
- 大小:1.75 MB
- 文档页数:54
CORBA技术简介⾸先CORBA是⼀个协议,和语⾔和平台⽆关通⽤对象代理体系结构CORBA(Common Object Request Broker Architecture)是对象管理组织所定义的⽤来实现现今⼤量硬件、软件之间互操作的解决⽅案,CORBA也是迈向⾯向对象标准化和互操作的重要⼀步。
■CORBA技术简介 简单地说,CORBA允许应⽤之间相互通信,⽽不管它们存在于哪⾥以及是谁设计的。
CORBA1.1于1991年由OMG发布,其中定义了接⼝定义语⾔(IDL)以及在对象请求代理(ORB)中实现客户对象与服务器对象之间交互的应⽤编程接⼝(API)。
CORBA2.0于1994年发布,规定了各个供应商之间的ORB的通信规则。
CORBA标准主要分为三个部分:接⼝定义语⾔(IDL)、对象请求代理(ORB)以及ORB之间的互操作协议IIOP。
ORB是对象之间建⽴Client/Server关系的中间件。
使⽤ORB,客户可以透明地调⽤⼀个服务对象上的⽅法,这个服务对象可以在本地,也可以在通过⽹络连接的其他机器上。
ORB截获这⼀调⽤同时负责查找实现服务的对象并向其传递参数、调⽤⽅法返回最终结果。
客户并不知道服务对象位于什么地⽅,它的编程语⾔和操作系统是什么,也不知道不属于对象接⼝的其他系统部分。
这样,ORB在异构分布环境下为不同机器上的应⽤提供了互操作性,并⽆缝地集成了多种对象系统。
在开发传统的Client/Server应⽤时,开发者使⽤他们⾃⼰设计的或⼀个公认的标准来定义⽤于设备之间通信的协议。
协议的定义依赖于实现语⾔、⽹络传输和许多其他因素,⽽ORB的出现简化了这⼀过程。
使⽤ORB时,协议是使⽤接⼝定义语⾔(IDL)定义的,⽽ IDL是独⽴于语⾔的。
并且ORB提供很强的灵活性,它使程序员选择最适合的操作系统、执⾏环境,甚⾄系统各个组件也可以采⽤不同的编程语⾔实现。
更重要的是,它允许现有组件的集成。
CORBA服务CORBA (Common Object Request Broker Architecture)是一种分布式计算平台,旨在使不同的计算机系统能够相互通信和交互。
CORBA服务是由CORBA技术提供的一种机制,用于简化分布式系统中的通信和互操作。
CORBA服务可以被视为一种软件组件,可以在网络上的不同计算机之间进行通信。
它提供了一个中间件层,用于处理不同计算机之间的通信细节,例如数据序列化、网络传输和安全性。
这使得开发人员可以将重点放在业务逻辑上,而不必担心底层通信机制。
在CORBA服务中,存在两个主要角色:客户端和服务器。
客户端是请求CORBA服务的应用程序,而服务器是提供CORBA服务的应用程序。
客户端向服务器发送请求,服务器根据请求执行相应的操作,并将结果返回给客户端。
CORBA使用一个称为ORB(Object Request Broker)的组件来协调客户端和服务器之间的通信。
CORBA服务提供了一种透明的方式来访问远程对象。
远程对象是分布在不同计算机上的对象,可以通过CORBA服务进行远程访问。
客户端不需要了解远程对象的位置和实现细节,只需要知道对象的接口定义。
这种透明性使得客户端可以轻松地访问远程对象,同时也降低了系统的耦合度。
CORBA服务的另一个重要特点是面向对象的。
它支持面向对象的概念,例如继承、封装和多态。
通过使用面向对象的概念,开发人员可以更容易地设计和实现复杂的分布式系统。
CORBA服务还提供了一些高级功能,例如事务处理和持久性。
事务处理允许开发人员将多个操作组合成一个原子操作,以确保数据的一致性和完整性。
持久性允许对象在服务器重启后保持其状态,以便客户端可以继续与对象交互。
总的来说,CORBA服务为分布式系统提供了一种简单、灵活和可扩展的通信机制。
它通过隐藏底层通信细节和提供丰富的功能,使得开发人员可以更容易地开发和维护分布式应用程序。
同时,CORBA服务还具有跨平台性,可以在不同的操作系统和编程语言之间进行通信。
电子科技大学计算机学院
标准实验报告
(实验)课程名称:中间件技术
(实验)项目名称:基于mico开源CORBA中间件
编写一个分布式调用服务
电子科技大学研究生院
电子科技大学实验报告
一、实验目的:
本实验的目的和任务是,通过利用基于mico的开源CORBA中间件编写一个分布式调用服务的小型软件,让学生理解中间件的基本原理,并掌握进行CORBA程序设计和开发的基本方法。
二、实验内容:
1)服务器实现一个网格,其结构如图1所示。
网格有高度和宽度,客户端可以设置和读取这两个属性。
网格由若干网格单元组成,每个单元有一个类型为整型的值,客户端可以设置和读取单元值。
另外,一旦网格的高度和宽度以及网格的单元值三者中任意一个发生变化,须立即通知客户端作相应处理,反映出该变化。
图1
2)系统由一个服务器和两个客户端组成,如图2所示。
图2
3)服务器端使用c++开发语言。
两个客户端分别使用c++和Java两种开发语言。
三、实验步骤:
本实验没有标准实验步骤,以下是依照软件工程的原理所列出的参考实验步骤:
第一阶段:系统分析,相关技术研究
第二阶段:系统算法研究和设计、相关的研究报告
第三阶段:系统实施,相关的设计报告
第四阶段:系统测试、总结,相关的测试报告
四、总结及心得体会:。
公共对象请求代理体系结构CORBA简介CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构)是由OMG(对象管理组织,Object Management Group)提出的应用软件体系结构和对象技术规范,其核心是一套标准的语言、接口和协议,以支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用。
CORBA经过近十年的发展,已逐步走向成熟,并成功地应用在我国许多大型的软件系统中,由此产生了对掌握CORBA技术的软件开发人员的大量需求。
在此,我们应广大读者的要求组织了本次讲座。
本系列讲座分别介绍了CORBA的基本思想、体系结构以及CORBA应用程序的设计与开发,希望借此能帮助广大软件开发、设计人员,开阔思路,加深对CORBA的理解,进而真正掌握这门技术,并能在实际工作中加以灵活运用,更高效、迅速地开发出更强壮的软件系统,最终促进我国软件事业的蓬勃发展。
CORBA产生的背景近年来,随着互联网技术的日益成熟,公众及商业企业正享受着高速、低价网络信息传输所带来的高品质数字生活。
但是,由于网络规模的不断扩大以及计算机软硬件技术水平的飞速提高,给传统的应用软件系统的实现方式带来了巨大挑战。
首先,在企业级应用中,硬件系统集成商基于性能、价格、服务等方面的考虑,通常在同一系统中集成来自不同厂商的硬件设备、操作系统、数据库平台和网络协议等,由此带来的异构性给应用软件的互操作性、兼容性以及平滑升级能力带来了严重问题。
另外,随着基于网络的业务不断增多,传统的客户/服务器(C/S)模式的分布式应用方式越来越显示出在运行效率、系统网络安全性和系统升级能力等方面的局限性。
为了解决分布式计算环境(DCE,Distributed Computing Environment)中不同硬件设备和软件系统的互联,增强网络间软件的互操作性,解决传统分布式计算模式中的不足等问题,对象管理组织(OMG)提出了公共对象请求代理体系结构(CORBA),以增强软件系统间的互操作能力,使构造灵活的分布式应用系统成为可能。
作者:easyinfonetemail: easyinfonet@日期:2000-11-14 23:15:195.3 CORBA技术及实例CORBA是一种规范,它定义了分布式对象如何实现互操作。
在WorldWideWeb盛行之前,特别是Java编程语言风靡之前,C++开发者基本将CORBA作为其高端分布式对象的解决方案。
实际的CORBA规范归对象管理组(ObjeotManagementGroup)管辖,这是一家由700多家公司组成的开放的研讨会,其工作是制订对象计算的开放标准。
CORBA对象可以用任何一种CORBA软件开发商所支持的语言,如C、C++、Java、Ada和Smalltalk,来编写。
同样地,CORBA对象可以运行在任何一种CORBA软件开发商所支持的平台上,如Solaris,Windows95/NT,OpenVMS、DigitalUnix、HP-UX或AIX等。
这意味着,我们可以在Windows95下运行Java应用程序,同时动态调入并使用C++对象,而实际上,该对象可能存储于一个在Internet上的UnixWeb服务器上。
使用接口描述语言(InterfaceDescriptionLanguage)编写的对象接口,使得与语言无关的独立性成为可能。
IDL使得所有CORBA对象以一种方式被描述,仅仅需要一个由本地语言(C/C++、CORBA、Java)到IDL的“桥梁”。
CORBA对象的互通信要以对象请求解析器(Object Request Broker)为中介,这种互通可以在多种流行通信协议之上(如TCP/IP或是IPX/SPX)实现。
在TCP/IP上,来自于不同开发商的ORB用InternetInter-Orb协议(IIOP)进行通讯,这是CORBA2.0标准(最新的版本)的一部分。
目前,对于较为流行的编程语言(包括C++,Smalltalk,Java和Ada95),已经有了许多第三方的ORB。
CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程序体系规范。
或者说CORBA体系结构是对象管理组织(OMG)为解决分布式处理环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案;OMG组织是一个国际性的非盈利组织,其职责是为应用开发提供一个公共框架,制订工业指南和对象管理规范,加快对象技术的发展。
OMG组织成立后不久就制订了OMA(Object Management Architecture,对象管理体系结构)参考模型,该模型描述了OMG规范所遵循的概念化的基础结构。
OMA由对象请求代理ORB、对象服务、公共设施、域接口和应用接口这几个部分组成,其核心部分是对象请求代理ORB(Object Request Broker)。
对象服务是为使用和实现对象而提供的基本服务集合;公共设施是向终端用户应用程序提供的一组共享服务接口;域接口是为应用领域服务而提供的接口;应用接口是由开发商提供的产品,用于它们的接口,不属于OMG 标准的内容。
ORB提供了一种机制,通过这种机制,对象可以透明的发出请求和接收响应。
分布的、可以互操作的对象可以利用ORB 构造可以互操作的应用。
CORBA系统CORBA标准由对象管理组织(OMG)设立并进行控制,CORBA定议了一系列API,通信协议,和物件/服务信息模型用于使得异质应用程序能够互相操作,这些应用程序用不同的程序语言编写,运行在不同的平台上。
CORBA因此为定义明确的物件提供了平台和位置的透明性,这些物件是分布式计算平台的基础。
CORBA分布计算技术,是由绝大多数分布计算平台厂商所支持和遵循的系统规范技术,具有模型完整、先进,独立于系统平台和开发语言,被支持程度广泛的特点,已逐渐成为分布计算技术的标准。
COBRA标准主要分为3个层次:对象请求代理、公共对象服务和公共设施。
CORBA应用程序开发过程下面是CORBA应用程序开发的基本过程:1.需求分析:和其他软件开发项目一样,CORBA应用程序开发的第一步是进行需求分析。
开发团队需要与客户进行讨论,了解他们的需求和预期的应用程序功能。
这些需求包括要支持的对象类型、通信和交互的方式等。
2.接口设计:接下来,需要设计CORBA接口来定义对象之间的通信和交互协议。
CORBA接口使用接口定义语言(IDL)来描述对象的属性、方法和数据类型。
IDL是一种语言中立的描述语言,可以生成各种编程语言的代码。
3.IDL编译:一旦接口定义完成,IDL文件需要被编译成具体编程语言的代码。
CORBA支持多种编程语言,如C++、Java、Python等。
开发团队需要选择适合他们的编程语言,并使用CORBA提供的IDL编译器将IDL文件编译成特定语言的代码。
5.编译和构建:对象实现完成后,代码需要被编译和构建成可执行的应用程序。
这个过程与传统的软件开发流程类似,包括编译、链接和构建可执行文件的步骤。
6.部署和运行:部署CORBA应用程序需要考虑多个因素,如操作系统的兼容性、网络配置等。
开发团队需要确保应用程序可以在目标环境中正确运行,并处理可能出现的网络通信问题。
7.测试和调试:一旦应用程序部署完毕,开发团队需要进行系统测试和调试。
这包括使用各种测试工具和技术来验证应用程序的正确性和性能。
开发团队可能需要使用CORBA测试框架,如TAO(The ACE ORB)来进行测试。
8.维护和更新:一旦应用程序上线,并被用户使用,开发团队需要持续进行维护和更新。
这包括修复错误、添加新功能和进行性能优化。
CORBA应用程序的更新可能涉及到修改IDL文件和重新编译代码。
以上是CORBA应用程序开发的基本过程。
由于CORBA的复杂性和涉及到的多个技术,CORBA应用程序的开发需要经验丰富的开发团队和合适的工具支持。
CORBA分布式应用程序实验报告班级: 计算机系2000级D班学号: 00184271姓名: 温颖文CORBA分布式应用程序实验报告2000级计算机科学系D班温颖文 00184271一.实验名称使用CORBA实现一个分布式应用程序。
二.实验日期2004年2月14日到2月29日三.实验背景在结束了《分布式对象技术》的学习后,为了加深对分布式技术的理解,尤其是对基于体系结构设计得相当精妙的OMA参考模型的CORBA技术的理解,我选择了图书馆管理系统作为应用背景,希望尽量使用CORBA中的各种相关技术,编写了这个系统。
四.实验目的通过这个实验,进一步加深对分布式对象技术的理解,并深入地理解CORBA技术的整个框架和其中的一些细节,实现一个分布式应用系统。
五.实验环境使用JDK1.3,VISIBROKER 4.5和JBUILDER8进行开发。
六.实验过程1.步骤概述在实现CORBA分布式应用程序的过程中,需要依次进行以下步骤:1.编写接口定义文件(Library.IDL)2.编写IDL中定义的各个接口的对象实现3.编写服务程序。
4.编写客户程序。
2.重点详述(1)需求分析与设计图书馆管理系统是一个在技术上比较成熟的领域,对图书馆信息管理的需求已经是比较明确的了,主要集中于对图书和用户情况的管理,最主要的功能是为用户提供方便的借阅服务和对图书的借阅情况作一个准确的记录,全面管理图书的借阅和归还工作。
本次实验我以图书馆信息管理系统作为应用领域,利用CORBA技术构造一个简易的系统,基于实验的目的,所以我对系统的功能做了一些简化,只是提供了一些的基本功能,列表如下:函数接口基本功能addBook() 添加图书updateBook() 更新图书findBook() 查找图书borrow() 借阅图书returnBook() 归还图书query() 根据用户提供的条件查询图书AddBorrower() 添加用户FindBorrower() 查找用户实际上,我在接口和服务端是实现了removeBook()和removeBorrower()的功能的,但没有在客户端提供,客户端的功能还不是很完善,这是有待解决的。
CORBA 程序设计指南(入门)Author: 龙湘明Company: 北京邮电大学国家重点实验室Date : 2001-2-28Update : 2013-07-12这里假设你对CORBA毫无所知。
对JAVA略有所知,因为这里使用JAVA作为程序设计语言。
学习了本书,你将对CORBA有个初步了解,并能编写一个简单完整的CORBA 应用程序。
1.C ORBA 简介CORBA(Common Object Request Broker Architecture)是为了实现分布式计算而引入的。
为了说明CORBA在分布计算上有何特点,我们从它与其它几种分布计算技术的比较中进行说明。
与过去的面向过程的RPC(Remote Procedure Call)不同,CORBA是基于面向对象技术的,它能解决远程对象之间的互操作问题。
MicroSoft 的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 Language)的接口定义语言,能做到语言无关,也就是说,任何语言都能制作CORBA组件,而CORBA组件能在任何语言下使用。
因此,可以这样理解CORBA:CORBA一种异构平台下的语言无关的对象互操作模型。
1.1 CORBA体系结构CORBA的体系结构如下:图1.1 CORBA体系结构CORBA上的服务用IDL描述,IDL将被映射为某种程序设计语言如C++或Java,并且分成两分,在客户方叫IDL Stub(桩), 在服务器方叫IDL Skeleton(骨架)。
两者可以采用不同的语言。
服务器方在Skeleton的基础上编写对象实现(Object Implementation),而客户方要访问服务器对象上的方法,则要通过客户桩。
而双方又要通过而ORB(Object Request Broker,对象请求代理)总线通信。
与传统的Client/Server模式(我们称为Two-tier client/server)不同,CORBA是一种multi-tier client/server architecture,更确切的说,是一种three-tier client/server模式。
双重客户/服务器模式存在的问题是两者耦合太紧,它们之间采用一种私有协议通信,服务器的改变将影响到客户方。
多重客户/服务器与此不同,两者之间的通信不能直接进行,而需要通过中间的一种叫代理的方式进行。
在CORBA中这种代理就是ORB。
通过它,客户和服务器不再关心通信问题,它们只需关心功能上的实现。
从这个意义上讲,CORBA是一种中间件(Middleware)技术。
下面列出CORBA中的一些重要概念,或者说CORBA中的几个重要名词,有助于读者了解CORBA的一些重要的方面。
1.2 CORBA中的几个概念1.2.1 ORB(Object Request Broker)CORBA体系结构的核心就是ORB。
可以这样简单理解:ORB就是使得客户应用程序能调用远端对象方法的一种机制。
图1.2 ORB模型具体来说就是:当客户程序要调用远程对象上的方法时,首先要得到这个远程对象的引用,之后就可以像调用本地方法一样调用远程对象的方法。
当发出一个调用时,实际上ORB 会截取这个调用(通过客户Stub完成,“提高”篇中会详细解释),因为客户和服务器可能在不同的网络、不同的操作系统上甚至用不同的语言实现,ORB还要负责将调用的名字、参数等编码成标准的方式(称Marshaling)通过网络传输到服务器方(实际上在同一台机器上也如此),并通过将参数Unmarshaling的过程,传到正确的对象上(这整个过程叫重定向,Redirecting),服务器对象完成处理后,ORB通过同样的Marshaling/Unmarshaling方式将结果返回给客户。
因此,ORB是一种功能,它具备以下能力:1.对象定位(根据对象引用定位对象的实现)2.对象定位后,确信Server能接受请求3.将客户方请求通过Marshaling/Unmarshing方式重定向到服务器对象上4.如果需要,将结果以同样的方式返回。
1.2.2 IDL(Interface Definition Language)IDL,接口定义语言,是CORBA体系中的另一个重要概念。
如果说ORB使CORBA 做到平台无关,那么IDL, 则使CORBA做到语言无关。
正像其名字中显示的那样,IDL仅仅定义接口,而不定义实现,类似于C中的头文件。
实际上它不是真正的编程语言。
要用它编写应用,需要将它映射它相应的程序设计语言上去,如映射到C++或JAVA上去。
映射后的代码叫Client Stub 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 simpleDemo{interface grid {readonly attribute short height; // height of the gridreadonly 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);};};This 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 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.javagridPOA.javagridPOATie.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 availabilitySimplicityScalabilityLow costGeneralityArchitectural neutrality也是说,GIOP设计的尽可能简单,开销最小,同时又具有最广泛的适应性和可扩展性,以适应不同的网络。
GIOP定义了以下几个方面:1.The Common Data Representation (CDR) definition.通用数据表示定义。
它实际上是IDL数据类型在网上传输时的编码方案。
它对所有IDL 数据类型的映射都作了规定。
2.GIOP Message Formats.它规定了Client和Server两个角色之间要传输的消息格式。
主要包括Request和Reply 两种消息。
一个Request 消息有以下几部分组成:A GIOP message headerA Request HeaderThe Request Body相应的,一个Reply消息则包括A GIOP message headerA Reply HeaderThe 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 long message_size;};Request Header格式如下:// GIOP 1.1struct RequestHeader_1_1 {IOP::ServiceContextList service_context;unsigned long request_id;boolean response_expected;octet reserved[3]; // Added in GIOP 1.1sequence <octet> 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; // ... to the rightmost};3.GIOP Transport Assumptions:主要规定在任何面向连接的网络传输层上的一些操作规则。