`
czxzz
  • 浏览: 34288 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
阅读更多
ORBObject Request Broker

CORBA体系结构的核心就是ORB。可以这样简单理解:ORB就是使得客户应用程序能调用远端对象方法的一种机制。

 

 

具体来说就是:当客户程序要调用远程对象上的方法时,首先要得到这个远程对象的引用,之后就可以像调用本地方法一样调用远程对象的方法。当发出一个调用时,实际上ORB会截取这个调用(通过客户Stub完成,“提高”篇中会详细解释),因为客户和服务器可能在不同的网络、不同的操作系统上甚至用不同的语言实现,ORB还要负责将调用的名字、参数等编码成标准的方式(Marshaling)通过网络传输到服务器方(实际上在同一台机器上也如此),并通过将参数Unmarshaling的过程,传到正确的对象上(这整个过程叫重定向,Redirecting),服务器对象完成处理后,ORB通过同样的Marshaling/Unmarshaling方式将结果返回给客户。

因此,ORB是一种功能,它具备以下能力:

1.对象定位(根据对象引用定位对象的实现)

2.对象定位后,确信Server能接受请求

3.将客户方请求通过Marshaling/Unmarshing方式重定向到服务器对象上

4.如果需要,将结果以同样的方式返回。

IDL(Interface Definition Language)

IDL,接口定义语言,是CORBA体系中的另一个重要概念。如果说ORB使CORBA做到平台无关,那么IDL, 则使CORBA做到语言无关。

正像其名字中显示的那样,IDL仅仅定义接口,而不定义实现,类似于C中的头文件。实际上它不是真正的编程语言。要用它编写应用,需要将它映射它相应的程序设计语言上去,如映射到C++JAVA上去。映射后的代码叫Client Stub Code Server Skeleton Code

IDL的好处是使高层设计人员不必考虑实现细节而只需关心功能描述。IDL可以说是描述性语言。设计IDL的过程也是设计对象模型的过程。它是编写CORBA应用的第一步,在整个软件设计过程中至关重要。

IDL的语法很像C++,当然也像Java。很难想像一个程序设计人员是不懂CJava的,所以,几乎所有的程序设计人员都能迅速理解IDL。而这正是IDL设计者所希望的。

下面是一个IDL定义的简单例子:

// grid.idl
// IDL definition of a 2-D grid:
module simpleDemo{
interface grid {
 
     readonly attribute short height; // height of the grid 
     readonly attribute short width; // width of the grid
 
     // IDL operations
     // set the element [row,col] of the grid, to value: 
     void set(in short row, in short col, in long value);
 
     // return element [row,col] of the grid: 
     long get(in short row, in short col); 
};
};

This IDL defines an interface for a grid CORBA object that maintains a grid or 2-D array of data values, which a client can access or modify remotely.

Module类似于Java中包(Package)的概念,实际上module simpleDemo映射到JAVA正是package simpleDemo。而Interface类似于C++中的类(classs)声明,或是Java中的Interface 定义。

附录中列出了IDL的全部语法。

 Stub Code Skeleton Code

Stub code Skeleton Code 是由IDL Complier自动生成的,前者放在客户方,后者放在服务器方。不同厂商的IDL complier生成的Stub Skeleton会略有区别,但影响不大。

如上面的grid.idl, 编译后,Stub Code包含以下文件:

grid.java

_gridStub.java

gridHelper.java

gridHolder.java

gridOperations.java

Skeleton Code则包含以下文件:

    gridOperations.java

    gridPOA.java

    gridPOATie.java

(在Stud Code 也包含gridOperations.java, 是因为在使用Call back机制时会用到。)

 

 

GIOP IIOP

我们知道,客户和服务器是通过ORB交互的,那么,客户方的ORB和服务器方的ORB又是通过什么方式通信呢?通过GIOP(General Inter-ORB Protocol)。也就是说,GIOP是一种通信协议,它规定了两个实体:客户和服务器ORBs间的通信机制。

 

    ORBs通信机制

 

GIOP在设计时遵循以下目标:

Ø  Widest possible availability

Ø  Simplicity

Ø  Scalability

Ø  Low cost

Ø  Generality

Ø  Architectural neutrality

也是说,GIOP设计的尽可能简单,开销最小,同时又具有最广泛的适应性和可扩展性,以适应不同的网络。

GIOP定义了以下几个方面:

1The Common Data Representation (CDR) definition.

通用数据表示定义。它实际上是IDL数据类型在网上传输时的编码方案。它对所有IDL数据类型的映射都作了规定。

2GIOP Message Formats.

它规定了ClientServer两个角色之间要传输的消息格式。主要包括RequestReply两种消息。

一个Request 消息有以下几部分组成:

  A GIOP message header

A Request Header

The Request Body

相应的,一个Reply消息则包括

A GIOP message header

A Reply Header

The Reply Body

 

GIOP1.1规定 GIOP message header格式如下:

// GIOP 1.1

struct MessageHeader_1_1 {

char magic [4];

Version GIOP_version;

octet flags; // GIOP 1.1 change

octet message_type;

unsigned long message_size;

};

 Request Header格式如下:

// GIOP 1.1

struct RequestHeader_1_1 {

IOP::ServiceContextList service_context;

unsigned long request_id;

boolean response_expected;

octet reserved[3]; // Added in GIOP 1.1

sequence <octet> object_key;

string operation;

Principal requesting_principal;

};

 Request Body则按CDR规定的方式编码,它主要对方法调用的参数进行编码, 如方法:

   double example (in short m, inout Principal p);

 可表示成:

struct example_body {

short m; // leftmost in or inout parameter

Principal p; // ... to the rightmost

};

3GIOP Transport Assumptions:

主要规定在任何面向连接的网络传输层上的一些操作规则。如:Asymmetrical connection usageRequest multiplexingOverlapping requestsConnection management等。

 

另外,因为CORBA是基于对象的,GIOP还需定义一套Object Location的机制。

 

GIOP因为是一种通用协议,所以不能直接使用。在不同的网络上需要有不同的实现。目前使用最广的便是Internet上的GIOP,称为IIOPInternet Inter-ORB Protocol)。IIOP基于TCP/IP协议。IIOP消息格式定义如下:

module IIOP { // IDL extended for version 1.1

struct Version {

octet major;

octet minor;

};

struct ProfileBody_1_0 { // renamed from ProfileBody

Version iiop_version;

string host;

unsigned short port;

sequence <octet> object_key;

};

struct ProfileBody_1_1 {

Version iiop_version;

string host;

unsigned short port;

sequence <octet> object_key;

sequence <IOP::TaggedComponent> components;

};

};

 

Dynamic Invocation Interface (DII) Dynamic Skeleton Interface (DSI)

动态调用接口(DII)和动态骨架接口(DSI)是用来支持客户在不知道服务器对象的接口的情况下也能调用服务器对象。

 

 

 

 

Object Adapter (对象适配器)

对象适配器是ORB的一部分。它主要完成对象引用的生成、维护,对象定位等功能。对象适配器有各种各样。Basic Object Adapter(BOA, 基本对象适配器)实现了对象适配器的一些核心功能。而Portable Object AdapterPOA)

 

还有其他一些专有领域的对象适配器如Database Object Adapter等。

分享到:
评论

相关推荐

    CORBA企业解决方案

    第三,组件这个概念变得越来越重要。组件是一个对象,里面只含有业务级的代码,而没有和安全性、事务、命名等方面相关的代码。因此,一个组件可以给定不同的安全属性而不用改变对象的代码,在某种意义上,它可以...

    分布式系统:概念与设计(原书第3版) 原书名: Distributed Systems: Concepts and Design (4th Edition)

    第4版删除了Mach实例研究一章,但它和其他几个从本书第2版和第3版删除的实例均可从本书的网站上获得。 致谢.. 感谢下列老师参与了我们的调查:Kay Robbins、Kohei Honda、Stefan Leue和Ian Wakeman。 感谢下列...

    java面试宝典

    244、客服端调用EJB对象的几个基本步骤 56 245、 如何给weblogic指定大小的内存? 56 246、如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 57 247、如何启动时不需输入用户名与密码? 57 248、在...

    千方百计笔试题大全

    244、客服端调用EJB对象的几个基本步骤 56 245、 如何给weblogic指定大小的内存? 56 246、如何设定的weblogic的热启动模式(开发模式)与产品发布模式? 57 247、如何启动时不需输入用户名与密码? 57 248、在weblogic...

    java基础题 很全面

    11. 客服端调用EJB对象的几个基本步骤 21 12. EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? 21 13. 如何给weblogic指定大小的内存? 22 14. 如何设定的weblogic的热启动模式(开发模式)与...

    SOA的实现方法及其比较研究 (2008年)

    面向服务的体系结构( SOA)是一种网络环境下分布式应用系统的概念模型,在这个模型中,松耦合的系统组件在网络上被描述、发布和调用。实现这样体系结构的网络应用系统有多种方法。文 章对 CORBA,DCOM,RMI以及 Web ...

    Java面试宝典2010版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 17.介绍一下Hibernate的二级缓存 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message 属性, ...

    最新Java面试宝典pdf版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    论文研究-分布式构件技术综述.pdf

    讨论了构件的概念与特性,分析和评价了几个主流的分布式构件技术及其它们的应用现状,并探讨了与之相关的正在发展的一些技术。最后对新的软件开发方法:基于构件的开发的思想和发展前景进行了简单的分析。

    二十三种设计模式【PDF版】

    下去,浓淡几个叶子,待毛笔的水墨要干枯时,画一下树干,这样,一个活生写意的树就画出来. 我上面这些描述其实都是一种模式,创建模式的人是大师,但是拘泥于模式的人永远是工匠. 再回到传统建筑中,中国的传统建筑是过分...

    Java面试笔试资料大全

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    JAVA面试宝典2010

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典-经典

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    java面试题大全(2012版)

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典2012版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message...

    java面试宝典2012

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 135 17.介绍一下Hibernate的二级缓存 135 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    Java面试宝典2012新版

    16. hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决; 123 17.介绍一下Hibernate的二级缓存 123 18、Spring 的依赖注入是什么意思? 给一个 Bean 的 message ...

    超级有影响力霸气的Java面试题大全文档

    创建了几个String Object? 两个 31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?  SessionBean: Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个...

Global site tag (gtag.js) - Google Analytics