CORBA的基本内容(上)

(本文转载自软件工程专家网www.21cmm.com)

苏洋

  回顾上一讲中在介绍CORBA体系结构时,曾强调CORBA在提高组件重用性、增强分布计算功能方面具有的突出特点:
  ● 引入中间件作为事务代理;
  ● 客户程序与服务器程序完全分离;
  ● 与面向对象的建模概念相结合;
  ● 引入接口定义语言描述服务对象功能。

  CORBA规范只是描述了CORBA系统中各个构件的基本情况以及构件在系统中承担的任务,并没有从功能实现的细节上规定必须如何建立一个基于CORBA规范的软件系统产品。这样,对于基于CORBA的软件产品开发而言,程序设计人员可以自由地选择实现方式,但前提是遵循规范中各个构件的实现原则。在本讲和下一讲中,将详细介绍CORBA中各个构件的主要内容。

对象请求代理(ORB)

1. 对象请求代理(ORB,Object Request Broker)的作用

  在传统的基于客户机/服务器模式的应用程序开发过程中,项目开发人员遵循公开的标准或自由设计模块间的协议,这样的协议依赖于网络类型、实现语言、应用方式等。引入ORB后,客户只要遵循服务对象的对外接口标准向服务对象提出业务请求,由ORB在分布式对象间建立客户-服务对象关系。总结起来,ORB的作用包括:
  ● 接受客户发出的服务请求,完成请求在服务对象端的映射;
  ● 自动设定路由寻找服务对象;
  ● 提交客户参数;
  ● 携带服务对象计算结果返回客户端。

图1 客户服务请求示意图

  由图1可以看出,客户(Client)向服务对象的实现(Object Implementation)发出事务请求,其中客户是欲对服务对象发出方法请求的实体,服务对象应包括该方法的数据资源以及实现代码。对象请求代理的作用就在于定位服务对象,接收客户发出的服务请求并将服务对象的执行结果返回给客户。请求发出后,客户对象采用轮询等方式以获取服务对象计算的结果。

2. ORB的结构及类型

  ORB通过一系列接口和接口定义中说明的要实现操作的类型,确定提供的服务和实现客户与服务对象通信的方式。通过IDL接口定义、接口库或适配器(Adapter)的协调,ORB可以向客户机和具备服务功能的对象实现(Object Implementation)提供服务。作为CORBA体系结构的核心,ORB可以实现如下三种类型的接口:
  ● 对于所有的ORB实现具有相同的操作;
  ● 针对特定类型对象的操作;
  ● 与对象实现类型有关的操作。

  基于ORB实现的不同类型接口,一个客户端请求可以同时访问多个由不同ORB实现通信管理的对象引用。在实际应用中,只要遵循公共的ORB体系结构,程序设计可以选择ORB的多种实现方式,其中包括:

  (1)客户和实现驻留(Client-Implementation Resident)ORB:采用驻留在客户和服务对象实现程序的方式实现ORB。在这种实现方式下,客户端可以通过桩(Stub)程序,以位置透明的方式向具体的实现对象提出服务请求,实现客户与服务对象的通信。

  (2)基于服务(Server-based)ORB:客户对象和实现对象均可以与一个或多个服务对象进行通信,服务对象的功能是将请求从客户端发送到对象实现。在这种方式中,ORB的作用是完成客户对象与实现对象的通信,为对象之间的交互提供服务。

  (3)基于系统(System-based)ORB:在这种实现方式中,ORB被操作系统认为是系统所提供的一项基本服务。由于操作系统了解调用方与服务对象的位置,因而可以充分地实现ORB功能的优化。

  (4)基于库(Library-based)ORB:如果认为对象实现可以共享,则可以将实现功能放入实现库(Implementation Repository)中,从而创建基于库的ORB。

3. ORB中的主要方法

  客户端和服务对象端均可以自由选择使用ORB对象中定义的方法来实现操作。下面举例说明ORB对象中的重要方法:
(1)ORB ORB_init(inout arg_list argv,in ORBid orb_identifier)
作用:ORB初始化方法。
(2)String object_to_string(in Object obj)
作用: 将对对象的引用转换成客户可以用字符串方式存储的对象信息。
(3)Object string_to_object(in String str)
作用:上述方法的逆过程。将以字符串方式存储的对象转换成对对象类型的引用。
(4)Object resolve_initial_references(in ObjectID identifier)
作用:获取初始对象引用。
(5)Policy get_policy(in PolicyType policy_type)
作用:返回指定类型的服务策略对象。

  作为公共对象请求代理体系结构中的核心内容,ORB提供了相当丰富的方法。读者可以查阅相关资料详细了解ORB中的方法。

4. 服务请求的实现方式

  关于对象请求的实现方式,CORBA规范中定义客户程序可以用动态调用接口(DII,Dynamic Invocation Interface)方式或通过OMG IDL文件经编译后在客户端生成的桩(Stub)方式提出服务请求。这两种实现方式的区别在于通过OMG IDL桩(Stub)文件方式实现的调用请求中,客户能够访问的服务对象方法取决于服务对象所支持的接口;而动态调用接口调用方式则与服务对象的接口无关。尽管实现调用请求的方式有所区别,但客户发出的请求服务调用的语义是相同的,服务对象不去分析服务请求提出的方式。

  ORB通过IDL客户桩(Stub)方式或动态调用接口(DII)方式定位服务对象的实现代码、传递服务对象应用参数以及完成对请求传送方式的控制。服务对象的实现(Object Implementation)通过对象适配器(Object Adapter)提供对客户请求的服务。客户对服务器端方法的调用方式见图2。

图2 客户调用服务请求的实现方式

  从以上对服务请求调用方式的分析可以看出: 服务对象接口的定义在整个CORBA系统服务功能的实现中起着相当重要的作用。那么如何实现服务对象的功能接口呢?CORBA规范中定义了两种接口实现方式:第一种形式是利用OMG IDL接口定义语言对接口进行描述。IDL语言有详细的语法规则(讲座将在第五讲对该语言的语法规则进行详细讲解)。这样,经过对所实现功能的系统分析,利用IDL,依据服务对象可能实现的服务以及服务中需要的参数,对接口进行定义。另外一种方式是将接口放入接口仓库(Interface Repository)中,在运行期间对接口库中的接口进行访问。

CORBA的基本内容(上)相关推荐

  1. 志良电子关于LED控制卡显示内容上下行有虚点的问题研究(一)

    问题描述: 在调试一块LED控制板时发现在显示的内容上下行,根据显示内容应该是熄灭的LED灯却亮着,亮度比正常显示的LED灯低很多. 调试过程: LED显示相关函数如下,LED屏为单色屏,1/16扫描 ...

  2. Flume04:【案例】使用Flume采集文件内容上传至HDFS

    案例:采集文件内容上传至HDFS 接下来我们来看一个工作中的典型案例: 采集文件内容上传至HDFS 需求:采集目录中已有的文件内容,存储到HDFS 分析:source是要基于目录的,channel建议 ...

  3. 用Java 实现文章内容上一篇下一篇功能

    ITDragon博客 用Java 实现文章内容上一篇下一篇功能,逻辑和分页不一样.效果和本页面底部一样.采用的是Spring data jpa SQL语句实现该功能 SQL 语句查询的是该数据的上一条 ...

  4. 思科认证与华为认证在考题与内容上到底多大差别?

    长久以来,在网络培训与认证领域,思科培训可谓一支独秀.   但对希望通过培训提高网络技能的学员来说,思科培训与华为培训在教材和内容方面的差别有多大呢?       华为的教材给人的感觉是逻辑性强,有条 ...

  5. Flume采集文件内容上传至HDFS

    需求:采集目录中已有的文件内容,存储到HDFS 分析:source是要基于目录的,channel建议使用file,可以保证不丢数据,sink使用hdfs 下面要做的就是配置Agent了,可以把exam ...

  6. 2021抖音视频内容上热门的三个小窍门

    抖音官方账号已经公布了上热门的几个规则,注意不需要养号.不要再跟人说养号,权重之类的. 1 视频要求原创, 如果非原创,必须保证视频质量好,没有水印.这是抖音官方说的,说到这里大家能懂这个意思吧? 2 ...

  7. 2018严峻的流量下半年,如何在裂变内容上引爆你的流量?

    近几年无论是做市场,做销售,做产品的,大家的话题离不开2个词:钱和流量. 说得这个有必要了解下2018下半年最大的流量平台微信和抖音的流量环境 1.微信裂变 公众号流量:今年重磅炸弹是微信裂变公众账号 ...

  8. github 删除仓库内容 上传代码到github仓库

    删除github仓库的内容: 1.登录进入github 个人主页 2.点击想要删除的仓库,进入详情页 3.点击菜单栏setting, 4.点击option ->下滑找到danger Zone-& ...

  9. .Net(C#)用正则表达式清除HTML标签(包括script和style),保留纯本文(UEdit中编写的内容上传到数据库)...

    去官网下载,本Demo用的MVC模式 下载地址:http://ueditor.baidu.com/website/download.html 加入文件夹中的结构: 引入了函数公式的图标: @{View ...

最新文章

  1. LaneATT调试笔记
  2. OpenCV深度神经网络实现人体姿态评估
  3. getline及读文件总结
  4. day20-----------IO流(传智视频)
  5. 懂说话,让冲突、尴尬时刻都bye-bye
  6. caffe学习笔记17-find-tuning微调学习
  7. Redis底层实现--字符串
  8. 面试必备!卖萌屋算法工程师思维导图—统计机器学习篇
  9. 师从施一公,4年8篇CNS,西湖大学博士后获世界最具潜力女科学家奖
  10. eclipse不格式化注释
  11. PyCharm主题更换
  12. 红蓝宝书1000题 新日本语能力考试N1文字.词汇.文法 练习+详解
  13. 06 OPENMV中的AT指令集操作
  14. rm mysql 数据日志文件恢复
  15. zemax中如何和matlab中通信,如何在ZEMAX与MATLAB之间通信.doc
  16. 大恒相机连续采集并保存图片
  17. SAP WEB IDE local 安装
  18. 淘宝居然还有卖代码的
  19. 单臂路由配置-ZTE中兴交换机
  20. Login.aspx

热门文章

  1. activated钩子函数
  2. MySQL-语句块-循环语句
  3. 敏涵控股集团董事长刘敏:唱响敏涵之歌 打造世界敏涵
  4. linux中永久别名 mac,mac 设置 ll 等alias 并永久生效
  5. SQL CheatSheet Joins
  6. ins是什么与Instagram有什么区别
  7. 4 年 Java 程序员十面阿里终拿下 offer,评级 P6+ 年薪 30-40w 无股票
  8. DDD不够好用,你需要学习如何进行弹性软件系统设计
  9. pycharm配置可视化界面流程简介
  10. Python图像识别-Opencv07 异或运算,图像加密