公用对象请求代理(调度)程序体系结构(CORBA)

公用对象请求代理(调度)程序体系结构(CORBA)

CORBA 是什么

  • 公用对象请求代理(调度)程序体系结构(Common Object Request Broker Architecture),缩写为 CORBA,是对象管理组织(Object Management Group)对应当今快速增长的软硬件的协同工作能力的要求而提出的方案。简而言之,CORBA 允许应用程序和其他的应用程序通讯,而不论他们在什么地方或者由谁来设计。CORBA 1.1 由对象管理组织在 1991 年发布。他定义了接口定义语言(IDL)和应用编程接口(API),从而通过实现对象请求代理(ORB)来激活客户/服务器的交互。CORBA 2.0 于 1994 年的 12 月发布。他定义了如何跨越不同的 ORB 提供者而进行通讯。

    ORB 是一个中间件,他在对象间建立客户-服务器的关系。通过 ORB,一个客户可以很简单地使用服务器对象的方法而不论服务器是在同一机器上还是通过一个网络访问。ORB 截获调用然后负责找到一个对象实现这个请求,传递参数和方法,最后返回结果。客户不用知道对象在哪里,是什么语言实现的,他的操作系统以及其他和对象接口无关的东西。

    在传统的客户/服务器程序中,开发者使用他们自己设计的或者公认的标准定义设备之间的协议。协议的定义依赖于实现的语言,网络的传输和其他许许多多因素。ORB 将这个过程简单化。使用 ORB,协议定义是通过应用接口,而该接口是接口定义语言(IDL)的一个实现,他和使用的编程语言无关的。并且 ORB 提供了很大的灵活性。他让程序员选择最适当的操作系统,运行环境和设计语言来建设系统中每个组件。更重要的是,他允许集成已经存在的组件。

    CORBA 是在面向对象标准化和互操作性道路上的一个信号。通过 CORBA,用户不必要知道软硬件的平台和他们处在企业网的什么地方就可以操作。

ORB 结构

  • 下面我来用些图形说明一下:

    通过 ORB 发送请求

    上面的图形说明的是客户端发送一个请求到对象的实现。客户端是希望对某对象执行操作的实体。对象的实现是一片代码和数据来实际实现对象。ORB 负责下面的必要的机制:对该请求找到对象的实现,让对象的实现准备好接受请求,和请求交换数据。客户端的接口完全独立于对象的位置,其实现的语言和其他不影响对象接口的东西。

    ORB 接口的结构

    上面的图形显示的是一个独立的对象请求代理(ORB)的结构。ORB 的接口是灰色的矩形。箭头说明 ORB 的调用关系。

    为了提出一个请求,客户端可以使用动态调用接口(Dynamic Invocation Interface)(和目标对象的接口独立)或者一个 OMG 的 IDL 占位程序(具体的占位程序依赖于目标对象的接口)。客户端也可以直接和 ORB 在某些地方交互。

    对象的实现通过 OMG 的 IDL 产生的骨架或者是一个动态骨架的调用来接受请求。对象的实现可能在处理请求或其他的时候调用 ORB。

    对象接口定义的定义可以有下面两种方式。接口可以通过接口定义语言静态的定义,这叫做 OMG 的 IDL。该语言按照可以进行的操作和该操作的参数定义对象类型。或者(也可以作为补充),接口可以加入到 Interface Repository service。该服务描述了该接口作为一个对象的组件,并允许运行时访问这些组件。在任何 ORB 实现中,IDL 和 Interface Repository 有相同的表达能力。

    客户端使用占位程序或者动态调用接口

    客户端通过访问对象的对象引用和了解对象的类型及要求执行的操作来发布一个请求。客户调用占位程序例程来请求或者动态构造请求。

    无论动态还是占位程序的接口都可以相同实现。接收方不可能知道请求是如何发布的。

    对象的实现接受请求

    ORB 向对象实现定位适当的代码,传递参数,传输控制。这一切都通过 IDL 骨架或者动态骨架。骨架对于不同的接口和对象适配器是不同的。在执行该请求的时候,对象的实现可能由 ORB 通过对象适配器来获得一定的服务。当请求完成,控制和输出值返回给客户。

    对象的实现可能会选择使用的对象适配器。该决定基于对象的实现要求的服务。

    接口和 Implementation Repositories

    上图说明的是接口和实现信息如何让客户和对象实现访问的。接口用 OMG 的 IDL 和/或 Interface Repository 定义。该定义用于产生客户占位程序和对象的实现的骨架。

    对象的实现的信息在安装时就提供好了,储存在 Implementation Repository 中以便请求发布的时候使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的CORBA程序设计思路,用于输出 "Hello World!" 信息: 1. 定义IDL文件:首先需要定义一个IDL文件,用于定义CORBA对象的接口和方法。在IDL文件中定义一个接口,包含一个返回字符串的方法,例如: ``` interface HelloWorld { string sayHello(); }; ``` 2. 编译IDL文件:使用IDL编译器将IDL文件编译成客户端和服务器端所需的代码。例如,使用omniIDL编译器生成Python代码: ``` omniidl -bpython helloworld.idl ``` 3. 实现服务器端:实现服务器端代码,用于处理客户端请求。在服务器端中实现IDL文件中定义的接口方法,返回 "Hello World!" 字符串。例如,在Python中实现服务器端代码: ``` import CORBA import HelloWorld_idl class HelloWorld_i (HelloWorld_idl.HelloWorld): def sayHello(self): return "Hello World!" orb = CORBA.ORB_init() poa = orb.resolve_initial_references("RootPOA") hello_world = HelloWorld_i() poa.activate_object(hello_world) objref = poa.servant_to_reference(hello_world) print orb.object_to_string(objref) poa._get_the_POAManager().activate() orb.run() ``` 4. 实现客户端:实现客户端代码,用于调用服务器端的方法并输出 "Hello World!" 信息。例如,在Python中实现客户端代码: ``` import CORBA import HelloWorld_idl orb = CORBA.ORB_init() obj = orb.string_to_object("IOR:...") hello_world = obj._narrow(HelloWorld_idl.HelloWorld) if hello_world is None: print "Object reference is not an HelloWorld" else: print hello_world.sayHello() orb.destroy() ``` 5. 启动服务器端:在命令行中执行服务器端代码,例如,在Python中执行: ``` python server.py ``` 6. 运行客户端:在命令行中执行客户端代码,例如,在Python中执行: ``` python client.py ``` 输出应该为 "Hello World!"。 上述步骤是一个简单的CORBA程序设计思路,用于输出 "Hello World!" 信息。实际程序中还需要处理更多的细节,例如ORB的初始化和销毁、异常处理、对象命名和查找等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值