ImageVerifierCode 换一换
格式:PPT , 页数:31 ,大小:172KB ,
文档编号:4383138      下载积分:25 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-4383138.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(晟晟文业)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(第七章CORBA分布对象技术课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

第七章CORBA分布对象技术课件.ppt

1、Common Object Request Broker Architecture公共对象请求代理结构公共对象请求代理结构第七章分布式对象技术第七章分布式对象技术CORBA1.1 对象管理组织对象管理组织OMG的的CORBAOMG(Object Management Group)成立于成立于1989年,年,OMG是个非营利性组织,是个非营利性组织,不开发软件,仅仅制定标准。目前有不开发软件,仅仅制定标准。目前有900多名成员:多名成员:Oracle SunSoft IBM Sybase Informix HP DEC2.1990年年11月,月,OMG发表对象管理体系指南,初步阐明了发表对象管理

2、体系指南,初步阐明了CORBA思想。思想。3.1991年年10月,月,OMG推出推出CORBA1.0,定义了接口定义语言,定义了接口定义语言(IDL)、对象、对象 管理模型、动态请求管理模型、动态请求API和接口仓库等内容。和接口仓库等内容。4.1991年年12月,月,OMG推出推出CORBA1.1,引入对象适配器概念。,引入对象适配器概念。5.1996年年8月,月,OMG推出推出CORBA2.0,对象请求代理间协议,对象请求代理间协议 (IIOP Internet Inter-ORB Protocol)完全基于面向对象技术完全基于面向对象技术6.现在,现在,CORBA3.0 更好支持更好支持

3、EJB和和JavaRMI 基于面向组件。基于面向组件。各种技术发展历程各种技术发展历程DNA:Windows Distributed interNet Application architecture OLE:Object Linking and Embedding,对象连接与嵌入,对象连接与嵌入 什么是什么是CORBA?CORBA是由是由OMG组织制订的一种标准的组织制订的一种标准的面向对象面向对象应用程序体系结构应用程序体系结构(规范规范),为解决为解决分布式处理分布式处理环境环境(DCE)中,硬件和软件系统的互连而提出的一种解决方案。中,硬件和软件系统的互连而提出的一种解决方案。DCE:

4、Distributed Computing Environment 1.2 CORBA用途用途CORBA是为实现软件全方位集成而设计的。是为实现软件全方位集成而设计的。分布式软件开发需解决以下五个问题:分布式软件开发需解决以下五个问题:跨平台(硬件)跨平台(硬件)跨操作系统跨操作系统跨语言跨语言跨协议跨协议跨版本跨版本Internet使计算机联结起来,使计算机联结起来,CORBA使应用软件联结起来。使应用软件联结起来。解决这五个问题的唯一方案,采用解决这五个问题的唯一方案,采用CORBA作为分布式软件开发人员,作为分布式软件开发人员,CORBA使我们获益如下:使我们获益如下:混合编程混合编程

5、/我只会我只会C+,不会,不会Java丰富的编程元素丰富的编程元素/众多基于众多基于CORBA的的Toolkits高效的开发手段高效的开发手段/软件模块重用十分便利,我不需要从零开始!软件模块重用十分便利,我不需要从零开始!版本无关性版本无关性/CORBA版本向上向下兼容版本向上向下兼容 CORBA将在将在Internet上实现软件的即插即用!上实现软件的即插即用!1.3 CORBA采用的技术采用的技术 CORBA采用了面向对象技术采用了面向对象技术/从软件重用角度考虑问题从软件重用角度考虑问题 CORBA采用了分布式计算模型采用了分布式计算模型 CORBA采用多层体系结构采用多层体系结构 C

6、ORBA采用接口技术采用接口技术/从软件集成角度考虑问题从软件集成角度考虑问题1.4 CORBA体系结构体系结构 应用程序及应用程序及各种对象各种对象CORBA工具集工具集横向:用户界面、信息管理、系统及任务管理等工具集横向:用户界面、信息管理、系统及任务管理等工具集纵向:医疗保健、金融保险、电讯等面向行业的工具集纵向:医疗保健、金融保险、电讯等面向行业的工具集CORBA对象请求代理对象请求代理-ORBCORBA服务服务对象生存期、对象关系、命名服务、对象查询、事件服务对象生存期、对象关系、命名服务、对象查询、事件服务对象属性服务、对象安全、许可服务、事务服务等对象属性服务、对象安全、许可服务

7、、事务服务等对象级别服务对象级别服务域接口是为应用领域服务而提供的接口域接口是为应用领域服务而提供的接口 RFP(Request For Proposal)公共设施公共设施面向用户面向用户的应用的应用对象管理体系结构对象管理体系结构OMA1.4.1 对象管理体系结构对象管理体系结构OMA由由OMG制定的规范制定的规范对象管理体系结构(对象管理体系结构(Object Management Architecture,OMA)和它的核心(也就是和它的核心(也就是CORBA规范),提供了一个完整的体系结构。规范),提供了一个完整的体系结构。OMA描述了面向对象技术在分布式处理中的运用。描述了面向对象技

8、术在分布式处理中的运用。OMA包括两部分:对象模型(包括两部分:对象模型(Object Model)和)和 参考模型(参考模型(Reference Model)。)。对象模型:定义如何描述分布式异构环境中的对象。对象模型:定义如何描述分布式异构环境中的对象。参考模型:描述对象之间的交互。参考模型:描述对象之间的交互。OMA对象模型对象模型在在OMA对象模型中,对象是一个被封装的实体,它具有一个不可改变的标识,对象模型中,对象是一个被封装的实体,它具有一个不可改变的标识,并能给客户用户提供一个或多个服务。并能给客户用户提供一个或多个服务。interface printerattribute lo

9、ng model;void print(in string buffer);OMA参考模型参考模型在在OMA参考模型中,参考模型中,OMG定义了一条为对象所公用的通信总线,即定义了一条为对象所公用的通信总线,即ORB。OMG还定义了对象进出这一总线的界面。包括:还定义了对象进出这一总线的界面。包括:n 对象服务(对象服务(Object Services)n 公共设施(公共设施(Common Facilities)n 应用界面(应用界面(Application Interface)n 域界面(域界面(Domain Interface)1.4.2 对象请求代理对象请求代理ORB联结应用程序、各种对

10、象、联结应用程序、各种对象、CORBA服务、服务、CORBA工具集的核心。工具集的核心。ORB接口结构接口结构动态调用接口动态调用接口 DII静态调用接口静态调用接口直接调用一些直接调用一些ORB内部的功能内部的功能 Portable Object AdapterCORBA允许用户以两种不同的方式提出对象请求:允许用户以两种不同的方式提出对象请求:1.静态调用:静态调用:通过给定接口的存根,在编译了对象代码后,进入客户端的程序。通过给定接口的存根,在编译了对象代码后,进入客户端的程序。因此,静态调用必须在编译时就知道对象及其类型。因此,静态调用必须在编译时就知道对象及其类型。2.动态调用:动态

11、调用:通过通过ORB的动态调用接口的动态调用接口DII,在运行时生成访问对象的代码。,在运行时生成访问对象的代码。DII:Dynamic Invocation InterfaceORB的任务是:找出所要对象的位置,激活该对象,向对象传递此请求。的任务是:找出所要对象的位置,激活该对象,向对象传递此请求。对象执行所请求的服务后,把输出值返回给对象执行所请求的服务后,把输出值返回给ORB,然后再由然后再由ORB返回给客户。返回给客户。ORBCLIENTSTUBSSKELETONSSERVERORBIIOPMETHOD REQUESTOBJECT REFERENCESERVANTCORBA一次请求过

12、程一次请求过程Internet Inter-ORB ProtocolCORBA ORB优点:优点:1.静态和动态方法调用。静态和动态方法调用。2.高级语言绑定。高级语言绑定。/CORBA ORB并不介意服务对象是用何种语言编写。并不介意服务对象是用何种语言编写。3.位置透明。位置透明。/ORB能够单机模式运行,也能通过能够单机模式运行,也能通过IIOP与其它与其它ORB互连。互连。4.内置安全和事物处理。内置安全和事物处理。5.与遗留系统(与遗留系统(legacy system)共存。)共存。/CORBA能够让对象的定义与实现分离。能够让对象的定义与实现分离。使用使用IDL将原有的过程或函数封

13、装。将原有的过程或函数封装。1.4.3 IDL(Interface Definition Language)接口定义语言接口定义语言OMG IDL接口定义语言不是作为程序设计语言体现在接口定义语言不是作为程序设计语言体现在CORBA体系结构中的,体系结构中的,而是用来描述产生对象调用请求的客户对象和服务对象之间的接口的语言。而是用来描述产生对象调用请求的客户对象和服务对象之间的接口的语言。OMG IDL文件描述了服务器提供的服务功能,客户机可以根据该接口文件文件描述了服务器提供的服务功能,客户机可以根据该接口文件描述的方法向服务器提出业务请求。描述的方法向服务器提出业务请求。在大多数在大多数C

14、ORBA产品中都提供产品中都提供IDL到相关编程语言的编译器。到相关编程语言的编译器。/就是就是ORB 如:如:Java IDL 即即idlj编译器编译器idl-to-c+compiler OMG IDL文件文件接口仓库接口仓库OMG IDL编译器编译器客户端本地代理客户端本地代理(stub)服务器框架服务器框架(skeleton)客户机应用客户机应用服务器应用服务器应用IDL文件的应用过程文件的应用过程IDL-DefinitionClientProgramSourceObjektImplementSourceIDL-CompilerSkeletonSourceStub SourceJava/

15、C+CompilerClient-ProgramJava/C+CompilerObjekt-Implement使用使用CORBA应用开发图示应用开发图示OMG IDL的语法规则的语法规则(参阅参阅IDL手册手册)1.模块定义模块定义 模块指定一个独立的名字空间,类似于模块指定一个独立的名字空间,类似于 C+的名字空间的名字空间 /Compute.idlmodule Compute typedef double radius;typedef long times;interface PI double getResult(in radius aRadius,in times time);2.接口

16、接口interface interface JobManager readonly attribute string firstName;attribute string status;string QueryJobStatus(in long number,out string property);类型声明符号类型声明符号typedef与与C+一样一样IDL 模块和接口模块和接口module FruitsBasket interface Apple;interface Orange;从 VegetablesBasket 模块中引用 Apple 要这样做:FruitsBasket:Apple。

17、module FruitsBasket interface Apple;module FruitsBasket interface Orange;#include orange.idl module FruitsBasket interface Apple;1.2.3.IDL范例:范例:module MeineBank exception BankFehler /异常定义异常定义 string info;/基本账户基本账户 interface BasisKonto readonly attribute long nummer;double einzahlen(in double betrag)

18、raises(BankFehler)/存钱存钱;/接口继承接口继承-支票账号支票账号interface GiroKonto:BasisKonto double attribute dispoKredit;/信贷额度信贷额度;/储蓄账号储蓄账号 interface SparKonto:BasisKonto double attribute zinssatz;/存款利率存款利率;/接口多重继承接口多重继承interface GiroSparKonto:SparKonto,GiroKonto.;我的银行必须为操作中的每一个参数指明方向属性必须为操作中的每一个参数指明方向属性in:由客户机在运行时声明

19、参数的类型并赋值,服务器只能使用不能修改其值。:由客户机在运行时声明参数的类型并赋值,服务器只能使用不能修改其值。out:由客户机在运行时声明参数的类型,服务器运行中为其赋值。:由客户机在运行时声明参数的类型,服务器运行中为其赋值。inout:由客户机在运行时声明参数的类型并赋值,服务器可以使用或修改其值。:由客户机在运行时声明参数的类型并赋值,服务器可以使用或修改其值。3.基本数据类型基本数据类型 short long unsigned short unsigned long float doublechar boolean octet any any 可以和任意的数据类型匹配,也可以在运行

20、中被动态转换为任意数据类型。可以和任意的数据类型匹配,也可以在运行中被动态转换为任意数据类型。像像 C+中的中的Variant。4.构造数据类型和数组构造数据类型和数组struct union enum sequence stringtypedef string aName;typedef sequence aSequence;typedef long aDimension20100;enum GoodsStatus GOODS_SALED,GOODS_INSTOCK;1.4.4 创建创建CORBA应用程序应用程序CORBA对象服务的实现方式分两种:对象服务的实现方式分两种:1.对象的命名引用

21、方式对象的命名引用方式/常用方式常用方式2.字符串化对象引用方式字符串化对象引用方式创建创建CORBA应用程序的过程:应用程序的过程:进行系统分析,确定服务对象需要提供的功能。进行系统分析,确定服务对象需要提供的功能。根据分析结果,编写根据分析结果,编写IDL文件。文件。编译接口文件,产生服务对象的骨架与客户本地代理。编译接口文件,产生服务对象的骨架与客户本地代理。基于服务器框架,编写服务对象实现程序。基于服务器框架,编写服务对象实现程序。基于客户端本地代理,编写客户对象调用程序。基于客户端本地代理,编写客户对象调用程序。编译客户对象和服务对象程序。编译客户对象和服务对象程序。启动服务对象程序

22、。启动服务对象程序。启动客户对象程序。启动客户对象程序。/Hello.idlinterface Hello void say_hello();u IDL-to-C+translator Hello.h Hello.cpp Hello_skel.h Hello_skel.cppu IDL-to-Java translator Hello.java HelloHelper.java HelloHolder.java HelloOperations.java HelloPOA.java _HelloStub.java服务对象接口定义:服务对象接口定义:通过两种不同的通过两种不同的IDL编译器:编译器

23、:#include“Hello_skel.h”class Hello_impl:public POA_Hello public:virtual void say_hello()throw(CORBA:SystemException);#include#include#include“Hello_impl.h”void Hello_impl:say_hello()throw(CORBA:SystemException)cout Hello World!endl;定义头文件定义头文件 Hello_impl.h实现头文件实现头文件 Hello_impl.cpp#include#include#inc

24、lude int main(int argc,char*argv)try CORBA:ORB_var orb=CORBA:ORB_init(argc,argv);CORBA:Object_var poaObj=orb-resolve_initial_references(RootPOA);PortableServer:POA_var rootPoa=PortableServer:POA:_narrow(poaObj);PortableServer:POAManager_var manager=rootPoa-the_POAManager();Hello_impl*helloImpl=new H

25、ello_impl();Hello_var hello=helloImpl-_this();CORBA:String_var s=orb-object_to_string(hello);const char*refFile=Hello.ref;ofstream out(refFile);out s activate();orb-run();orb-destroy();catch(const CORBA:Exception&e)cerr e endl;打开打开POA创建一个实例的创建一个实例的引用引用保存保存IORPOA 激活激活ORB 启动启动等待等待ClientsInteroperable

26、Object Reference可互操作对象引用可互操作对象引用 public class Client public static void main(String args)java.util.Properties props=System.getProperties();try org.omg.CORBA.ORB orb=org.omg.CORBA.ORB.init(args,props);org.omg.CORBA.Object obj=null;String refFile=Hello.ref;java.io.BufferedReader in=new java.io.Buffere

27、dReader(new java.io.FileReader(refFile);String ref=in.readLine();obj=orb.string_to_object(ref);Hello hello=HelloHelper.narrow(obj);hello.say_hello();orb.destroy();catch(Exception e)e.printStackTrace();读出IOR字符串还原为对象引用采用何种语言完全取决于自己的编程爱好采用何种语言完全取决于自己的编程爱好/Hello_impl.javapublic class Hello_impl extends

28、HelloPOA public void say_hello()System.out.println(Hello World!);如如Hello_impl.java实现实现Hello-Object in Java#include#include#include int main(int argc,char*argv)try CORBA:ORB_var orb=CORBA:ORB_init(argc,argv);CORBA:Object_var poaObj=orb-resolve_initial_references(RootPOA);PortableServer:POA_var rootPo

29、a=PortableServer:POA:_narrow(poaObj);PortableServer:POAManager_var manager=rootPoa-the_POAManager();Hello_impl*helloImpl=new Hello_impl();Hello_var hello=helloImpl-_this();CORBA:String_var s=orb-object_to_string(hello);const char*refFile=Hello.ref;ofstream out(refFile);out s activate();orb-run();orb

30、-destroy();catch(const CORBA:Exception&e)cerr e resolve_initial_references(NameService );CosNaming:NamingContext_var nc=CosNaming:NamingContext:_narrow(ns.in();CosNaming:Name aName;aName.length(1);aName0.id=CORBA:string_dup(hello);aName0.kind=CORBA:string_dup();nc-bind(aName,hello.in();public class

31、Client public static void main(String args)java.util.Properties props=System.getProperties();try org.omg.CORBA.ORB orb=org.omg.CORBA.ORB.init(args,props);org.omg.CORBA.Object obj=null;String refFile=Hello.ref;java.io.BufferedReader in=new java.io.BufferedReader(new java.io.FileReader(refFile);String

32、 ref=in.readLine();obj=orb.string_to_object(ref);Hello hello=HelloHelper.narrow(obj);hello.say_hello();orb.destroy();catch(Exception e)e.printStackTrace();org.omg.CORBA.Object ns=orb.resolve_initial_references(NameService);NamingContext nc=NamingContextHelper.narrow(ns);NameComponent aName=new NameComponent1;aName0=new NameComponent();aName0.id=hello;aName0.kind=;org.omg.CORBA.Object obj=nc.resolve(aName);Hello hello=HelloHelper.narrow(obj);

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|