一、概述
CORBA
(Common Object Request Broker Architecture, 公共对象请求代理体系结构)是由OMG(对象管理组织,Object Management Group)提出的应用软件体系结构和对象技术规范,其核心是一套标准的语言、接口和协议,以支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用。
CORBA
经过近十多年的发展,已逐步走向成熟,并成功地应用在我国许多大型的软件系统中,由此产生了对掌握CORBA技术的软件开发人员的大量需求。在此,我们应广大读者的要求组织了本次讲座。
二、CORBA产生的背景
近年来,随着互联网技术的日益成熟,公众及商业企业正享受着高速、低价网络信息传输所带来的高品质数字生活。但是,由于网络规模的不断扩大以及计算机软硬件技术水平的飞速提高,给传统的应用软件系统的实现方式带来了巨大挑战。
首先,在企业级应用中,硬件系统集成商基于性能、价格、服务等方面的考虑,通常在同一系统中集成来自不同厂商的硬件设备、操作系统、数据库平台和网络协议等,由此带来的异构性给应用软件的互操作性、兼容性以及平滑升级能力带来了严重问题。
另外,随着基于网络的业务不断增多,传统的客户/服务器(C/S)模式的分布式应用方式越来越显示出在运行效率、系统网络安全性和系统升级能力等方面的局限性。
为了解决分布式计算环境(DCE,Distributed Computing Environment)中不同硬件设备和软件系统的互联,增强网络间软件的互操作性,解决传统分布式计算模式中的不足等问题,对象管理组织(OMG)提出了公共对象请求代理体系结构(CORBA),以增强软件系统间的互操作能力,使构造灵活的分布式应用系统成为可能。
正是基于面向对象技术的发展和成熟、客户/服务器软件系统模式的普遍应用以及集成已有系统等方面的需求,推动了CORBA技术的成熟与发展。作为面向对象系统的对象通信的核心,CORBA为当今网络计算环境带来了真正意义上的互联。
三、CORBA的发展历程
1
、对象管理组织(OMG)简介
OMG
成立于1989年,作为一个非营利性组织,集中致力于开发在技术上具有先进性、在商业上具有可行性并且独立于厂商的软件互联规范,推广面向对象模型技术,增强软件的可移植性(Portability)、可重用性(Reusability)和互操作性(Interoperability)。该组织成立之初,成员包括Unisys、Sun、Cannon、Hewlett-Packard、Philips等在业界享有声誉的软硬件厂商,目前该组织拥有800多家成员。
2
、CORBA主要版本的发展历程
· 1990
年11月,OMG发表《对象管理体系指南》,初步阐明了CORBA的思想;
· 1991
年10月,OMG推出1.0版,其中定义了接口定义语言(IDL)、对象管理模型以及基于动态请求的API和接口仓库等内容;
· 1991
年12月,OMG推出了CORBA 1.1版,在澄清了1.0版中存在的二义性的基础上,引入了对象适配器的概念;
· 1996
年8月,OMG基于以前的升级版本,完成了2.0版的开发,该版本中重要的内容是对象请求代理间协议(IIOP,Internet Inter-ORB Protocol)的引入,用以实现不同厂商的ORB真正意义上的互通;
· 1998
年9月,OMG发表了CORBA 2.3版,增加了支持CORBA对象的异步实时传输、服务质量规范等内容。目前,宣布支持CORBA 2.3规范的中间件厂商包括Inprise(Borland)、Iona、BEA System等著名的CORBA产品生产商。
· 2002
年8月,CORBA规范3.0终于出来了,在CORBA3.0规范中去掉了MiniCORBA和实时CORBA。
四、CORBA体系结构
CORBA
规范充分利用了现今软件技术发展的最新成果,在基于网络的分布式应用环境下实现应用软件的集成,使得面向对象的软件在分布、异构环境下实现可重用、可移植和互操作。其特点可以总结为如下几个方面:
1
、引入中间件(MiddleWare)作为事务代理,完成客户机(Client)向服务对象方(Server)提出的业务请求(引入中间件概念后分布计算模式;
2
、实现客户与服务对象的完全分开,客户不需要了解服务对象的实现过程以及具体位置;
3
、提供软总线机制,使得在任何环境下、采用任何语言开发的软件只要符合接口规范的定义,均能够集成到分布式系统中;
4
、CORBA规范软件系统采用面向对象的软件实现方法开发应用系统,实现对象内部细节的完整封装,保留对象方法的对外接口定义。
在以上特点中,最突出的是中间件的引入, 在CORBA系统中称为对象请求代理(ORB,Object Request Broker)和采用面向对象的开发模式。
对象模型是应用开发人员对客观事物属性和功能的具体抽象。由于CORBA使用了对象模型,将CORBA系统中所有的应用看成是对象及相关操作的集合,因此通过对象请求代理(ORB),使CORBA系统中分布在网络中应用对象的获取只取决于网络的畅通性和服务对象特征获取的准确程度,而与对象的位置以及对象所处的设备环境无关。
CORBA
体系的主要内容包括以下几部分:
(1)
对象请求代理ORB(Object Request Broker):负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互操作的基础。
(2)
对象服务(Object Services):为使用和实现对象而提供的基本对象集合,这些服务应独立于应用领域。主要的CORBA服务有:名录服务(Naming Service)、事件服务(Event Service)、生命周期服务(Life Cycle Service)、关系服务(Relationship Service)、事务服务(Transaction Service)等。这些服务几乎包括分布系统和面向对象系统的各个方面,每个组成部分都非常复杂。
(3)
公共设施(Common Facilitites):向终端用户提供一组共享服务接口,例如系统管理、组合文档和电子邮件等。
(4)
应用接口(Application Interfaces):由销售商提供的可控制其接口的产品,相应于传统的应用层表示,处于参考模型的最高层。
(5)
领域接口(Domain Interfaces):为应用领域服务而提供的接口。如OMG组织为PDM系统制定的规范。
CORBA
技术是先进技术发展的结果,它将面向对象的概念揉合到分布计算中,使得CORBA规范成为开放的、基于客户/服务器模式的、面向对象的分布计算的工业标准。
在CORBA体系结构的中心部分是对象请求代理程序(Object Request Broker,ORB),它作为一个"软件总线"来连接网络上的不同对象。在客户端,ORB提供一个发送操作调用的接口;而在服务器端,ORB提供一个将操作调用传输到服务器的API。ORB的任务是定位一个合适的服务器,并且通过一个对象适配器(Object Adapter,OA)将操作调用传送给服务器。OA的目的是:给框架发送方法,调用并且支持服务器对象的生命周期(例如,对象的建立和删除)。老版本的CORBA规范包含一个基本对象适配器(Basic Object Adapter,BOA),就像它的名字一样,BOA是十分简单的。它定制的也不是很好,它禁止CORBA应用程序的可移植性。作为CORBA标准的版本2.2,BOA被可对象适配器(Portable Object Adapter,POA)所取代。MICO支持BOA和POA。
在客户端,ORB提供一个一般的API,它是一个动态调用接口(Dynamic Invocation Interface,DII)来发送操作调用。在服务器端,OA通过动态框架接口(Dynamic Skeleton Interface,DSI)来传输一个操作调用,它为服务器端镜像DII的行为。一个在客户和服务器之间的静态接口通过一种接口定义语言(Interface Definition Language,IDL)来定义。虽然DII和DSI代表到ORB的一般接口,并且通常被用于桥,但一个IDL规范可以用于产生到ORB的类型安全的、应用特定的接口。
在客户端,客户与ORB之间的静态接口被称为静态调用接口(Static Invocation Interface,SII),在服务器端,这个接口被称为静态框架接口(Static Skeleton Interface,SSI)。一个IDL编译器从一个IDL规范来生成一个存根stub和一个框架skeketon。存根的功能类似于一个客户代理,而框架负责发送一个操作调作给一个真正的此操作的实现程序。
CORBA
也定义了两个运行时的数据库。接口存储库(Interface Repository,IR)包含运行时所需要的IDL规范。IR可以查询用户定义的IDL类型的详细情况,从而提供一个基本类型映射机制。第二个数据库被称为实现存储库(Implementation Repository,IMR),并且它包含服务器的详细信息(即,哪一个执行程序需要被放置到哪一个服务器上)。OA需要这个信息来自动激活服务器。
CORBA
标准也包含一个ORB之间的协议,它被称为互联网ORB之间的协议(Internet Inter-ORB Protocol,IIOP),它描述了基本的和结构化的IDL类型的在线表示,以及协议所需的协议数据单元。设计IIOP的目的是使它保持简单、可升级并且通作。IIOP使用TCP/IP来在不同的ORB之间传输操作调作和它们的参数。
最后,需要说明一点,CORBA是一个规范而不是一个程序实现。CORBA提供了一个允许在分布式和异构型环境中的应用程序之间进行互操作的框架,但是关于如何实现CORBA标准的特定技术,它并没有给出任何规定。因此,目前在市场上有许许多的CORBA程序实现,如Iona的Orbix,Inprise的VisiBroker。
五、分布式对象技术-- COM、Java和COBRA之间特性比较
目前国际上,分布式对象技术有三大流派-- COBRA、COM/DCOM和Java。CORBA技术是最早出现的,1991年OMG颁布了COBRA 1.0标准,在当时来说做得非常漂亮;再有就是Microsoft的COM系列,从最初的COM发展成现在的DCOM,形成了Microsoft一套分布式对象的计算平台;而Sun公司的Java平台,在其最早推出的时候,只提供了远程的方法调用,在当时并不能被称为分布式对象计算,只是属于网络计算里的一种,接着推出的JavaBean,也还不足以和上述两大流派抗衡,而其目前的版本叫J2EE,推出了EJB,除了语言外还有组件的标准以及组件之间协同工作通讯的框架。于是,也就形成了目前的三大流派。
应该说,这三者之中,COBRA标准是做的最漂亮的。COBRA标准主要分为3个层次:对象请求代理、公共对象服务和公共设施。最底层是对象请求代理ORB,规定了分布对象的定义(接口)和语言映射,实现对象间的通讯和互操作,是分布对象系统中的"软总线";在ORB之上定义了很多公共服务,可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种各样的服务;最上层的公共设施则定义了组件框架,提供可直接为业务对象使用的服务,规定业务对象有效协作所需的协定规则。总之,CORBA的特点是大而全,互操作性和开放性非常好。目前CORBA的版本是2.3。CORBA 3.0也已完成了,增加了有关Internet集成和QoS控制等内容。CORBA的缺点是庞大而复杂,并且技术和标准的更新相对较慢,COBRA规范从1.0升级到2.0所花的时间非常短,而再往上的版本的发布就相对十分缓慢了。
相比之下,Java标准的制订就快得多,Java是Sun公司自己定的,演变的很快。Java的优势是纯语言的,跨平台性非常好。Java分布对象技术通常指远程方法调用(RMI)和企业级JavaBean(EJB)。RMI提供了一个Java对象远程调用另一Java对象的方法的能力,与传统RPC类似,只能支持初级的分布对象互操作。Sun公司于是基于RMI,提出了EJB。基于Java服务器端组件模型,EJB框架提供了像远程访问、安全、交易、持久和生命期管理等多种支持分布对象计算的服务。目前,Java技术和CORBA技术有融合的趋势。
COM
技术是Microsoft独家做的,是在Windows 3.1中最初为支持复合文档而使用OLE技术上发展而来,经历了OLE 2/COM、ActiveX、DCOM和COM+等几个阶段,目前COM+把消息通讯模块MSMQ和解决关键业务的交易模块MTS都加进去了,是分布对象计算的一个比较完整的平台。Microsoft的COM平台效率比较高,同时它有一系列相应的开发工具支持,应用开发相对简单。但它有一个致命的弱点就是COM的跨平台性较差,如何实现与第三方厂商的互操作性始终是它的一大问题。从分布对象技术发展的角度来看,大多数人认为COM竞争不过COBRA。
下面是三者在集成性和可用性方面的比较:
·CORBA/ORB ActiveX/DCOM EJB/RMI
·
集成性:
·
支持跨语言操作 好 好 一般
·
支持跨平台操作 好 一般 好
·
网络通讯 好 一般 好
·
公共服务构件 好 一般 好
可用性:
·
事务处理 好 一般 一般
·
消息服务 一般 一般 一般
·
安全服务 好 一般 好
·
目录服务 好 一般 一般
·
容错性 一般 一般 一般
·
产品成熟性 一般 一般 一般
·
软件开发商的支持度 一般 好 好
·
可扩展性 好 一般 好
六、CORBA应用前景
CORBA规范的推出,重新调整了客户机与服务器之间的关系。客户机可以向服务器提出事务请求,同时也可以为下一个请求充当服务器角色。
由于CORBA系统引入了中间件的概念,即事务代理,由中间件完成客户机与服务器之间的通信,使得服务器对于客户机的位置相对透明,取消了原有分布式计算模型中客户机、服务器之间的一一对应关系。CORBA客户机可以在运行时动态获得服务对象的位置,并且可以对多个服务对象提交事务请求,因此,极大推动了分布计算的发展。
分布计算是指网络中两个或两个以上的软件相互共享信息资源。这些软件可以位于同一台计算机中,也可以部署在网络节点的任意位置。基于分布式模型的软件系统具有均衡运行系统负载、共享网络资源的技术优势。
另外,CORBA规范约束采用面向对象的分布式软件的构造方法,以接口定义语言的形式实现对象内部细节的完整封装,从而降低了软件系统的复杂程度,增加了软件功能的可重用性。CORBA提供到C/C++、Java、SmallTalk等高级语言的映射,很大程度地减小了对程序设计语言的依赖性,使软件开发人员可以在较大范围内共享已有成果。
正是以上特点推动了分布式多层软件体系结构的发展。目前,CORBA技术在银行、电信、保险、电力和电子商务领域都有广泛的应用。对象中间件技术发展迅速,各大软硬件厂商都在积极参与有关标准的制定和产品开发工作,像IBM、HP、DEC、AT&T、ICL、Microsoft等都制定了相应的战略。许多对象中间件的专门厂商也相继诞生,未来的对象中间件市场将会出现群雄逐鹿的局面。
附:学习CORBA应理解的一些基本概念
1、CORBA(Common Object Request Broker Architecture)公共对象请求代理程序体系结构)。CORBA是一个规范(specification)而不是程序实现(implementation)。它提供了一个允许在分布式和异构型环境中应用程序之间进行互操作的框架。
2、ORB(Object Request Broker)对象请求代理:它作为一个"软件总线"来连接网络上的不同对象,提供对象的定位和方法调用,它是CORBA实现的关键。
3、OA(Object Adapter)对象适配器:用于构造对象实现与ORB之间的接口。它给框架发送方法,调用并且支持服务器对象的生命周期(如:对象的创建和删除)。
4、BOA(Basic Object Adapter)基本对象适配器:负责激活对象,即当客户请求对象的服务时,激活对象实现的能力。
5、POA(Portable Object Adapter)可移植对象适配器:是BOA的替代方式,提供大量可扩展的接口,来处理一些对于BOA来说不合理的要求。特性:
(1)支持透明激活对象。
(2)允许单个服务者支持很多对象标识。
(3)允许一个服务者上有多个POA,每个都有自己的一套管理策略。
(4)将对不存在服务者的请求委托给默认服务者,或者向服务者的管理器请求一个合适的服务者。
6、DII(Dynamic Invocation Interface)动态调用接口:位于客户端,发送客户端的调用请求。
7、DSI(Dynamic Skeleton Interface)动态框架接口,位于服务器端,传送客户端的调用请求。
8、IDL(Interface Definition Language)接口定义语言:定义客户和服务器之间的静态接口,通过编译器生成客户存根、服务器框架,以及根据支持的语言映射,自动生成来自一个CORBA IDL的代码。目前支持的语言映射包括:Java,C++,Ada,SmallTalk和COBOL等。
9、SII(Static Invocation Interface)静态调用接口:位于客户端,客户与ORB之间的静态接口。
10、SSI(Static Skeleton Interface)静态框架接口:位于服务器端,ORB与服务器之间的静态接口。
11、stub 存根:位于客户端,由IDL编译器编译IDL文件生成,其功能类似一个客户代理。
12、skeleton 框架:位于服务器端,由IDL编译器编译IDL文件生成,其功能是负责发送一个操作调用给能实现此操作的服务。
13、IR(Interface Repository)接口存储库:存储运行时所需要的IDL规范。
14、IMR(Implementation Repository)实现存储库:存储对象实现(一个服务器)的详细信息(即一个执行程序需要被放置在哪一个服务器上)。
15、GIOP(General Inter-ORB Protocol)通用ORB之间的协议:定义了一个不同ORB之间的接口。
16、IIOP(Internet Inter-ORB Protocol)因特网ORB之间的协议:IIOP把GIOP消息数据映射为TCP/IP连接行为和输入/输出流读/写。
注意:IIOP不是完全从GIOP分离出来的协议,它更像是GIOP的一个实例。
17、IOR(Interoperable Object Reference)可操作对象引用:它包括所有客户与服务器联系所需的各种信息(包括CORBA服务器对象进程的IP地址和TCP端口等),ORB将通过它产生在网络上唯一标识那个将被分布对象的消息。
18、ORBAservices-- CORBA服务:在ORB级别之上,定义了大多数分布式企业对象利用的公共服务。
如:命名服务、交易对象服务、关系服务、生命周期服务、外表化服务、持久性服务、查询服务、对象集合服务、属性服务、事件服务、许可证服务、时间服务、事务服务、并发控制服务和安全服务等
19、CORBAfacilities-- CORBA工厂:位于CORBAservices之上,定义了更高层次的分步式服务与框架。如:打印、电子邮件、文档管理等。
CORBA规范的推出,重新调整了客户机与服务器之间的关系。客户机可以向服务器提出事务请求,同时也可以为下一个请求充当服务器角色。
由于CORBA系统引入了中间件的概念,即事务代理,由中间件完成客户机与服务器之间的通信,使得服务器对于客户机的位置相对透明,取消了原有分布式计算模型中客户机、服务器之间的一一对应关系。CORBA客户机可以在运行时动态获得服务对象的位置,并且可以对多个服务对象提交事务请求,因此,极大推动了分布计算的发展。
分布计算是指网络中两个或两个以上的软件相互共享信息资源。这些软件可以位于同一台计算机中,也可以部署在网络节点的任意位置。基于分布式模型的软件系统具有均衡运行系统负载、共享网络资源的技术优势。
另外,CORBA规范约束采用面向对象的分布式软件的构造方法,以接口定义语言的形式实现对象内部细节的完整封装,从而降低了软件系统的复杂程度,增加了软件功能的可重用性。CORBA提供到C/C++、Java、SmallTalk等高级语言的映射,很大程度地减小了对程序设计语言的依赖性,使软件开发人员可以在较大范围内共享已有成果。
正是以上特点推动了分布式多层软件体系结构的发展。目前,CORBA技术在银行、电信、保险、电力和电子商务领域都有广泛的应用。对象中间件技术发展迅速,各大软硬件厂商都在积极参与有关标准的制定和产品开发工作,像IBM、HP、DEC、AT&T、ICL、Microsoft等都制定了相应的战略。许多对象中间件的专门厂商也相继诞生,未来的对象中间件市场将会出现群雄逐鹿的局面。
附:学习CORBA应理解的一些基本概念
1、CORBA(Common Object Request Broker Architecture)公共对象请求代理程序体系结构)。CORBA是一个规范(specification)而不是程序实现(implementation)。它提供了一个允许在分布式和异构型环境中应用程序之间进行互操作的框架。
2、ORB(Object Request Broker)对象请求代理:它作为一个"软件总线"来连接网络上的不同对象,提供对象的定位和方法调用,它是CORBA实现的关键。
3、OA(Object Adapter)对象适配器:用于构造对象实现与ORB之间的接口。它给框架发送方法,调用并且支持服务器对象的生命周期(如:对象的创建和删除)。
4、BOA(Basic Object Adapter)基本对象适配器:负责激活对象,即当客户请求对象的服务时,激活对象实现的能力。
5、POA(Portable Object Adapter)可移植对象适配器:是BOA的替代方式,提供大量可扩展的接口,来处理一些对于BOA来说不合理的要求。特性:
(1)支持透明激活对象。
(2)允许单个服务者支持很多对象标识。
(3)允许一个服务者上有多个POA,每个都有自己的一套管理策略。
(4)将对不存在服务者的请求委托给默认服务者,或者向服务者的管理器请求一个合适的服务者。
6、DII(Dynamic Invocation Interface)动态调用接口:位于客户端,发送客户端的调用请求。
7、DSI(Dynamic Skeleton Interface)动态框架接口,位于服务器端,传送客户端的调用请求。
8、IDL(Interface Definition Language)接口定义语言:定义客户和服务器之间的静态接口,通过编译器生成客户存根、服务器框架,以及根据支持的语言映射,自动生成来自一个CORBA IDL的代码。目前支持的语言映射包括:Java,C++,Ada,SmallTalk和COBOL等。
9、SII(Static Invocation Interface)静态调用接口:位于客户端,客户与ORB之间的静态接口。
10、SSI(Static Skeleton Interface)静态框架接口:位于服务器端,ORB与服务器之间的静态接口。
11、stub 存根:位于客户端,由IDL编译器编译IDL文件生成,其功能类似一个客户代理。
12、skeleton 框架:位于服务器端,由IDL编译器编译IDL文件生成,其功能是负责发送一个操作调用给能实现此操作的服务。
13、IR(Interface Repository)接口存储库:存储运行时所需要的IDL规范。
14、IMR(Implementation Repository)实现存储库:存储对象实现(一个服务器)的详细信息(即一个执行程序需要被放置在哪一个服务器上)。
15、GIOP(General Inter-ORB Protocol)通用ORB之间的协议:定义了一个不同ORB之间的接口。
16、IIOP(Internet Inter-ORB Protocol)因特网ORB之间的协议:IIOP把GIOP消息数据映射为TCP/IP连接行为和输入/输出流读/写。
注意:IIOP不是完全从GIOP分离出来的协议,它更像是GIOP的一个实例。
17、IOR(Interoperable Object Reference)可操作对象引用:它包括所有客户与服务器联系所需的各种信息(包括CORBA服务器对象进程的IP地址和TCP端口等),ORB将通过它产生在网络上唯一标识那个将被分布对象的消息。
18、ORBAservices-- CORBA服务:在ORB级别之上,定义了大多数分布式企业对象利用的公共服务。
如:命名服务、交易对象服务、关系服务、生命周期服务、外表化服务、持久性服务、查询服务、对象集合服务、属性服务、事件服务、许可证服务、时间服务、事务服务、并发控制服务和安全服务等
19、CORBAfacilities-- CORBA工厂:位于CORBAservices之上,定义了更高层次的分步式服务与框架。如:打印、电子邮件、文档管理等。