`
softstone
  • 浏览: 476530 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多

OMG IDL语法规则及ORB

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

苏洋

9. 接口的继承

  与C++和Java中类的继承类似,OMG IDL中关于接口的继承分为两种类型:

  ● 单继承: 一个接口继承另一个接口的属性及方法特征;

  ● 多继承: 一个接口继承两个或两个以上接口的属性及方法特征。

  用继承关系编写接口定义时,如果在接口定义之前该接口的父接口没有定义,则需要在定义接口之前先声明父接口,即所谓的前置声明(Forward Declaration)。下面举例说明接口继承。

  在前一讲中,曾定义了人力资源管理接口JobManager,由于实际需要,还要根据该接口定义资源服务接口,而该接口应继承管理接口的特征。因此,以管理接口为父对象定义新的接口JobServer:

  interface JobServer : JobManager

  { void MailToManager( in long ManagerId, out string status); }

  JobServer : JobManager表明接口JobServer继承JobManager的对象特征。

  上例中仅说明了单继承类型,多继承需要用逗号将被继承的类分开,如:

  interface JobCenter : JobServer,JobManager { }

10. 异常处理(Exception)

  与C++和Java的语法规则类似,CORBA同样提供了异常处理机制,称为“引发异常”(Raising an Exception)。CORBA本身定义了一部分由调用请求或ORB传递引发的异常,称为系统异常(有关CORBA系统异常请查阅相关资料)。因此,在OMG IDL中定义的异常通常称为“自定义异常”。

  OMG IDL中用Exception关键字定义用户异常,在定义的方法后面加上raise关键字来声明,如果符合异常的触发条件,则引发定义类型的异常。如下例所示:

  enum ErrorStatus {Fatal,Important,Slight,NoMeaning};

  Exception ReasonOfMail

  { ErrorStatus status; }

  interface JobManager

  { string QueryJobStatus( in long Number, out string property)

  raises (ReasonOfMail);}

11.定义方法传递的上下文

  在前面几讲中,曾提到过上下文,上下文在接口定义的方法中是如何传递的呢?上下文对象中包括一个称为特征名-特征值的名值对,在方法中使用context关键字定义。ORB在每次客户机发出调用请求时,在对象实现中匹配特征值。如下例所示:

  string QueryJobStatus( in long Number, out string property)

  raise(ReasonOfMail) context(“who”);

  按照以上定义,执行QueryJobStatus方法时,ORB在服务对象实现端的上下文序列中匹配特征名为“who”的特征值。

ORB互操作体系结构

  ORB的互操作性(InterOperability)体现在分布于网络中的多个对象借助Internet ORB间协议(IIOP)和通用ORB间协议(GIOP),达到不同厂商ORB之间操作的一致性。

  具体来说,ORB互操作是指对于两个独立开发的ORB,一个ORB中的客户端应用可以调用在另外一个ORB中利用OMG IDL定义的服务对象实现的方法。实现互操作的基本条件有:

  ● 多厂商ORB之间不需要预先知道对方的实现细节;

  ● 每个ORB必须实现其规范中定义的全部内容;

  ● 保留每个ORB独立服务的实现。

  ORB间互操作能力的实现,极大地丰富了分布式程序设计思想的内涵,使得构建基于整个互联网的分布式应用成为可能。

  通过在CORBA中引入内联桥接(In-line Bridging)和请求级桥接(Request-level Bridging), 使ORB在不需要了解对方ORB实现细节的情况下,就可以实现ORB间的互操作。

  上面两种ORB间的桥接方式只是说明了ORB间相互发送请求时的虚拟连接方式。为了实现ORB间的通信,在CORBA规范中定义了两种用于在不同厂商ORB间进行通信的协议,即通用ORB间互操作协议(General Inter_ORB Protocol ,GIOP)和环境相关的ORB间互操作协议(Environment-Specific Inter-ORB Protocol,ESIOP)。这两种协议屏蔽了操作系统类型、实现语言以及具体厂商等因素。只要ORB支持该协议,就能够在不同的ORB之间实现通信。

1.通用ORB间互操作协议(GIOP)

  CORBA中定义的一种面向连接的互操作协议为通用ORB间互操作协议(General Inter_ORB Protocol ,GIOP)。在CORBA规范中,该协议只是一个框架,给用户在具体实现过程中留下了充足的空间。GIOP规范包括如下内容:

  ● 公共数据表示(Common Data Representation,CDR)的定义:该数据定义用于将OMG IDL数据类型映射为ORB之间的桥接(Bridge)可以理解的二进制数据类型。

  ● GIOP消息:在CORBA规范中定义了用于实现ORB之间通信的七种类型的消息,它们分别是: 请求(Request)、响应(Reply)、请求取消(RequestCancel)、请求定位(LocateRequest)、响应定位(LocateReply)、连接关闭(CloseConnection)和消息错误(MessageError)。

  通过定义这些消息,使得除了能够在不同的ORB间支持CORBA规范中定义的全部功能外,还能够支持对象实现的定位、对象的动态激活和通信资源的动态管理。

  ● GIOP消息传递: GIOP消息传递用于规范在网络中传递应用数据和GIOP消息的方式。GIOP消息传递具有如下特点:面向连接,保持字节流的传输顺序,确保可靠传输,传输内容的长度无关,达到TCP/IP协议规范的初始化性能等。

GIOP互操作协议规范了在网络中实现ORB互操作的方式。GIOP协议还有相对于具体的网络协议类型的镜像,最典型的就是GIOP在TCP/IP协议中的实现: 基于Internet的ORB间协议(Internet Inter-ORB Protocol,IIOP)。IIOP规范继承了GIOP规范的全部内容,并且增加了如下要素:

  ● 打开TCP/IP连接的方式;

  ● 利用连接实现GIOP消息传递的方式。

  可以这样理解IIOP协议:在遵守GIOP中关于公共数据表示和消息格式定义的前提下,以TCP/IP协议为实现蓝本,具体化GIOP消息的传递方式。

2.环境相关的ORB互操作协议

  CORBA规范中定义的另外一种ORB间的互操作协议是环境相关的ORB间互操作协议(Environment-Specific Inter-ORB Protocol,ESIOP),该协议规范了在具体的应用环境中实现ORB间互操作的方式。由于该协议与分布式应用环境有着密切的关系,使得该协议在不同的实现和应用方式方面具有较大的变化,因此称基于ESIOP的特定环境协议为环境相关的ORB互操作协议族。

  ESIOP协议中最具代表性的、同时也是在CORBA规范中明确说明了的是分布式计算环境中公共ORB互操作协议(Distributed Computing Environment Common Inter-ORB Protocol,DCE-CIOP)。在该协议中,数据的表示方式与前面讲述GIOP协议完全相同,但是在消息的定义以及传递方式中,采用的是远程方法调用(Remote Procedure Call,RPC)中的Locate和Invoke方法实现消息以参数形式传递,进而实现ORB间的互操作。

分享到:
评论

相关推荐

    论文研究-IDL3.0编译器符合性测试研究和设计.pdf

    编译器需要正确解释IDL语法和语义,并生成对应的客户端存根(stub)和服务器骨架(skeleton)。符合性测试确保编译器能够准确地解析IDL定义,并生成符合标准的存根和骨架代码。 3. IDL3.0编译器符合性测试方法的...

    高级软件IDL与ORB接口ppt课件.ppt

    - 词法和语法:IDL的词法遵循C++,而语法是C++标准的一个子集,但更加严格,例如强制函数返回类型、参数名称的必要性等。 3. IDL的组件: - 模块(Modules):模块提供了命名空间的隔离,防止命名冲突。可以嵌套...

    高级软件工程03(IDL与ORB接口).ppt

    - 严格规则:IDL的词法和语法类似于C++,但更严格,如强制要求函数返回类型、参数名称等,以确保接口定义的精确性。 3. IDL结构: - 模块(Modules):提供命名空间管理,避免标识冲突,可以嵌套创建层次化的名字...

    IDL接口定义语言的C++11语言映射规范(v1.0)

    C++ 11映射试图避免限制ORB开发人员的实现自由。对于每个OMG IDL构造,C++ 11映射解释使用C++ 11的构造的语法和语义。如果客户机或服务器程序使用C++ 11映射子句中所描述的结构,则符合此映射(是C++ 11)。

    corba中文版参考书

    - **IDL语法**:IDL定义了一组关键字和规则,用于描述接口和服务。 - **IDL示例**:例如,可以使用IDL定义一个简单的接口,该接口包含一个名为`getHelloWorld`的方法,返回一个字符串。 ##### 2.4 OMG IDL与...

    IDL Feature Support by Operating Syste

    1. IDL简介:IDL是 OMG(Object Management Group)制定的一种标准,它允许程序员定义在不同编程语言和操作系统之间进行通信的数据类型和接口。IDL提供了平台无关的接口描述,确保了跨平台的互操作性。 2. 操作系统...

    CORBA.rar_corba

    4. **IDL(Interface Definition Language)**:类似于C++或Java的语法,用于定义CORBA对象的接口。编译后的IDL文件可以生成客户端和服务端的存根(Stub)和骨架(Skeleton)代码。 ### Java与CORBA 1. **JDK中的...

    【推荐】CORBA示例代码

    IDL语法类似于C++或Java,用于定义对象的方法、参数和返回值类型。 3. **GIOP(General Inter-ORB Protocol)/IIOP(Internet Inter-ORB Protocol)**:GIOP是ORB之间的通用协议,而IIOP是GIOP在TCP/IP网络上的具体...

    CORBA 程序设计指南(入门)-龙湘明

    - **OMG标准**:ORB实现遵循开放组OMG的标准,如CORBA 3.0及更高版本。 - **开源实现**:如Globus Toolkit,OpenORB,TAO等,提供了丰富的功能和良好的性能。 - **商业实现**:如IBM的VisualAge for Java,Oracle的...

    CORBA教程打包

    CORBA,全称为Common Object Request Broker Architecture(公共...综上,"CORBA教程打包"可能涵盖了这些内容,包括理论讲解、IDL语法、ORB配置、实例分析等,对于想要深入了解和使用CORBA的人来说,是一份宝贵的资源。

    ORBStudio776

    7. **兼容性**:ORBStudio通常会支持多种主流的ORB实现,如OMG的OpenORB、IBM的ORB、Oracle的ORB等,确保了跨平台和跨ORB的开发能力。 使用ORBStudio,开发者能够更高效地构建和管理基于CORBA的分布式应用,减少...

    corba

    C++ Mapping是CORBA到C++的映射规则,用于将IDL定义的接口转换为C++代码。这包括了基本数据类型、枚举类型、复合类型以及接口类型的映射。例如,IDL中的基本数据类型如`unsigned long`会映射为C++中的`CORBA::ULong`...

    Corba中文学习指南

    为了将IDL定义的接口转换为具体的编程语言代码,OMG制定了IDL到C和C++的映射规则。这一过程被称为映射,目的是确保IDL描述的服务接口能够在C和C++中正确实现。通过映射,开发者可以根据IDL文件自动生成存根(Stub)...

    Eclipse使用Corba的插件文件

    2. ORB配置:插件允许用户配置ORB实例,如选择ORB供应商(如OMG的Tango ORB或IBM's ORB)、设置ORB参数等。 3. 代码生成:从IDL文件,插件可以自动生成客户端和服务端的 stubs 和 skeletons,这些是实现ORB通信的...

    方兴未艾的CORBA

    1. **客户端调用**:客户端通过ORB调用远程对象的方法,使用的是本地对象调用的语法,对象参数包含了远程对象的信息。 2. **ORB处理**:ORB识别出对象参数表示远程对象,通过IIOP协议将请求封装并发送到网络,找到...

    介绍corba使用和java的集成

    Java IDL 允许开发者使用熟悉的 Java 语法来定义接口,并将这些接口转换为 CORBA 接口,从而使得 Java 应用能够与其他支持 CORBA 的应用进行通信。 2. **CORBA ORB for Java**:CORBA ORB 是实现 CORBA 规范的关键...

Global site tag (gtag.js) - Google Analytics