标题：CORBA
简介
基本情况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把用其他语言开发的程序码和关于该程序码能力和如何调用该程序码的资讯包到一个套装(package)中，包成套装的物件则可以在网络上被其他程序(或CORBA物件)调用。 在这个意义上来讲，CORBA可以被看作是一个机器可读的文件档格式，类似于标头档(header)，但是具有相当多的资讯。
CORBA使用一种接口定义语言用于刻画物件将呈现出来的接口。CORBA又规定了从IDL到特定程序语言，如C++或Java，实现的映射。这个映射精确的描述了CORBA资料类型是如何被用户端和服务器端实现的。标准映射的有Ada、C、C++、Smalltalk、Java、以及Python。 还有一些非标准的映射，为Perl和Tcl的映射由这些语言写的ORB实现。　
ORB是一个在对象间建立客户/服务器联系的中件。使用ORB，客户可以调用服务器的对象或对象中的应用，被调用的对象不要求在同一台机器上。由ORB负责进行通信，同时ORB也??象完成后返回结果。客户对象完全可以不关心服务器对象的位置，实现它所采用的具体技术和工作的硬件平台，甚至不必关心服务器对象的与服务无关的接口信息，这就大大简化了客户程序的工作。既然能够这么方便，那ORB就需要提供在不同机器间应用程序间的通信，数据转换，并提供多对象系统的无缝连接。
我们通常编制客户/服务器程序时，常常需要自己定义通信协议，而协议的制定往往与硬件和实现的方法有关，而ORB能够简化这一过程。在ORB下，协议通过IDL语言进行定义，保证了一致性，为了照顾到灵活性，ORB允许程序员选择相应的操作系统，执行环境和编程语言。更重要的是它可以使原来的代码通过一定的方式重用。CORBA是面向对象标准的第一步，有了这个标准，软件的实现与工作环境对用户和开发者不再重要，可以把精力更多地放在本地系统的实现与优化上。
控制系统CORBA标准由对象管理组织（OMG）设立并进行控制，CORBA定议了一系列API，通信协议，和物件/服务信息模型用于使得异质应用程序能够互相操作，这些应用程序用不同的程序语言编写，运行在不同的平台上。CORBA因此为定义明确的物件提供了平台和位置的透明性，这些物件是分布式计算平台的基础。
CORBA分布计算技术，是由绝大多数分布计算平台厂商所支持和遵循的系统规范技术，具有模型完整、先进，独立于系统平台和开发语言，被支持程度广泛的特点，已逐渐成为分布计算技术的标准。COBRA标准主要分为3个层次：对象请求代理、公共对象服务和公共设施。最底层是对象请求代理ORB，规定了分布对象的定义（接口）和语言映射，实现对象间的通讯和互操作，是分布对象系统中的"软总线"；在ORB之上定义了很多公共服务，可以提供诸如并发服务、名字服务、事务(交易)服务、安全服务等各种各样的服务；最上层的公共设施则定义了组件框架，提供可直接为业务对象使用的服务，规定业务对象有效协作所需的协定规则。 CORBA的IDL只是IDL的一个例子。 在提供用户语言和平台中性的远端程序呼叫规范的同时，CORBA也定义了通常需要的服务，例如事务和安全。
技术创新CORBA（通用对象请求代理体系结构)是在当今快速发展的软件与硬件资源的情况下发展出的一种新技术。它可以让分布的应用程序完成通信，无论这种应用程序是什么厂商生产的，只要符合CORBA标准就可以相互通信。CORBA 1.1于1991年由OMG提出，同时还提出了接口定义语言Interface Definition Language，IDL）以及能够让客户/服务器对象在特定的ORB（对象请求代理）实现中进行通信。而1994年提出并被采纳的CORBA 2.0标准才真正实现了不同生产厂商间的互操作性。
CORBA(公共对象请求代理架构)：这是个和微软com,com+齐名的同类软件技术规范，由OMT提出。
用于在不同进程(程序)之间，甚至是不同物理机器上的进程(程序)之间通讯。底层技术依靠RPC[远程过程调用]实现。
来源
●CORBA体系结构是对象管理组织（OMG）为解决分布式处理环境(DCE)中，硬件和软件系统的互连而提出的一种解决方案；
●OMG是一个世界性的非赢利论坛组织，成立于1989年，最初有3Com、AmericanAirlines、Cannon Inc、DataGeneral、HP、Philips Telecommunication N.M、SUN、Unisys八个成员，目前已超过700个成员，其目标是开发一种技术上先进和商业上可用，独立于厂商的软件工业规范；
●1991年OMG提出了CORBA1.1，定义了IDL接口定义语言，开发出对象请求代理ORB中间件,在客户机/服务器结构中，ORB通过一定的应用程序接口(API)，实现对象之间的交互；
●1994年12月OMG完成了CORBA2.0，提出了IIOP（Internet Inter Object Protocol），用以规范不同厂家的ORB之间的真正互通，同时增加了互操作性和对C++及SmallTalk的匹配，OMG期望通过上述规范，建立一种“连接世界的体系结构”；
●CORBA 在面向对象的标准化和互操作上迈出了坚实的一步。使用CORBA，用户能在不知道软件和硬件平台以及网络位置的情况下透明的获取信息；
●CORBA自动进行许多网络规划任务如对象注册、定位、激活；多路径请求；分帧和错误处理机制；并行处理以及执行操作；
●作为面向对象系统中的通信核心， CORBA为当代的计算环境中带来了真正意义上的互联；
二、CORBA的含义及特点
●CORBA定义了一种面向对象的软件构件构造方法，使不同的应用可以共享由此构造出来的软件构件；
●每个对象都将其内部操作细节封装起来，同时又向外界提供了精确定义的接口，从而降低了应用系统的复杂性，也降低了软件开发费用；
●CORBA的平台无关性实现了对象的跨平台引用，开发人员可以在更大的范围内选择最实用的对象加入到自己的应用系统之中；
●CORBA的语言无关性使开发人员可以在更大的范围内相互利用别人的编程技能和成果， 是实现软件复用的实用化工具
用途
●存取来自现行桌面应用程序的分布信息和资源；
●使现有业务数据和系统成为可供利用的网络资源；
●为某一特定业务用的定制的功能和能力来增强现行桌面工具和应用程序；
●改变和发展基于网络的系统以反映新的拓扑结构或新资源；
背景
●面向对象技术的兴起；
●客户/服务器模式的普遍应用；
●集成已有系统及通信和实现细节的需求；
●现有分布处理机制和方法存在着不足之处。
优点
面向对象的软件，以数据为中心设计，对象类既具有模块的封装性和类属等特性，还具有继承特性
，极大地提高了类的可扩充性和可再用能力。对象类较之于传统软件的功能模块而另具有的优点是：
（1）易于理解，具有完整的语义特征；
（2）易于扩充和修改，具有较高的通用性和适应性；
（3）易于构造组装，具有规范的外部接口。  CORBA系统开发应用组件必须遵循标准，以保证软件组件的互操作性，只有遵循统一的标准，不同厂商的、不同时期的、不同程序设计风格的、不同编程语言的、不同操作系统的、不同平台上的软件或软件部件才能进行交流与合作。为此，OMG（ObjectManageGroup）提供了一个对象标准CORBA，它定义了一个网连对象的接口，使得对象可以同时工作。基于CORBA的对象请求代理ORB为客户机/服务器开发提供了中间件的新格式。
作为OMG成员的微软公司撇开CORBA而另辟了COM（ComponetObjectModel），即组件对象模型，并把COM定位成基于对象的软件开发模型，尽管COM被认为是微软鼓噪出来的技术，但支持COM的开发工具却不断增多，其中大部分来自于微软，包括VisualBasic和VisualC ++。
公共对象请求代理结构：CORBA标准
全球性网络使线上的所有设备和软件成为全球共享的浩瀚的资源，计算机环境也从集中式发展到分布式环境，开放式系统的发展使用户能够透明地应用由不同厂商制造的不同机型不同平台所组成的异构型计算资源，因此，分布式处理和应用集成自然而然地成为人们的共同要求，那么什么是分布式处理和应用集成呢？它们的功能和关键技术是什么呢？简单地讲，分布式处理和应用集成就是指在异构的、网络的、物理性能差别很大的、不同厂商的、不同语言的信息资源的基础上构建信息共享的分布式系统，并且能够有效地进行应用系统和分布式处理的集成。分布式处理的关键在于定义可管理的软件构件，即面向对象技术中的“对象”。应用集成的关键在于为跨平台、跨机种、跨编程语言的产品提供统一的应用接口。OMG组织针对当今信息产业的要求，公布了CORBA标准，即公共对象请求代理体系结构（Common Object Request Broker Architecture），这是一个具有互操作性和可移植性的分布式面向对象的应用标准。
CORBA的核心是对象请求代理ORB，它提供对象定位、对象激活和对象通讯的透明机制。客户发出要求服务的请求，而对象则提供服务，ORB把请求发送给对象、把输出值返回给客户。ORB的服务对客户而言是透明的，客户不知道对象驻留在网络中何处、对象是如何通讯、如何实现以及如何执行的，只要他持有对某对象的对象引用，就可以向该对象发出服务请求。
CORBA允许用户以两种不同的方式提出对象请求：
1）静态调用：
通过给定接口的存根，在编译了对象代码后，进入客户端的程序。因此，静态调用必须在编译时就知道对象及其类型。
2）动态调用：
通过ORB的动态调用接口DII，在运行时生成访问对象的代码。
不管客户以哪一种形式提出请求，ORB的任务是：找出所要对象的位置，激活该对象，向对象传递此请求。对象执行所请求的服务后，把输出值返回给ORB，然后再由ORB返回给客户。
概念
对象连接CORBA广泛地支持对象的实现，在单服务器系统中也可以实现由接口定义语言定义的接口。ORB的灵活性既可以直接集成已有的应用，又不会使新对象受某些原则的制约。  CORBA系统对象连接提供了有不同类型对象实现时，使用ORB服务的方法，服务包括：对象引用、方法调用、安全控制、对象实现的激活与静候等。
接口定义语言（IDL）
CORBA用IDL来描述对象接口，IDL是一种说明性语言，它的语法类似于C++。
IDL提供的数据类型有：基本数据类型、构造类型、模板类型、和复合类型、操作说明。这些类型可以用来定义变元的类型和返回类型，操作说明则可以用来定义对象提供的服务。
IDL还提供模块构造，其中可以包含接口，而接口是IDL各类型中最重要的，它除了描述CORBA对象以外，还可以用作对象引用类型。
IDL提供了接口继承性，派生接口可以继承其基类接口所定义的操作与类型。IDL的接口继承性有其特殊性，此处不赘述。
总之，CORBA的IDL是一种说明性语言，描述面向对象系统开发所遵循的接口与实现相分离的基本原则。
动态调用接口把IDL说明编译成面向对象程序设计语言的实代码后，客户可以调用已知对象的操作。在某些应用中，用户并不了解应用接口编译信息，但也要求调用对象的操作，这时就要动态调用接口来调用用户的操作了。例如，图形用户接口应支持用户浏览接口公共库，以获得每个对象所支持的操作信息，用户可根据自己的需求从浏览对象中挑选出所需的对象操作，具体的对象操作的调用实际上是用动态调用接口来完成的。
接口公用库接口公用库持久地存储IDL的接口说明，借助于接口公用库，可以实现对象继承性层次结构的导航，并且提供了有关对象支持的所有操作的描述。接口公用库最常见的功能是为接口浏览器提供信息，帮助应用开发者找出潜在的可重用的软件部件。ORB可以利用接口公用库检查运行时的操作参数类型，但接口公用库的基本功能是提供类型信息，为动态调用接口发送请求提供信息支持。
不足
尽管有多家供应商提供CORBA产品，但是仍找不到能够单独为异种网络中的所有  CORBA系统环境提供实现的供应商。不同的CORBA实现之间会出现缺乏互操作性的现象，从而造成一些问题；而且，由于供应商常常会自行定义扩展，而CORBA又缺乏针对多线程环境的规范，对于像C或C++这样的语言，源码兼容性并未完全实现。
CORBA过于复杂，要熟悉CORBA，并进行相应的设计和编程，需要许多个月来掌握，而要达到专家水平，则需要好几年。
分布式
●在CORBA环境中，应用程序的集成是基于面向对象模型的；
●CORBA通过分布式对象计算，即分布式计算和面向对象计算的结合，以实现软件重用，这是开发下一代软件的基础；
●分布式对象计算的组成 
分布式计算和对象模型的结合：CORBA是这两者的完美结合，这两部分不仅带来了自身的优点，而且完善了对方的优点；
代理器的使用：CORBA使用代理器来处理系统中客户机与服务器之间的消息；
●什么是分布式计算 
分布式计算是两个或多个软件互相共享信息；
大部分分布式计算是基于客户/服务器模型的；
分布式计算可以拥有稀有资源共享、平衡机器负载等优点，使计算机资源的使用更为有效；
CORBA采用一定的手段增强分布式计算：
●CORBA采用增强分布式计算的手段 
允许客户机与器间灵活变化的关系；
加入一个称为代理的中介；
允许服务器有多个进程；
支持同步及异步两种通信形式；
●对象模型是对象计算中的概念，是考虑问题及其可能解决方案的概念性框架； 对象模型的基础是对象概念之上的，对象提供了把行为和属性结合成一单独实体的手段；
●使用对象模型具有以下优点：定义一个基于现实世界的系统模型
把系统逻辑地分成能完成特定任务的对象
当需求改变时扩展模块
● 在CORBA中分布式计算和对象模型的结合实现了相互促进，CORBA在分布式计算和对象模型环境中加入了下列内容：
●分布式计算方面的增强：对分布式计算环境，CORBA在环境中加入了特定对象的引用。在CORBA中，要完成某个操作，所需要做的仅仅是请求某个有能力完成该操作的对象去完成它，客户机不需要知道更多的信息；
对象模型方面的增强：对于对象模型，CORBA加入了代理器的概念。代理器使应用程序不需要知道对象在网络上哪个地方和对方是如何工作的就可以进行交互，只有代理器需要知道CORBA服务器和客户机在网络上的位置
中间件
●中间件是处于应用程序及应用程序所在系统的内部工作方式之间的软件；
●中间件把应用程序与系统所依附软件的较低层细节和复杂性隔离开来，使应用程序开发者只处理某种类型的单个API――其他细节则可以由中间件处理；
●CORBA可以被称为通信中间件，它可以看成是把应用程序和通信核心的细节分离的软件
技术
●引入了代理的概念；
●所实现的客户方程序与服务器方程序的完全分离；
●将分布计算同面向对象的概念相互结合；
●提供了软件总线的机制；
●分层的设计原则与实现方法
服务
在CORBA体系规范中定义了多种类型的服务（Service），如命名（Naming）、生存期（LifeCycle）、事件（Event）、事务（Transaction）、对象持久化（Persistent Objects）、查询（Query）、特征（Property）、时间（Time）等服务功能。　在CORBA规范中，没有明确说明不同厂商的中间件产品要实现所有的服务功能，并且允许厂商开发自己的服务类型。因此, 不同厂商的ORB产品对CORBA服务的支持能力不同，使我们在针对待开发系统的功能进行中间件产品选择时，有更多的选择余地。 
下面介绍与分布式应用程序设计和开发关系密切的CORBA服务内容： 
对象命名服务（Naming Service） 
在命名服务中，通过将服务对象赋予一个在当前网络空间中的惟一标识来确定服务对象的实现。在客户端，通过指定服务对象的名字，利用绑定（Bind）方式，实现对服务对象实现的查找和定位，进而可以调用服务对象实现中的方法。 
对象安全性服务（Security）
在分布式系统中，服务对象的安全性和客户端应用的安全性一直是一个比较敏感的问题，安全性要求影响着分布式应用计算的每个方面。对于分布在互联网中的分布式应用来讲，为了防止恶意用户或未经授权的方法调用对象的服务功能，CORBA提供了严格的安全策略，并制定了相应的对象安全服务。安全服务可以实现如下功能： 
● 服务请求对象的识别与认证; 
● 授权和访问控制; 
● 安全监听; 
● 通信安全的保证; 
● 安全信息的管理; 
● 行为确认。 
CORBA系统将对象请求的安全性管理的功能交由ORB负责，系统组件只需负责系统本身的安全管理，使得基于分布式应用在安全性控制方面的责任十分明确。 
并发控制服务（Concurrency Control）
CORBA规范中定义并发控制服务的目的在于实现多客户访问情况下的并发性控制和对共享资源的管理。 
并发控制服务由多个接口构成，能够支持访问方法的事务模型和非事务模型。由于两种模型的引入，使得非事务型客户在访问共享资源时，如果该资源被拥有事务模型的方法锁定（Lock），则该客户转入阻塞状态，直到事务型方法执行结束，将共享资源锁打开，非事务模型的客户才能够访问该共享资源。 
并发控制服务使多个对象能够利用资源锁定（Lock）的方式来对共享资源进行访问。在访问共享资源之前，客户对象必须从并发控制服务中获得锁定。在确认资源目前正在空闲时，获得资源的使用权。每个锁定是一个资源-客户对，说明哪个客户正在访问何种类型的资源。 
对象生命期服务（LifeCycle） 
CORBA中的生命期服务定义和描述了创建、删除、拷贝和移动对象的方法。通过生命期服务，客户端应用可以实现对远程对象的控制。 
利用命名（Naming）服务实现分布式应用　在上篇文章中介绍的利用JavaIDL开发分布式应用时曾采用命名服务的方式。对象命名服务是ORB查找服务对象实现的一种简单的方式。
1. 功能需求分是模拟电话用户注册及电话号码查询业务，开发基于命名服务的分布式应用程序，中间件产品采用VisiBroker 4.5.1 for Java。
根据系统功能的定义，两种业务均属于电信业务的经营范围，因此定义模块名TeleCom。电话号码注册为电信业务管理功能范围，需定义该功能接口Registry，该接口内包含用户注册方法register（）；电话号码查询为用户服务功能范围，需定义接口User，该接口内包含查询个人电话号码方法getNumber（）。经过上述分析后编写的IDL接口定义文件TeleCom.idl如下：
module TeleCom
{ interface User //接口User声明
{ //接口中getNumber方法的定义
long getNumber();
};
interface Registry //接口Registry声明
{ //接口中register方法定义，其中以string类型变量作为输入参数 ’方法返回User对象
User register(in string name);
};
};
上述接口定义文件经idl2java编译后，在当前接口文件目录中生成TeleCom子目录，该目录中包括UserPOA.java、RegistryPOA.java等文件。这些文件是客户端和服务对象实现功能的框架以及相关的支持文件。有兴趣的读者可以实际创建IDL文件，经IDL到Java语言的映射后，分析生成文件的格式。
2. 实现服务功能
（1）实现User接口的类UserImpl
根据系统分析确定的功能，定义接口User对应的实现类UserImpl的代码如下：
// UserImpl类继承定义在UserPOA.java中的UserPOA类
public class UserImpl extends TeleCom
.UserPOA
{ private int aNumber;
//
应用
在CIMS环境下，应用通常是分布的，应用之间需要交换信息和数据，例如CAD和CAM之间，CAD、CAM和MRP II之间，甚至是不同的CAD应用之间都会发生数据的交互。分布式应用的开发，尤其是面向对象的分布式应用的开发，对于系统开发者而言是极具挑战性的。CORBA、C OM/OLE Automation和JavaBeans是目前针对此类应用的主要分布对象计算模型和支持系统。一般来说，如果所开发的应用只面向Windows平台（Windows 3.x/95/NT），那么使用COM 是最佳的选择；如果所开发的应用完全是使用Java语言编制的，那么就应该采用JavaBeans 的方案。但是，如果所开发的应用需要集成异构的平台，那么无疑应该选择CORBA。通过C ORBA系统的支持，分布应用的开发者可以采用不同的语言、操作系统和硬件平台来开发面向对象的分布式应用。当然，首要的条件是存在支持该种平台、操作系统和语言的CORBA系统。? 利用CORBA系统进行分布对象应用的开发具有下面三个特点：①开发代价小、效率高。系统开发者只需要编写描述服务对象接口的IDL语言文件并安装描述文件，实现服务对象的功能即完成了全部的任务。其它的相关代码或者是由IDL编译器自动创建，或者是由ORB 类库提供，应用程序员并不需要编写例如网络通信、数据编码/解码、名址映射和安全管理的程序代码，从而可以把工作重点放到服务对象实现的过程中去。②通过CORBA系统的支持，一个服务对象可以透明地被分布在本地和网络上的客户所调用，扩大了服务对象的使用范围，为分布的客户所共享。③CORBA系统作为“软件总线”，可以为服务对象提供“ 即插即用”的功能，而且当对象实现改进或升级时，只要接口保持不变，客户代码无需作任何改动。? 
在CIMS的应用环境之下，CORBA系统的另一个十分重要的作用是集成已有的应用系统，这样的应用系统通常称为“遗留系统”（Legacy System）。“面向CIMS的并行工程集成框架关键技术”课题就是一个很好的例子。各个领域框架的应用系统，例如，机械领域的Pro Engi neer、电子领域的Mentor Graphics等等，需要通过CORBA系统集成到一起实现信息的交互和共享。集成的关键在于对遗留系统的封装和包裹（wrap），经过包裹，遗留系统就能够以OMG IDL的形式提供给用户，从而和新开发的面向对象的分布式应用同样处理。包裹的形式视不同的遗留系统而不同，对于能够提供用户调用接口的遗留系统，只要利用原有的调用来构造新的界面（必要时需要进行一定的扩充）即可；而对于比较封闭的遗留系统，集成的难度就大得多了，通常是利用文件作为中介来集成。不过，目前CAD、CAM和MRP II 的系统厂商在发展过程中也在逐步使自身的应用系统更加开放，向用户提供更灵活的控制手段，完全封闭的系统已经十分少见了，从而使集成工作也变得相对简单。