CORBA规范和CORBA中间件
本篇博客我们介绍一种流行的集成中间件:基于OMG的CORBA中间件以及CORBA规范。
一、OMG:对象管理组织,该组织发布了最有影响的两套规范,一个是UML统一建模语言,另一个就是CORBA规范。OMG的技术规范主要用来支持分布式、异构环境的软件开发项目。这些规范覆盖了从分析、设计到编码、部署、运行和管理的整个软件的开发过程。
二、OMA:对象体系结构,描述了一个基于CORBA的应用系统的基本结构与构成系统的构件的特性。其参考模型为:
在上面的图中我们可以看出,ORB类似于一条系统总线,为其提供互操作的基本支持,同时,我们把系统中的很多对象都划分到不同的组中,根据这些对象的共性按照其基础性分别抽象并标准化为对象服务、通用设计和领域接口。
三、ORB:对象请求代理,在上面的参考模型中所有的系统对象都会附着在一条类似系统总线的东西上,这就是OMA参考模型的核心,负责完成查找请求的对象实现,让对象实现准备好接收请求、传递构成请求的数据等完成远程调用时底层通信任务所需的全部机制。
ORB的体系结构如下:
从上图中可以看到ORB同样采用了Stub/Skeleton结构开支持客户端与分布式对象的交互,这种体系结构不仅提供了动态调用的方式,还支持用不同的程序设计语言实现来实现对象。其中ORB内核是ORB最核心的东西,负责请求的通信设施,每一个ORB产品供应商都有一个自己特有的ORB内核。
四、CORBA的可互操作性:CORBA中间件最大的优势就是对可互操作性具有良好的支持。CORBA支持可互操作性主要包括如下几个层次:
1、不同平台与语言之间的可互操作性:CORBA对于这种互操作性的解决方法包括制定IDL标准及IDL到程序设计语言的映射。
2、不同厂商ORB产品之间的可互操作性:在CORBA2.0版本中引入了GIOP和IIOP,实现了不同供应商的ORB产品之间的可互操作性。
3、不同体型结构之间的可互操作性:一个CORBA对象可通过协议桥接操作一个DCOM对象。OMG通过引入了ESIOP来解决了这一问题。
OMG对象管理组织提供了一系列的标准和规范,本篇中的CORBA规范就是其中的一个,我们根据这种规范来开发中间件,这就是我们今天提到的CORBA中间件,基于CORBA的体系结构就是上面提到了OMA,这种体系结构的核心就是ORB,下篇博客我们介绍CORBA中间件的开发过程。
原文链接:https://blog.youkuaiyun.com/xh921/article/details/44066779
CORBA中间件的开发过程
一、开发前的准备:
虽然CORBA中间件对于异类环境下的可互操作性提高了很好的支持,但是对于不同平台之间的系统移植来说还是一个难题,所以在开发过程中我们还是要尽量避免使用与平台有关的操作系统等。
在CORBA中间件中,分布式对象提供的服务的调用方式分为三种:
1、同步方式:调用时调用者会阻塞直接被调用的服务完成并返回。
2、异步方式:调用者发起调用后不会阻塞,等待服务完成期间可以执行其他操作,调用者通过轮询方式或者服务者发送的事件检测调用完成,服务完成后调用者检查并处理结果,异步方式通常依靠异步消息来实现。
3、单向方式:调用者只是发出调用请求,并不关心调用什么时候完成。
不同的方式适用不同的应用场合,我们根据客户程序的请求选择使用的调用方式。
在分布式系统环境下,我们采用Stub/Skeleton机制,开发者不需要自己编写底层通信,可以把精力集中在业务逻辑方面的开发。
二、CORBA开发过程:
尽管使用不同的ORB产品的具体操作差异很大,但程序员开发一个CORBA应用程序通过会遵循一定的框架,如果所示:
开发步骤如下:
1、编写对象接口:利用OMG的IDL编写对象的规格说明。
2、编译IDL文件:IDL文件的编译是通过IDL编译器将IDL映射到具体程序设计语言,产生客户程序使用的桩代码以及编写对象实现所需的框架代码。
3、编写客户程序:客户程序的编写分为三个步骤:
无论是客户程序还是服务程序,都必须利用ORB进行通信之前初始化ORB,其作用一个是让ORB了解有新的成员加入,以便后继为其提供服务,另一个作用就是获取ORB伪对象的引用,以备将来调用ORB内核提供的操作。所谓伪对象专指在CORBA基础设施中的一个对象。
1、编写对象实现:CORBA的应用程序对象实现采用的方式是继承。
2、编写服务程序:CORBA中有几种典型的服务。服务程序利用可移植对象适配器(POA)激活伺服对象共客户程序使用。服务程序通常是一个循环执行的进程,不断监听客户程序请求并为之服务。
编写服务程序的基本步骤如下:
1)初始化对象请求代理(ORB)
2)用所需策略创建一个可移植对象适配器(POA)。在程序中我们为POA起一个名字,客户程序必须使用相同的POA名字。
3)创建一个提供服务的伺服对象、伺服对象是服务端的本地对象,当伺服对象通过对象适配器注册到ORB后,就成为了一个可供远程调用的CORBA对象。
4)激活新创建的伺服对象。
5)激活POA管理器。
6)等待客户程序发来请求。
如下所示是一个服务程序的编写:
本篇博客整体介绍一下如何开发一个CORBA中间件,客户端与服务端程序应该以怎样的步骤编写。下一篇博客我们讲解在开发过程中关于对象接口的程序编写。
原文链接:https://blog.youkuaiyun.com/xh921/article/details/44138303
CORBA程序的工作流程
工作流程的一些细节
1. Server启动,等待来自Client的请求
Server启动后,它首先生成一个POA(potable object adapter)。然后告诉POA他所能提供的服务,即Servant(Server按照IDL定义所实现的每个对象)。
Server从POA处得到每个Servant的引用OR(Object Reference,类似于句柄)。
Server把自己提供的服务公布出来,这里有两个办法:
将OR转换为一个字符串并输出;
将这个OR绑定到一个简单易理解的名字上,这通过Naming Service完成。
如图所示:
图1:Server启动并注册服务
2. Client调用你定义的对象方法
Client通过象Naming Service查询获得要访问的对象的引用OR(object reference),或通过一个IOR字符串获得;
Client通过这个引用调用对象的方法,因为OR中有足够的信息来定位一个对象;
这个调用被传递给ORB。
如图所示:
图2:一个Client发出请求
3. 调用的完成
Client端的调用请求通过ORB被传递给正确的Server端的ORB,定位是根据OR实现的;
这个ORB把调用请求交给真正的Server进行处理;
Server又根据OR定位产生这个OR的POA,并把请求传给它;
POA又把请求传给最后真正的Servant,完成调用并返回。
如图所示:
图2:Server对请求进行服务
原文链接:https://blog.youkuaiyun.com/c_spark/article/details/3091863