中间件_7.ppt

上传人:s****8 文档编号:66861205 上传时间:2022-12-21 格式:PPT 页数:123 大小:466.50KB
返回 下载 相关 举报
中间件_7.ppt_第1页
第1页 / 共123页
中间件_7.ppt_第2页
第2页 / 共123页
点击查看更多>>
资源描述

《中间件_7.ppt》由会员分享,可在线阅读,更多相关《中间件_7.ppt(123页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、CORBA1 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)是由OMG(对象管理组织,Object Management Group)提出的应用软件体系结构和对象技术规范。其核心是一套标准的语言、接口和协议,以支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用。2内容对象管理体系结构(OMA)CORBA组成结构IDL语法开发实例3对象管理小组对象管理组(ObjectManagementGroup,OMG)是一个非赢利性的协会组织,组建于1989年,由一些的计算机公司发起,目前成员已超过800个,遍及计算机

2、制造商、软件公司、通信公司和最终用户。4对象管理小组为使该组织所采纳的技术具有开放性,OMG所采用的方法是,针对某一领域发出RFP(RequestForProposal),然后以各方提交的建议为基础,经过一系列的讨论和协商,产生最终的规范。CORBA规范主要基于以下几个公司所提交的建议:DEC、HyperDesk、HP、SunSoft、NCR和ObjectDesign。5对象管理小组OMG的宗旨是,推动对象技术(OT)的理论和实践在软件行业中的使用,特别是在开发分布式计算机系统方面。其目的是,为面向对象的应用提供一个公共框架,如果符合这一框架,就可以在多种硬件平台和操作系统上建立一个异质的分布

3、式应用环境。6对象管理小组由OMG制定的最关键的规范对象管理结构(ObjectManagementArchitecture,OMA)和它的核心(也就是CORBA规范),提供了一个完整的体系结构。这个结构以足够的灵活性、丰富的形式适用了各类分布式系统。7对象管理体系结构OMA描述了面向对象技术在分布式处理中的运用。它包括两部分:对象模型(ObjectModel)和参考模型(ReferenceModel)。对象模型定义如何描述分布式异质环境中的对象;参考模型描述对象之间的交互。8OMA对象模型在OMA对象模型中,对象是一个被封装的实体,它具有一个不可改变的标识,并能给客户用户提供一个或多个服务。i

4、nterfaceprinterattributemodel;voidprint(instringbuffer);9OMA对象模型对象的访问方式是通过向对象发出请求来完成的。请求信息包括目标对象、所请求的操作、0个或多个实际参数和可选的请求上下文(描述环境信息)。每个对象的实现和位置,对客户都是透明的。10OMA参考模型在OMA参考模型中,OMG定义了一条为对象所公用的通信总线,即ORB(ObjectRequestBroker)。同时,OMG又定义了对象进出这一总线的界面。这包括:对象服务(ObjectServices)、公共设施(commonfacilities)、应用界面(Applicati

5、onInterface)和域界面(DomainInterface)。11OMA参考模型对象请求代理(ORB)应用界面域界面公共设施对象服务12ORBORB(ObjectRequestBroker)是对象总线。通过ORB,一个client可以透明的调用同一台机器上或网络上的一个server对象的方法。ORB解释该调用并负责查找一个实现该请求的对象,找到后,把参数传给该对象,调用它的方法,最后返回结果。客户方不需要了解服务对象的位置、通信方式、实现、激活或存储机制。13对象服务对象服务提供基本服务,与具体的应用领域无关的界面。目前,CORBA支持的这类服务有:名字服务、持久性服务、生命周期服务、事

6、务处理服务、对象事件服务和安全服务等。命名服务(Naming Service):允许通过名字查找对象。持久性服务(Persistence Service):提供在各种存储服务器(包括对象数据库、关系数据库和简单文件)上永久性存储对象的统一界面。14对象服务生存周期服务(Life Cycle Service):定义了在对象总线上创建、拷贝、移动和删除对象的操作。事务处理服务(Transaction Service):提供两阶段提交协议,用于确保ORB上的一些分布式对象协同地完成事务处理。事件服务(Event Service):允许对象动态注册或撤消指定的事件。安全服务(Security Serv

7、ice):提供一个分布式对象安全的完整框架。15公共设施与对象服务不同的是,公共设施面向最终用户的应用,它是各种应用可以共享的一系列服务集合。复合文档的管理工具,数据库存取工具、文件打印工具、电子邮件服务都等属于公共设施。(横向)16域界面针对着某一特殊的应用领域。例如,PDME(工厂数据管理环境)是OMG发出的最早的这类RFP之一,它是为解决制造领域中的问题而发出的。另外,OMG也已经发出了通信、医药和财务等领域中的这类RFP。(纵向)17应用界面应用界面针对某一具体应用而产生。18公共对象请求代理体系结构(CORBA)CORBA规范详细说明了OMA中ORB组件的特性和界面。最新的CORBA

8、规范主要包含以下内容:ORB核心(ORBCORE)OMG界面定义语言界面仓库和实现仓库语言映射存根和框架动态调用对象适配器(ObjectAdapter)ORB之间的互操作19CORBA20ORB核心功能:把客户发出的请求传递给目标对象,并把目标对象的执行结果返回给发出请求的客户。其重要特征是:提供了客户和目标对象之间的交互透明性。这主要包括:21ORB核心对象位置:客户不必知道目标对象的物理位置。它可能与客户一起驻留在同一个进程中或同一机器的不同进程中,也有可能驻留在网络上的远程机器中。22ORB核心对象实现:客户不必知道有关对象实现的具体细节。例如,设计对象所用的编程语言、对象所在节点的操作

9、系统和硬件平台等。23ORB核心对象的执行状态:当客户向目标对象发送请求时,它不必知道当时目标对象是否处于活动状态(即是否处于正在运行的进程中)。此时,如果目标对象不是活动的,在把请求传给它之际,ORB会透明地将它激活。24ORB核心对象通信机制:客户不必知道ORB所用的下层通信机制,如,TCP/IP、管道、共享内存、本地方法调用等。数据表示:客户不必知道本地主机和远程主机对数据表示方式,如高位字节在前还是在后等,是否有所不同。25IDL语言和语言映射在客户向目标对象发送请求之前,它必须知道目标对象所能支持的服务。对象是通过界面定义来说明它所能提供的服务。CORBA对象的界面是利用OMGIDL

10、来定义。26IDL语言和语言映射OMGIDL的语法与C+类似(包括C+的预处理语句),它另外增加了一些支持分布式处理的关键字(in、out和inout等)。OMGIDL不是编程语言,而是一个纯说明性语言,并且与具体的宿主语言(主机上的编程语言)无关。这就很自然地将界面与对象实现分离,使得可以用不同的语言来实现对象,而它们之间却又可以进行互操作。27IDL语言和语言映射一个界面说明包含两部分:界面头和界面体。界面头由界面名和一组可选的继承界面组成。界面体由常量、变量、操作和异常声明组成。操作由操作名、参数和异常来定义。28IDL语言和语言映射moduleCCStypedefshortTempTy

11、pe;interfaceThermometerreadonlyattributeTempTypetemperature;interfaceThermostat:Thermometervoidset_temp(inTempTypet);29IDL语言和语言映射不能用OMGIDL直接去实现分布式应用,需要把IDL的特性映射为具体语言的实现,这就是语言映射的任务。到目前为止,OMG已为C、C+、SmallTalk、Ada95、Cobol和Java制定了语言映射标准。30存根(stub)和框架(skeleton)除了把IDL的特性映射为具体语言外,OMGIDL编译器还根据界面定义来产生客户方的存根和服

12、务方的框架。存根的作用是代表客户创建并发出请求;框架的作用则是把请求交给CORBA对象实现。31存根(stub)和框架(skeleton)具体地说,存根使得客户能够不关心ORB的存在,而只要把请求交给存根,存根则负责对请求参数进行封装和发送,以及对返回结果进行接收和解封装。框架在请求的接收端提供与存根类似的服务,它将请求参数解封装,识别客户所请求的服务,调用对象实现,并把执行结果封装,然后返回给客户方。32存根和框架由于存根和框架都是从用户的界面定义编译而来,所以它们都与具体的界面有关,并且,在请求真实发生之前,存根和框架早以分别被直接连接到客户程序和对象实现中去。为此,通过存根和框架的调用被

13、通称为静态调用。33动态调用CORBA还支持两种用于动态调用的界面:动态调用界面(DII)支持客户方的动态请求调用。动态框架界面(DSI)支持服务方的动态对象调用。34动态调用利用DII,客户方应用可以在运行时动态地向任何对象发出请求,而不象静态调用那样,必须在编译时就知道特定的目标对象的界面信息。使用DII时,用户必须手工构造请求信息,包括相应的操作及有关参数等。类似地,DSI允许用户在没有静态框架信息的条件下来获得对象实现。35接口仓库和实现仓库ORB提供了两个用于存储有关对象信息的服务:界面仓库和实现仓库。36接口仓库界面仓库存储各个界面信息的模块,如用IDL编写的界面定义、常量、类型等

14、。它本身作为一个对象而存在。应用程序可以象调用其它CORBA对象所提供的操作一样,来调用界面仓库的操作。界面仓库允许应用程序在运行时访问OMGIDL类型系统。例如,当应用程序在运行时遇到一个不知道其类型的对象时,可以通过界面仓库的操作来遍历系统中的所有界面信息。由此可见,界面仓库的引入很好地支持了CORBA的动态调用。37接口仓库IDL:CCS:1.0IDL:CCS/Temptype:1.0IDL:CCS/Thermometer:1.0IDL:CCS/Thermometer/temperature:1.0IDL:CCS/Thermostat:1.0IDL:CCS/Thermostat/set_

15、temp:1.038实现仓库实现仓库所完成的功能与界面仓库类似,只不过它存储的是对象实现的信息。当需要激活某一对象类型的实例时,ORB需要访问这些信息。39对象适配器对象适配器是联系对象实现与ORB本身的纽带。另外,它的引入还大大减轻了ORB的任务,从而简化了ORB的设计。具体地说,对象适配器主要完成以下工作:对象登记利用对象适配器所提供的操作,可以将CORBA的实现仓库中具有编程语言形式的实体(servant,伺服器)登记为CORBA的对象实现。40对象适配器对象引用(OR,ObjectReference)的产生对象适配器为CORBA对象生成对象引用。客户应用程序通过对象引用来访问对象实例。

16、服务器进程的激活如果客户发出请求时,目标对象所在的服务器还未运行,则对象适配器自动激活该服务器。41对象适配器对象的激活。对象的撤消在预先规定的时间片内,如果一直没有发向某个目标对象的请求,则对象适配器撤消这一对象,以节省系统资源。对象向上调用对象适配器把请求分配给已登记了的对象。42对象适配器Root POAPOA1POA2servantservantservantPOA3servant43对象适配器缺省伺服器ObjectIdServantActiveObjectMap44对象适配器对象引用ObjectIdServant45对象引用格式RepositoryIDhost:portObjectK

17、eyIDL:CCS/Thermostat:1.0bobo:1799POA路径:ObjectId46对象引用到伺服器对象所在的服务器对象实现所处的POA相应的伺服器host:portPOA路径ObjectId47对象引用的获取对象引用是客户机获取目标对象唯一途径。客户机获取引用的方式:通过调用公共操作list_initial_services、resolve_initial_services来获取标准服务应用,如“RootPOA”、“NameService”、“TradingService”等。以某些已知的服务程序公告一个引用,如名字服务。通过将对象引用转换成一个字符串和将它写入一个文件,来公布

18、一个对象引用。返回一个引用作为一个操作的结果(就像返回一个值,或返回一个inout或out参数)。通过其他可以外传的方式来传送一个对象引用,比如,用电子邮件发送或者在Web网页上公布。48对象适配器之请求处理流程ORB coreRoot POAPOA1POA2servant1框架框架操作操作1操作操作n49ORB之间的互操作在发布CORBA2.0之前,ORB产品的最大缺点是:不同厂商所提供的ORB产品之间并不能互操作。为了达到异构ORB系统之间互操作的目的,CORBA2.0规范中定义了标准通信协议GIOP(Generalinter-ORBProtocol)。50ORB之间的互操作GIOP协议由

19、3个部分组成:公共数据表示(CommonDataRepresentation,简称CDR);GIOP消息格式,它定义了用于ORB间对象请求、对象定位和信道管理的7种消息的格式和语义。51ORB之间的互操作传输层假设,GIOP协议可运行于多种传输层协议之上,只要传输层协议是面向连接的、可靠的,所传递的数据可以为任意长度的字节流,提供错序通知功能,连接的发起方式可以映射到TCP/IP这样的一般连接模型。52ORB之间的互操作GIOP协议只是一种抽象协议,独立于任何特定的网络协议,在实现时必须映射到具体的传输层协议或者特定的传输机制之上。GIOP协议到TCP/IP协议的映射又称为IIOP(Inter

20、netInter-ORBProtocol)协议。53CORBA的发展CORBA1.0CORBA对象模型、IDL、用于动态请求管理和动态调用的API集合和界面仓库。CORBA1.1 引入对象适配器概念,并提供了BOA。CORBA2.0增加了跨平台ORB的互操作规范。54CORBA的发展CORBA2.2引入POA,解决了不同CORBA平台上应用的可移植性。(多POA,多策略:如持久对象、对象透明激活、单伺服多OID等)CORBA2.3增加了用于嵌入式设备的miniCORBA规范。CORBA2.4增加了服务于实时应用的rtCORBA规范。55CORBA产品比较著名的有IONA的Orbix、Exper

21、tSoft的PowerCORBA以及Inprise的Visibroker。同时,还有一些优秀的成果可供研究,如Mico,Orbacus,TAO等。56IDL语法types(类型),constans(常量)和interfaces(界面)1、基本类型long,unsignedlong,short,char,boolean,string,.2、数组(Arrays)typedeflongCellValues1020;3、sequence(序列,模板)typedefsequenceUpToTenStrSeq;typedefsequenceStrSeq;57IDL语法4、结构类型结构类型structStr

22、uctNamecharcharMember;unsignedshortAnotherMember;enumColorred,green,blue;unionUswitch(char)caseL:longlong_mem;casec:caseC:charchar_mem;default:stringstring_mem;58IDL语法5、常量常量 constunsignedlongLengthOfNameString=15;6、界面界面(interface)interfaceExample1readonlyattributestringName;attributelongValue;longAd

23、dToValue(inlongSummand,outlongResult);7、模块、模块(Modules)59IDL语法moduleCORBAtypedeflongLong;interfaceObject.;interfaceORB:Object.;8、继承60IDL的C+映射IDL类型与C+类型的对应关系IDL类型C+类型封装C+类型stringanyinterfacefoostructfoounionfootypedefsequencefoochar*CORBA:Anyclassfoo,foo_ptrstructfoo,foo_ptrclassfoo,foo_ptrclassfoo,fo

24、o_ptrCORBA:String_varCORBA:Any_varclassfoo_varclassfoo_varclassfoo_varclassfoo_var61IDL的C+映射classUpublic:CORBA:Char_d()const;void_d(CORBA:Char);CORBA:Longlong_mem()const;voidlong_mem(CORBA:Long);CORBA:Charchar_mem()const;voidchar_mem(CORBA:Char);constchar*string_mem()const;voidstring_mem(char*);62ID

25、L的C+映射Umy_u;my_u.long_mem(99);assert(my_u._d()=L);assert(my_u.long_mem=99);my_u.char_mem(X);my_u._d(C);63IDL的C+映射classStrSeqpublic:StrSeq();StrSeq(CORBA:ULongmax);StrSeq(CORBA:ULongmax,CORBA:ULonglen,char*data,CORBA:Booleanrelease=0);StrSeq();StrSeq(constStrSeq&);StrSeq&operator=(constStrSeq&);64IDL

26、的C+映射constchar*operator(CORBA:ULongidx)const;CORBA:ULonglength()const;voidlength(CORBA:ULongnewlen);.65IDL的C+映射constchar*values=“red,”blue”,”green”;StrSeqmyseq;/myseq(3,3,values,true);myseq.length(3);for(inti=0;i();.private:T*myT;T*pT;T_vart_var;二者的区别:67IDL的C+映射attributeshortheight;virtualCORBA:Shor

27、theight();virtualvoidheight(CORBA:Short);68开发实例1、确定应用对象,定义它们在IDL中的接口2、将你的IDL定义编译成C+的存根和框架3、声明和实现能具体化你的CORBA对象的伺服器4、编写一个服务器的main程序5、与生成的存根和框架一起编写、编译和链接成服务器应用程序6、编写一个客户端的main程序7、与生成的存根一起编写、编译和链接成客户应用程序69开发实例IDL编编辑器辑器IDL文件文件IDL编译编译器器types.hhserv.hhskels.ccserver.ccstubs.ccclient.cc客户程序服务器程序C+ORB运行时库RPC

28、C+ORB运行时库70开发实例IDL编辑器编辑器IDL文件文件IDL java编译器编译器IDL c+编译器编译器client.javastubs.javatypes.hhstubs.ccserv.hhskels.ccserver.ccjavaORB运行时库运行时库客户端程客户端程序序服务端程服务端程序序C+ORB运行时库运行时库RPC71开发实例interfacegridattributeshortheight;attributeshortwidth;voidset(inshortn,inshortm,inlongvalue);longget(inshortn,inshortm,inlong

29、value);72客户端(1)接口映射grid.hh:classgrid:virtualpublicCORBA:Objectstaticgrid_ptr_duplicate(grid_ptr);staticgrid_ptr_narrow(CORBA:Object*);virtualCORBA:Shortheight();virtualvoidheight(CORBA:Shortn);virtualCORBA:Shortwidth();virtualvoidwidth(CORBA:Shortm);virtualvoidset(CORBA:Shortn,CORBA:Shortm,CORBA:Lon

30、gvalue);virtualCORBA:Longget(CORBA:Shortn,CORBA:Shortm);.73客户端(1)接口映射void grid:height(CORBA:Short _par_value)CORBA:StaticRequest _req(this,_set_height);_req.add_in_arg(&_par_value);_req.invoke();CORBA:Short grid:height()CORBA:Short _res;CORBA:StaticRequest _req(this,_get_height);_req.set_result(&_re

31、s);_req.invoke();return _res;74客户端(2)对象引用类型编译器生成三个不同的类型:(1)grid:代理基类;(2)grid_ptr:原始的对象引用类型;(3)grid_var:在grid_ptr之上增加了内存管理;代理基类不能直接使用。以下操作不允许:gridgr;grid*pGr;voidf(grid&gr);75客户端(3)对象引用生命周期(1)获取对象引用grid_vargv=.;(2)引用拷贝grid_vargv2=grid:_duplicate(gv);(3)删除引用CORBA:release(gv);CORBA:release(gv2);76客户端(4

32、)ORB初始化CORBA:ORB_varorb=CORBA:ORB_init(.);77客户端(5)字符串与引用(1)引用转换成字符串char*refstr;grid_vargv=.;refstr=orb-object_to_string(gv);(2)字符串转换成引用CORBA:Object_varobjv=orb-string_to_object(refstr);grid_vargv=grid:_narrow(objv);78客户端#include“grid.hh”intmain(intargc,char*argv)CORBA:ORB_varorb=CORBA:ORB_init(argc,

33、argv);CORBA:String_varrefstr;cinrefstr;CORBA:Object_varobj=orb-string_to_object(refstr);grid_vargv=grid:_narrow(obj);CORBA:Shorth,w;CORBA:Longv;79客户端h=gv-height();w=gv-width();gv-set(2,4,123);v=gv-get(2,4);80服务器端(1)接口映射classPOA_grid:publicvirtualPortableServer:ServantBasevoiddispatch(constchar*opera

34、tion);grid*_this();virtualCORBA:Shortheight()=0;virtualvoidheight(CORBA:Shortn)=0;virtualCORBA:Shortwidth()=0;virtualvoidwidth(CORBA:Shortm)=0;virtualvoidset(CORBA:Shortn,CORBA:Shortm,CORBA:Longvalue)=0;virtualCORBA:Longget(CORBA:Shortn,CORBA:Shortm)=0;.gridS.hh:81服务器端(1)接口映射voidPOA_grid:dispatch(CO

35、RBA:Request_ptr_req)if(strcmp(_req-op_name(),“_get_height)=0)CORBA:Short_res;_req-set_result(&_res);if(!_req-read_args()return;_res=height();_req-write_results();return;elseif(strcmp(_req-op_name(),“_set_height)=0)CORBA:Short_par_value;_req-add_in_arg(&_par_value);if(!_req-read_args()return;height(_

36、par_value);_req-write_results();return;82服务器端(1)接口映射elseif(strcmp(_req-op_name(),“get)=0)CORBA:Short_par_n;CORBA:Short_par_m;CORBA:Long_par_value;CORBA:Long_res;_req-add_in_arg(&_par_n);_req-add_in_arg(&_par_m);_req-add_in_arg(&_par_value);_req-set_result(&_res);if(!_req-read_args()return;_res=get(_

37、par_n,_par_m,_par_value);_req-write_results();return;.83服务器端(1)接口映射_this函数的功能:(1)在RootPOA下创建一个对象;(2)用RootPOA把伺服器登记为对象的实现;(3)为对象创建一个对象引用;(4)返回对象引用。84服务器端(1)接口映射classgrid_impl:publicvirtualPOA_gridCORBA:Shortm_height;CORBA:Shortm_width;CORBA:Long*m_a;grid_impl(CORBA:Shortn,CORBA:Shortm);grid_impl();vi

38、rtualCORBA:Shortheight();virtualvoidheight(CORBA:Shortn);85服务器端(1)接口映射virtualCORBA:Shortwidth();virtualvoidwidth(CORBA:Shortm);virtualvoidset(CORBA:Shortn,CORBA:Shortm,CORBA:Longvalue);virtualCORBA:Longget(CORBA:Shortn,CORBA:Shortm);86服务器端(1)接口映射grid_impl:grid_impl(CORBA:Shortn,CORBA:Shortm)m_height

39、=n;m_width=m;m_a=newCORBA:Longm_heightm_width;CORBA:Shortgrid_impl:height()returnm_height;voidgrid_impl:height(CORBA:Shortn)deletem_a;m_height=n;m_a=newCORBA:Longm_heightm_width;87服务器端(1)接口映射CORBA:Longgrid_impl:get(CORBA:Shortn,CORBA:Shortm)returnm_anm;88服务器端(2)对象登记与对象引用生成grid_implservant(6,6)grid_v

40、argv=servant._this();89服务器端#include“grid.hh”#include“gridS.hh”intmain(intargc,char*argv)CORBA:ORB_varorb=CORBA:ORB_init(argc,argv);CORBA:Object_varobj=orb-resolv_initial_reference(“RootPoa”);PortableServer:POA_varpoa=PortableServer:POA:_narrow(obj);PortableServer:POAManager_varmgr=poa-the_POAManager

41、();mgr-activate();grid_implservant(6,6);90服务器端grid_varobject=servant._this();CORBA:string_varrefstr=orb-object_to_string(object);coutrun();91开发实例server.exeobjref.iorclient.exeobjref.ior92名字服务名字服名字服务器务器客户客户服务器OA对象1、对象注册2、名字解析3、远程方法引发93名字服务:NamingContext:NamingContext:NamingContext:StockWatch:StockWat

42、ch:PManager“StockWatch”“PortfolioManager”“NASDAQ”“NYSE”“MainAdmin”94名字服务名字上下文(NameContext)/目录对象引用(Object)/文件名字(Name)名字绑定(NameBinding)绑定名字上下文 绑定对象引用名字解析(resolve)95名字服务moduleCosNaming.structNameComponentstringid;/目录/文件名stringkind;/扩展名;typedefsequenceName;96名字服务enumBindingTypenobject,ncontext;structBin

43、dingNamebinding_name;BindingTypebinding_type;typedefsequenceBindingList;97名字服务interfaceNamingContextvoidbind(inNamen,inObjectobj);voidrebind(inNamen,inObjectobj);voidbind_context(inNamen,inNamingContextnc);voidrebind_context(inNamen,inNamingContextnc);Objectresolve(inNamen);voidunbind(inNamen);Namin

44、gContextnew_context();NamingContextbind_new_context(inNamen);voiddestroy();voidlist(inunsignedlonghow_many,outBindingListbl,outBindingIteratorbi);98名字服务interfaceBindingIteratorbooleannext_one(outBindingb);booleannext_n(inunsignedlonghow_many,outBindingListbl);voiddestroy();99名字服务启动名字服务器实例化服务对象服务对象在名

45、字服务器上注册客户在名字服务器上按名查找对象客户引发对象的方法100名字服务interfaceAccountvoiddeposit(inunsignedlongamount);voidwithdraw(inunsignedlongamount);longbalance();interfaceBankAccountcreate();101名字服务(服务器端)Bank_impl*pServant=newBank_impl;CORBA:Object_varbank_ref=pServant-_this();CORBA:Object_varnsobj=orb-resolve_initial_refer

46、ences(NameService);CosNaming:NamingContext_varnc=CosNaming:NamingContext:_narrow(nsobj);CosNaming:Namename;name.length(1);name0.id=CORBA:string_dup(Bank);name0.kind=CORBA:string_dup();nc-rebind(name,bank_ref);102名字服务(客户端)CORBA:Object_varnsobj=orb-resolve_initial_references(NameService);CosNaming:Nam

47、ingContext_varnc=CosNaming:NamingContext:_narrow(nsobj);CosNaming:Namename;name.length(1);name0.id=CORBA:string_dup(Bank);name0.kind=CORBA:string_dup();CORBA:Object_varobj=nc-resolve(name);103名字服务(客户端)Bank_varbank=Bank:_narrow(obj);Account_varaccount=bank-create();account-deposit(700);account-withdr

48、aw(450);104事件服务磁盘满有雨股票信息磁盘满有雨股票信息有雨天气预报:有雨磁盘满磁盘满股票信息股票信息105事件服务事件通道Eventchannel事件的提供者Supplier事件的消费者Consumer106事件服务有两种事件数据传送模型:有两种事件数据传送模型:推push模型:在推模型中,事件的提供者起带头作用,发起事件的传送;拉pull模型:在拉模型中,事件的消费者起带头作用,向提供者请求事件数据。107事件服务push模型事件通道推消费者推消费者推提供者推提供者108事件服务pull模型事件通道拉消费者拉消费者拉提供者拉提供者109事件服务结构事件通道消费者提供者提供者代理消

49、费者代理110事件服务push模型磁盘满磁盘满磁盘满磁盘满磁盘满111事件服务pull模型正常服务器正常吗?连接服务器:正常正常连接112事件服务EventchannelSupplierAdminProxyPushConsumerPushSupplierProxyPullConsumerPullSupplierConsumerAdminProxyPushSupplierPushConsumerProxyPullSupplierPullConsumer113push模型接口moduleCosEventComminterfacePushConsumervoidpush(inanydata);voi

50、ddisconnect_push_consumer();interfacePushSuppliervoiddisconnect_push_supplier();114pull模型接口moduleCosEventComminterfacePullSupplieranypull();anytry_pull(outbooleanhas_event);void disconnect_pull_supplier();interfacePullConsumervoiddisconnect_pull_consumer();115事件通道接口moduleCosEventChannelAdmininterfac

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁