高级软件工程05(IIOP、现有产品、开发过程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

18IIOPIIOP:InternetInter-ORBProtocol基于Internet的ORB间互操作协议GIOP的一个实例GIOP:GeneralInter-ORBProtocolIIOP2内容GIOP设计目标GIOP功能CDRGIOP消息格式GIOP传输假定IIOP消息传输IIOP3最大可能范围的可用性基于最广泛使用和灵活的通讯传输机制(TCP/IP)并定义在ORB之间传输请求所需的其它协议简单性可扩展性它们的大小接近或超过今天Internet的大小(1)GIOP设计目标IIOP4低耗费对现有的或新的ORB设计添加对GIOP/IIOP的支持应该需要小量的工程投资一般性IIOP开始是为TCP/IP定义的GIOP设计为在其它面向连接的传输协议上实现体系结构中立性GIOP将ORB看成体系结构未知的不透明实体。IIOP5少量、简单消息仅仅用七个消息格式GIOP就可以支持ORB之间的全部CORBA功能以及支持对象地点服务的扩展功能动态迁移和对通讯资源的有效管理GIOP语义不要求格式或绑定协议在大多数情况下客户可以在打开连接后立即向对象发送请求动态对象地点许多ORB的体系结构允许在不同地点激活还没有过期的对象实现并且允许动态迁移对象GIOP消息为对象地点和迁移提供支持但在不需要或不适合ORB的体系结构时不要求ORB实现这样的机制(2)GIOP功能IIOP6完全的CORBA支持GIOP消息直接支持CORBA要求的所有功能和行为包括例外情况报告、传送操作环境和远程对象引用操作(例如CORBA::Object::get_interface)GIOP支持传送特定于服务的环境例如由事务服务定义的事务环境该机制的设计目的是支持要求在请求中隐式传送与服务相关环境的任何服务IIOP7(3)公共数据表示(CDR)CDR是传输语法它将用OMGIDL定义的数据类型映射到双向规范的低级表示以便在代理之间进行传输CDR有如下功能:可变的字节次序有公共字节次序的机器可以在不进行字节交换的情况下进行消息交换当与字节次序不同的机器进行通讯时消息发起者决定消息字节次序接收者负责交换字节以便匹配它的本地次序每个GIOP消息(以及CDR封装)包含指出正确字节次序的标记IIOP8对齐的主类型在GIOP消息内基本OMGIDL数据类型在它们的自然边界对齐这样强制在内存中进行数据对齐的体系结构可以有效地处理它们完整的OMGIDL映射CDR描述所有OMGIDL数据类型(包括可传输的伪对象,例如TypeCode)的表示如果需要,CDR为CORBACore规范中表示未定义或与实现有关的数据类型定义表示方法IIOP9moduleGIOP{enumMsgType{Request,Reply,CancelRequest,LocateRequest,LocateReply,CloseConnection,MessageError};structMessageHeader{charmagic[4];VersionGIOP_version;booleanbyte_order;octetmessage_type;unsignedlongmessage_size;};(4)GIOP消息格式IIOP10(5)GIOP传输假定传输是面向连接的GIOP使用连接来定义请求ID的作用域和范围传输是可靠的传输保证字节按发送时的次序至多传输一次并且有一些传输的肯定确认传输对错误的连接丢失提供一些合理的通知如果对等进程失败、对等主机崩溃或者网络连接丢失则连接所有者应该接收到这种情况的一些通知初始化连接的传输模型可以映射到TCP/IP的一般连接模型代理将已知的网络地址发布在IOR中客户在初始化连接时使用它IIOP11服务器不主动初始化连接但它准备接收对连接的请求例如,它侦听TCP/IPterms的连接其它知道地址的代理(称为客户)可以尝试通过对地址发送connect请求来初始化连接侦听的服务器可以接受请求、与客户建立新的唯一连接或者它可以拒绝请求一旦连接打开后,两端都可以关闭连接候选的传输协议可能不直接支持这种特定的连接模型只有传输模型可以映射到该视图才是必要的IIOP12(6)IIOPOMG为GIOP指定的基线传输协议是TCP/IP用于支持TCP/IP的库的特定API可以不同GIOP消息传输到TCP/IP的映射称为InternetInter-ORB协议(IIOP)IIOP13moduleIIOP{//IDLstructVersion{charmajor;charminor;};structProfileBody{Versioniiop_version;stringhost;unsignedshortport;sequenceoctetobject_key;};};IIOPIORIIOP149ORB产品IONA公司的OrbixInprise公司的visibrokerDigital公司的ObjectBrokerIBM公司的ComponentBrokerOOC公司的OminiBrokerFrankfurt大学的MICOORB产品15IONA公司的Orbix是目前市场占有率最高的ORB产品已经在金融、电信等多个领域得到广泛应用目前在UNIXWindows95/NTMVX等多种操作系统上运行对IDL的映射基本上包含了CORBA规范的内容例如C++、Java、Ada、Cobol等所实现的COS包括NamingService、EventService、TransactionService、SecurityService、EventService等另外IONA公司还提供了ORB与DCOM的桥接产品:OrbixCOMet以及完全用Java实现的ORB:OrbixWeb可以被WEB浏览器加载,增强WEB功能网址:的映射包括:C++、Java所实现的COS包括NamingService、EventService等Visibroker已经被集成到Netscape的Communicator中在其它嵌入式系统中也有所应用网址:的映射所实现的COS包括NamingServiceEventServiceTransactionService等M3是BEA的一个集ORB、COS等功能于一身的产品网址:等语言所实现的COS包括NamingServiceEventServiceTransactionServiceConcurrentServices等网址:产品──OB(OmniBroker)最初是完全free的其所有源代码皆可以自由下载完成的IDL包括C++、JavaOB所实现的COS包括NamingService、EventService等1998年开始,OOC以OB为核心实现了商业ORB产品:Orbacus所实现的COS增加了TradingService、SecurityService等网址:产品──MICO(MicoIsCOrba)所完成的IDL包括C++、Java所实现的COS包括NamingServiceEventServiceSecurityService等自2.0开始,MICO的版本号与CORBA的正式版本号同步目前为2.31版MICO是为教育目的而开发的并且采用了与Linux类似的发展途径版权归GNU组织因而具有较好的发展前景网址:~mico/ORB产品21ClientdeveloperServerdeveloperServerIDLcompilerIDLcompilerClientIDL10CORBA应用程序开发过程开发过程22例子-GridObjectGridobjectserverremotecalls123581321345589144233widthheightget(row,col)set(row,col,value)client开发过程23Step-by-StepDefinetheIDLinterfaceCompiletheIDLinterfaceWriteaclientImplementtheinterfaceWriteaservermainlineRegistertheserver开发过程24AnIDLInterfaceinterfaceGrid{readonlyattributeshortheight;readonlyattributeshortwidth;voidset(inshortrow,inshortcol,inlongvalue);longget(inshortrow,inshortcol);};开发过程25ORBclientlibraryORBserverlibrary编译成C++:gridS.ccserverskeletongridC.ccclientstubsClientServergrid.hhcommondeclarationsgrid.idl开发过程26IDLtoC++映射IDLoperations(操作)映射为C++的成员函数-parametertypes映射为C++typesIDLattributes(属性)映射为C++的成员函数-一个用于获取值-另一个用于设置值(如果不是只读属性)IDLdatatypes映射为C++datatypes一个interface映射为一个C++class.开发过程27所产生的C++code:classGrid:publicvirtualCORBA::Object{public:staticGrid_ptr_bind(....);virtualCORBA::Shortheight(CORBA::Environment&);virtualCORBA::Shortwidth(CORBA::Environment&);virtualvoidset(CORBA::Shortrow,CORBA::Shortcol,CORBA::Longvalue,CORBA::Environment&);virtualCORBA::Longget(CORBA::Shortrow,CORBA::Shortcol,CORBA::Environment&);};开发过程28WritingaClient#include“grid.hh”#includeiostream.hmain(){Grid_varp;//LikeaC++pointer//ConnecttoaremoteGridobjectp=Grid::_bind(“myGrid:GridSrv”,GridHost);//NowuseitlikearegularC++objectcout“heightis“p-height()endl;cout“widthis“p-width()endl;p-set(2,4,123);//aremotecallcout“

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功