1 / 39

8 IIOP

IIOP. 8 IIOP. IIOP:Internet Inter-ORB Protocol 基于 Internet 的 ORB 间互操作协议 GIOP 的一个实例 GIOP:General Inter-ORB Protocol. IIOP. 内 容 GIOP 设计目标 GIOP 功能 CDR GIOP 消息格式 GIOP 传输假定 IIOP 消息传输. (1) GIOP 设计目标. IIOP. 最大可能范围的可用性 基于最广泛使用和灵活的通讯传输机制( TCP/IP ) 并定义在 ORB 之间传输请求所需的其它协议 简单性 可扩展性

briana
Download Presentation

8 IIOP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IIOP 8 IIOP IIOP:Internet Inter-ORB Protocol 基于Internet的ORB间互操作协议 GIOP的一个实例 GIOP:General Inter-ORB Protocol

  2. IIOP 内 容 GIOP设计目标 GIOP功能 CDR GIOP消息格式 GIOP传输假定 IIOP消息传输

  3. (1) GIOP设计目标 IIOP 最大可能范围的可用性 基于最广泛使用和灵活的通讯传输机制(TCP/IP) 并定义在ORB之间传输请求所需的其它协议 简单性 可扩展性 它们的大小接近或超过今天Internet的大小

  4. IIOP 低耗费 对现有的或新的ORB设计添加对GIOP/IIOP的支持 应该需要小量的工程投资 一般性 IIOP开始是为TCP/IP定义的 GIOP设计为在其它面向连接的传输协议上实现 体系结构 中立性 GIOP将ORB看成体系结构未知的不透明实体。

  5. (2) GIOP功能 IIOP 少量、简单消息 仅仅用七个消息格式 GIOP就可以支持ORB之间的全部CORBA功能 以及支持对象地点服务的 扩展功能 动态迁移 和 对通讯资源的有效管理 GIOP语义不要求格式或绑定协议 在大多数情况下 客户可以在打开连接后立即向对象发送请求 动态对象地点 许多ORB的体系结构 允许 在不同地点激活还没有过期的对象实现 并且 允许动态迁移对象 GIOP消息为对象地点和迁移提供支持 但在不需要或不适合ORB的体系结构时 不要求ORB实现这样的机制

  6. IIOP 完全的CORBA支持 GIOP消息直接支持CORBA要求的所有功能和行为 包括例外情况报告、传送操作环境和远程对象引用操作 (例如CORBA::Object::get_interface) GIOP支持传送特定于服务的环境 例如由事务服务定义的事务环境 该机制的设计目的是 支持要求在请求中隐式传送与服务相关环境的任何服务

  7. (3) 公共数据表示(CDR) IIOP CDR是传输语法 它将用OMG IDL定义的数据类型映射到 双向规范的低级表示 以便在代理之间进行传输 CDR有如下功能: 可变的字节次序 有公共字节次序的机器 可以在不进行字节交换的情况下进行消息交换 当与字节次序不同的机器进行通讯时 消息发起者决定消息字节次序 接收者负责交换字节以便匹配它的本地次序 每个GIOP消息(以及CDR封装)包含 指出正确字节次序的标记

  8. IIOP 对齐的主类型 在GIOP消息内基本OMG IDL数据类型 在它们的自然边界对齐 这样强制在内存中进行数据对齐的体系结构 可以有效地处理它们 完整的OMG IDL映射 CDR描述所有OMG IDL数据类型 (包括可传输的伪对象,例如TypeCode)的表示 如果需要,CDR为CORBA Core规范中 表示未定义或与实现有关的数据类型定义表示方法

  9. IIOP (4) GIOP 消息格式 module GIOP { enum MsgType { Request, Reply, CancelRequest, LocateRequest, LocateReply, CloseConnection, MessageError }; struct MessageHeader { char magic [4]; Version GIOP_version; boolean byte_order; octet message_type; unsigned long message_size; };

  10. (5) GIOP 传输假定 IIOP 传输是面向连接的 GIOP使用连接来定义请求ID的作用域和范围 传输是可靠的 传输保证字节按发送时的次序至多传输一次 并且有一些传输的肯定确认 传输对错误的连接丢失提供一些合理的通知 如果对等进程失败、对等主机崩溃或者网络连接丢失 则连接所有者应该接收到这种情况的一些通知 初始化连接的传输模型可以映射到TCP/IP的一般连接模型 代理将已知的网络地址发布在IOR中 客户在初始化连接时使用它

  11. IIOP 服务器不主动初始化连接 但它准备接收对连接的请求 例如,它侦听TCP/IP terms的连接 其它知道地址的代理(称为客户)可以 尝试通过对地址发送connect请求来初始化连接 侦听的服务器可以 接受请求、与客户建立新的唯一连接 或者它可以拒绝请求 一旦连接打开后,两端都可以关闭连接 候选的传输协议可能不直接支持这种特定的连接模型 只有传输模型可以映射到该视图才是必要的

  12. IIOP (6) IIOP OMG为GIOP指定的基线传输协议是TCP/IP 用于支持TCP/IP的库的特定API可以不同 GIOP消息传输到TCP/IP的映射称为 Internet Inter-ORB协议(IIOP)

  13. IIOP IIOP IOR • module IIOP { // IDL • struct Version { • char major; • char minor; • }; • struct ProfileBody { • Version iiop_version; • string host; • unsigned short port; • sequence <octet> object_key; • }; • };

  14. ORB 产品 9 ORB 产品 IONA 公司的Orbix Inprise公司的visibroker Digital公司的ObjectBroker IBM公司的ComponentBroker OOC公司的OminiBroker Frankfurt大学的MICO

  15. Orbix ORB 产品 • IONA公司的Orbix 是目前市场占有率最高的ORB产品 • 已经在金融、电信等多个领域得到广泛应用 • 目前在 UNIX • Windows 95/NT • MVX等 多种操作系统上运行 • 对IDL的映射基本上包含了CORBA规范的内容 • 例如C++、Java、Ada、Cobol等 • 所实现的COS包括Naming Service、Event Service、 • Transaction Service、Security Service、Event Service等 • 另外IONA公司还提供了ORB与DCOM的桥接产品:OrbixCOMet • 以及完全用Java 实现的ORB:OrbixWeb • 可以被WEB浏览器加载,增强WEB功能 • 网址:www.iona.com

  16. ORB 产品 • Visibroker • 1997年11月原Borland公司与Visigenic公司合并成立Inprise • 原属于Visigenic公司的ORB产品Visibroker • 成为Inprise的重要产品 • 并被集成到Delphi 4.0 中 • Visibroker 对IDL的映射包括:C++、Java • 所实现的COS包括Naming Service、Event Service等 • Visibroker已经被集成到Netscape 的Communicator中 • 在其它嵌入式系统中也有所应用 • 网址:www.inprise.com

  17. ORB 产品 • ObjectBroker • 这是中间件厂商BEA公司从Digital公司获得的ORB产品 • 已经被集成到BEA的其它环境之中 • 主要完成了向C++的映射 • 所实现的COS包括 Naming Service • Event Service • Transaction Service等 • M3是BEA的一个集ORB、COS等功能于一身的产品 • 网址:www.beasys.com

  18. ORB 产品 • ComponentBroker • IBM公司的ORB增强产品 • IBM最初曾提出兼容CORBA规范的DSOM模型 • 随着CORBA规范的逐步完善 • IBM将模型中与ORB直接相关的部分抽取出来 • 称之为ComponentBroker • ComponentBroker完成的IDL映射包括 C++ • Java • Smalltalk • COBOL等语言 • 所实现的COS包括Naming Service • Event Service • Transaction Service • Concurrent Services等 • 网址:www.software.ibm.com

  19. ORB 产品 • OB • 美国OOC公司开发ORB产品──OB(OmniBroker) • 最初是完全free的 • 其所有源代码皆可以自由下载 • 完成的IDL包括C++、Java • OB所实现的COS包括Naming Service、Event Service等 • 1998年开始,OOC以OB为核心实现了商业ORB产品:Orbacus • 所实现的COS增加了Trading Service、Security Service等 • 网址:www.ooc.com

  20. ORB 产品 • MICO • 德国Frankfurt大学开发的ORB产品──MICO(Mico Is COrba) • 所完成的IDL包括C++、Java • 所实现的COS包括Naming Service • Event Service • Security Service等 • 自2.0开始,MICO的版本号与CORBA的正式版本号同步 • 目前为2.31版 • MICO是为教育目的而开发的 • 并且采用了与Linux类似的发展途径 • 版权归GNU组织 • 因而具有较好的发展前景 • 网址:www.vsb.cs.uni-frankfurt.de/~mico/

  21. 开发过程 10 CORBA应用程序开发过程 Client developer Server developer IDL IDL compiler IDL compiler Client Server

  22. 开发过程 例子 - Grid Object client server Grid object remote calls width height get(row,col) set(row,col,value) 1 2 3 5 8 13 21 34 55 89 144 233

  23. 开发过程 Step-by-Step Define the IDL interface Compile the IDL interface Write a client Implement the interface Write a server mainline Register the server

  24. 开发过程 An IDL Interface interface Grid { readonly attribute short height; readonly attribute short width; void set(in short row, in short col, in long value); long get(in short row, in short col); };

  25. 开发过程 编译成C++: grid.idl grid.hh common declarations Client Server gridC.cc client stubs gridS.cc server skeleton ORB client library ORB server library

  26. 开发过程 IDL to C++ 映射  IDL operations (操作)映射为C++ 的成员函数 - parameter types 映射为 C++ types  IDL attributes (属性)映射为 C++的成员函数 - 一个用于获取值 - 另一个用于设置值 (如果不是只读属性)  IDL data types 映射为 C++ data types  一 个interface 映射为一个 C++ class.

  27. 开发过程 所产生的C++ code: class Grid : public virtual CORBA::Object { public: static Grid_ptr _bind(....); virtual CORBA::Short height(CORBA::Environment&); virtual CORBA::Short width(CORBA::Environment&); virtual void set(CORBA::Short row, CORBA::Short col, CORBA::Long value, CORBA::Environment &); virtual CORBA::Long get(CORBA::Short row, CORBA::Short col, CORBA::Environment &); };

  28. 开发过程 Writing a Client #include “grid.hh” #include <iostream.h> main () { Grid_var p; // Like a C++ pointer // Connect to a remote Grid object p = Grid::_bind(“myGrid:GridSrv”, GridHost); // Now use it like a regular C++ object cout << “height is “ << p->height() << endl; cout << “width is “ << p->width() << endl; p->set(2,4,123); // a remote call cout << “grid[2,4] is “ << p->get(2,4) << endl; };

  29. 1 2 3 5 8 13 21 34 55 89 144 233 开发过程 如何工作? client remote CORBA calls server C++ calls Grid proxy - a local C++ object Grid implementation

  30. 开发过程 Implementing the Interface  编写一个C++ class  继承ORB functionality  加入数据成员以及其它C++ 函数 - 根据具体的需求  重定义IDL 函数 - 提供具体的功能

  31. 开发过程 Grid implementation // Define a C++ implementation class Grid_i // Inherit distributed capability #include ”grid.hh” class Grid_i: public virtual GridBOAImpl { // Add application data and functions short m_height, m_width; long **m_array; public: Grid_i(short h, short w); // Constructor virtual ~Grid_i(); // Destructor

  32. 开发过程 Grid_i 还包括... // Re-define the IDL functions virtual CORBA::Short height(CORBA::Environment&); virtual CORBA::Short width(CORBA::Environment&); virtual void set(CORBA::Short row, CORBA::Short col, CORBA::Long value, CORBA::Environment&); virtual CORBA::Long get(CORBA::Short row, CORBA::Short col, CORBA::Environment&); };

  33. 开发过程 IDL 具体功能 virtual CORBA::Short Grid_i::width(CORBA::Environment &) { return m_width; } virtual CORBA::Short Grid_i::height(CORBA::Environment &) { return m_height;} virtual void Grid_i::set (CORBA::Short row, CORBA::Short col, CORBA::Long value, CORBA::Environment&); { m_array[row][col] = value; } CORBA::Long Grid_i::get (short row, short col, CORBA::Environment &) { return m_array[row][col]; }

  34. 开发过程 什么是 ‘server mainline’?  server 是 objects的 容 器 - ORB 能激活的可执行代码  ‘server mainline’ - 在server中创建初始对象 - 将控制权交给 ORB 以等待调用。  各个对象分别实现自己的功能 - ORB 将接受到的调用分发给具体的对象。

  35. 开发过程 编写server mainline #include “grid_i.h” #include <iostream.h> main() { // Create some initial objects // (only one in this case) Grid_i myGrid(100,100); try { //Give control to the ORB CORBA::Orbix.impl_is_ready(); } catch { .... } cout << “Server terminating” << endl; }

  36. 开发过程 Registering the server  Servers 可以由ORB 自动启动 - 响应客户请求  注册过程告诉ORB: - 哪个可执行代码是服务器 - 服务器的激活模式 - 安全等功能  存在多种激活模式 - 共享服务器,独享服务器等

  37. 开发过程 编程小结  从IDL起步 - client 与server 间的契约  编写Client 与server 代码 - ORB 支持的代码是从IDL产生的。 ORB 负责对象的分布,用户可以将精 力放在具体应用程序的功能上,而不 是实现技术上。

  38. CORBA小结 1、OMG与CORBA 2、CORBA对象模型 3、CORBA概述 4、IDL 5、ORB接口 6、IR 7、POA 8、IIOP 9、ORB产品 10、开发过程

  39. 其他相关问题 CCM:CORBA Component Model CORBA /COM interworking CORBA Common Object Service ...

More Related