高级软件工程05IIOP、现有产品、开发过程_第1页
高级软件工程05IIOP、现有产品、开发过程_第2页
高级软件工程05IIOP、现有产品、开发过程_第3页
高级软件工程05IIOP、现有产品、开发过程_第4页
高级软件工程05IIOP、现有产品、开发过程_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8IIOPIIOP:InternetInter-ORBProtocol基于Internet的ORB间互操作协议GIOP的一个实例GIOP:GeneralInter-ORBProtocolIIOP1 内容GIOP设计目标GIOP功能CDRGIOP消息格式GIOP传输假定IIOP消息传输IIOP2最大可能范围的可用性 基于最广泛使用和灵活的通讯传输机制(TCP/IP) 并定义在ORB之间传输请求所需的其它协议简单性可扩展性 它们的大小接近或超过今天Internet的大小(1)GIOP设计目标IIOP3低耗费 对现有的或新的ORB设计添加对GIOP/IIOP的支持 应该需要小量的工程投资一般性 IIOP开始是为TCP/IP定义的 GIOP设计为在其它面向连接的传输协议上实现体系结构中立性 GIOP将ORB看成体系结构未知的不透明实体。IIOP4少量、简单消息 仅仅用七个消息格式 GIOP就可以支持ORB之间的全部CORBA功能 以及支持对象地点服务的扩展功能 动态迁移和 对通讯资源的有效管理 GIOP语义不要求格式或绑定协议 在大多数情况下 客户可以在打开连接后立即向对象发送请求动态对象地点 许多ORB的体系结构 允许 在不同地点激活还没有过期的对象实现 并且 允许动态迁移对象 GIOP消息为对象地点和迁移提供支持 但在不需要或不适合ORB的体系结构时 不要求ORB实现这样的机制(2)GIOP功能IIOP5完全的CORBA支持 GIOP消息直接支持CORBA要求的所有功能和行为 包括例外情况报告、传送操作环境和远程对象引用操作 (例如CORBA::Object::get_interface)GIOP支持传送特定于服务的环境 例如由事务服务定义的事务环境 该机制的设计目的是 支持要求在请求中隐式传送与服务相关环境的任何服务IIOP6(3)公共数据表示(CDR)CDR是传输语法它将用OMGIDL定义的数据类型映射到 双向规范的低级表示 以便在代理之间进行传输CDR有如下功能:

可变的字节次序 有公共字节次序的机器 可以在不进行字节交换的情况下进行消息交换 当与字节次序不同的机器进行通讯时 消息发起者决定消息字节次序 接收者负责交换字节以便匹配它的本地次序 每个GIOP消息(以及CDR封装)包含 指出正确字节次序的标记IIOP7对齐的主类型 在GIOP消息内基本OMGIDL数据类型 在它们的自然边界对齐 这样强制在内存中进行数据对齐的体系结构 可以有效地处理它们完整的OMGIDL映射 CDR描述所有OMGIDL数据类型 (包括可传输的伪对象,例如TypeCode)的表示 如果需要,CDR为CORBACore规范中 表示未定义或与实现有关的数据类型定义表示方法IIOP8moduleGIOP{enumMsgType{Request,Reply,CancelRequest,LocateRequest,LocateReply,CloseConnection,MessageError};structMessageHeader{charmagic[4];VersionGIOP_version;booleanbyte_order;octetmessage_type;unsignedlongmessage_size;};(4)GIOP消息格式IIOP9(5)GIOP传输假定传输是面向连接的 GIOP使用连接来定义请求ID的作用域和范围传输是可靠的 传输保证字节按发送时的次序至多传输一次 并且有一些传输的肯定确认传输对错误的连接丢失提供一些合理的通知 如果对等进程失败、对等主机崩溃或者网络连接丢失 则连接所有者应该接收到这种情况的一些通知初始化连接的传输模型可以映射到TCP/IP的一般连接模型 代理将已知的网络地址发布在IOR中 客户在初始化连接时使用它IIOP10服务器不主动初始化连接 但它准备接收对连接的请求 例如,它侦听TCP/IPterms的连接 其它知道地址的代理(称为客户)可以 尝试通过对地址发送connect请求来初始化连接 侦听的服务器可以接受请求、与客户建立新的唯一连接 或者它可以拒绝请求一旦连接打开后,两端都可以关闭连接 候选的传输协议可能不直接支持这种特定的连接模型 只有传输模型可以映射到该视图才是必要的IIOP11(6)IIOPOMG为GIOP指定的基线传输协议是TCP/IP用于支持TCP/IP的库的特定API可以不同GIOP消息传输到TCP/IP的映射称为 InternetInter-ORB协议(IIOP)IIOP12moduleIIOP{ //IDLstructVersion{char major;char minor;};structPro{Version iiop_version;string host;unsignedshort port;sequence<octet> object_key;};};IIOPIORIIOP139ORB产品IONA公司的OrbixInprise公司的visibrokerDigital公司的ObjectBrokerIBM公司的ComponentBrokerOOC公司的OminiBrokerFrankfurt

大学的MICOORB产品14IONA公司的Orbix是目前市场占有率最高的ORB产品已经在金融、电信等多个领域得到广泛应用目前在 UNIX Windows95/NT MVX等 多种操作系统上运行对IDL的映射基本上包含了CORBA规范的内容例如C++、Java、Ada、Cobol等所实现的COS包括NamingService、EventService、 TransactionService、SecurityService、EventService等另外IONA公司还提供了ORB与DCOM的桥接产品:OrbixCOMet以及完全用Java实现的ORB:OrbixWeb 可以被WEB浏览器加载,增强WEB功能 网址:OrbixORB产品15Visibroker1997年11月原Borland公司与Visigenic公司合并成立Inprise原属于Visigenic公司的ORB产品Visibroker 成为Inprise的重要产品 并被集成到Delphi4.0中Visibroker对IDL的映射包括:C++、Java所实现的COS包括NamingService、EventService等Visibroker已经被集成到Netscape的Communicator中 在其它嵌入式系统中也有所应用网址:ORB产品16ObjectBroker这是中间件厂商BEA公司从Digital公司获得的ORB产品已经被集成到BEA的其它环境之中主要完成了向C++的映射所实现的COS包括 NamingService EventService TransactionService等M3是BEA的一个集ORB、COS等功能于一身的产品

网址:ORB产品17ComponentBrokerIBM公司的ORB增强产品IBM最初曾提出兼容CORBA规范的DSOM模型随着CORBA规范的逐步完善 IBM将模型中与ORB直接相关的部分抽取出来 称之为ComponentBrokerComponentBroker完成的IDL映射包括 C++ Java Smalltalk COBOL等语言所实现的COS包括NamingService EventService TransactionService ConcurrentServices等 网址:ORB产品18OB美国OOC公司开发ORB产品──OB(OmniBroker) 最初是完全free的其所有源代码皆可以自由下载完成的IDL包括C++、JavaOB所实现的COS包括NamingService、EventService等1998年开始,OOC以OB为核心实现了商业ORB产品:Orbacus所实现的COS增加了TradingService、SecurityService等 网址:ORB产品19MICO德国Frankfurt大学开发的ORB产品──MICO(MicoIsCOrba)所完成的IDL包括C++、Java所实现的COS包括NamingService EventService SecurityService等自2.0开始,MICO的版本号与CORBA的正式版本号同步 目前为2.31版MICO是为教育目的而开发的 并且采用了与Linux类似的发展途径版权归GNU组织 因而具有较好的发展前景网址:ORB产品20ClientdeveloperServerdeveloperServerIDLcompilerIDLcompilerClientIDL10CORBA应用程序开发过程开发过程21例子-

GridObjectGridobjectserverremotecalls123581321345589144233widthheightget(row,col)set(row,col,value)client开发过程22Step-by-Step

DefinetheIDLinterfaceCompiletheIDLinterfaceWriteaclientImplementtheinterfaceWriteaservermainlineRegistertheserver开发过程23AnIDLInterfaceinterfaceGrid{readonlyattributeshortheight;readonlyattributeshortwidth;voidset(inshortrow,inshortcol,inlongvalue);longget(inshortrow,inshortcol);};开发过程24ORBclientlibraryORBserverlibrary编译成

C++:gridS.ccserverskeletongridC.ccclientstubsClientServergrid.hhcommondeclarationsgrid.idl开发过程25IDLtoC++映射IDLoperations(操作)映射为

C++的成员函数-parametertypes映射为C++typesIDLattributes(属性)映射为C++的成员函数-一个用于获取值-另一个用于设置值(如果不是只读属性)IDLdatatypes映射为C++datatypes一个

interface映射为一个C++class.开发过程26所产生的

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&);};开发过程27WritingaClient#include“grid.hh”#include<iostream.h>main(){

Grid_varp; //LikeaC++pointer //ConnecttoaremoteGridobject

p=Grid::_bind(“myGrid:GridSrv”,GridHost); //NowuseitlikearegularC++objectcout<<“heightis“<<p->height()<<endl;cout<<“widthis“<<p->width()<<endl;

p->set(2,4,123);//aremotecallcout<<“grid[2,4]is“<<p->get(2,4)<<endl;};开发过程28如何工作?GridimplementationserverremoteCORBAcalls123581321345589144233clientC++callsGridproxy-alocalC++object开发过程29ImplementingtheInterface编写一个

C++class继承

ORBfunctionality加入数据成员以及其它

C++函数

-根据具体的需求

重定义

IDL函数-提供具体的功能开发过程30Gridimplementation//DefineaC++implementationclassGrid_i//Inheritdistributedcapability#include”grid.hh” classGrid_i:publicvirtualGridBOAImpl{//Addapplicationdataandfunctionsshortm_height,m_width;long**m_array;public:Grid_i(shorth,shortw);//Constructorvirtual~Grid_i();//Destructor开发过程31Grid_i还包括...//Re-definetheIDLfunctionsvirtualCORBA::Shortheight(CORBA::Environment&);virtualCORBA::Shortwidth(CORBA::Environment&);virtualvoidset(CORBA::Shortrow,CORBA::Shortcol,CORBA::Longvalue,

CORBA::Environment&);virtualCORBA::Longget(CORBA::Shortrow,CORBA::Shortcol,

CORBA::Environment&);};开发过程32

IDL具体功能

virtualCORBA::ShortGrid_i::width(CORBA::Environment&){returnm_width;}virtualCORBA::ShortGrid_i::height(CORBA::Environment&){returnm_height;}virtualvoidGrid_i::set(CORBA::Shortrow,CORBA::Shortcol,CORBA::Longvalue,CORBA::Environment&);{m_array[row][col]=value;}CORBA::LongGrid_i::get(shortrow,shortcol,CORBA::Environment&){returnm_array[row][col];}开发过程33什么是‘servermainline’?

server是

objects的容器-ORB能激活的可执行代码‘servermainline’-在server中创建初始对象-将控制权交给

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论