电子商务技术:第5讲-电子商务系统技术-CORBA_第1页
电子商务技术:第5讲-电子商务系统技术-CORBA_第2页
电子商务技术:第5讲-电子商务系统技术-CORBA_第3页
电子商务技术:第5讲-电子商务系统技术-CORBA_第4页
电子商务技术:第5讲-电子商务系统技术-CORBA_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

第5讲分布式电子商务系统的设计与开发技术之CORBA

*参考文献:1.CORBA系统结构、原理与规范,韦乐平、薛君敖、孟洛明主持编译,电子工业出版社2.CORBA企业解决方案,李师贤、郑红等译,机械工业出版社3.CORBA原理及应用,朱其亮、郑斌编著,北京邮电大学出版社主要内容

了解CORBA基于CORBA的软件开发基本过程CORBA技术发展动态及应用前景对象适配器:POA1了解CORBA

OMG组织制定的一个工业规范,是一个体系结构和一组规范。目的:在分布式环境下实现应用的集成,使基于对象的软件成员,在分布的、异构的环境下可重用、可移植、可互操作。OMG的理念:不存在统一的硬件平台、不存在统一的操作系统、编程语言、网络协议、应用模式,必须在互操作上达成一致。方法:提供一个框架,如果符合这一框架,就可以在主要的硬件平台和操作系统上建立一个异质的分布式应用。CORBA结合了计算机工业中的两个重要趋势:面向对象软件开发和多层次计算。

对象管理体系结构OMAOMG的接口定义语言IDL对象请求代理ORBCORBA服务ORB之间的互操作CORBA规范CORBA发展历程CORBA的一致性1.1对象管理体系结构-OMA*定义异构环境下对象透明地发送请求和接收响应的基本机制。支持客户程序与对象实现在一个分布式环境中通信。基于分布式对象的所有应用程序都可能用到的通用服务的接口可用于大多数应用领域的面向终端用户的工具接口水平公用设施:领域间可共享垂直公用设施:面向某个领域由CORBA支持的顶层业务对象和应用系统,是针对特定应用开发的接口OMA小结

CORBA不只定义了面向对象的远程调用机制,它还定义了不同抽象层次的框架。OSORBServicesFacilitiesObjectObjectObject核心ORB提供了网络编程复杂性的抽象以面向对象的方式提供了典型的系统级功能。提供了领域间共享或面向特定领域的服务1.2OMG接口定义语言IDL

仅定义接口,不定义实现分隔“对象做什么

(WHAT)”与“如何做(HOW)”强类型、面向对象、语言中立的说明(描述)型语言ANSIC++

的子集支持多继承支持到多种语言的映射ORBCC++AdaIDLIDLIDLIDLIDLIDLClientSideObjectImplementationSideCOBOLCAdaC++SmalltalkJAVAIDLIDLIDLIDLIDLIDLORBCOBOLSmalltalkJAVARoleofCORBAIDLOMGIDL的组成要素

模块(module):含有许多功能进行分组的接口,形成附加的分层结构,因此,模块定义了一个命名空间。接口(interface):定义了数据和操作(方法),共客户调用。接口中可以包括类型、常量、属性和异常的声明。操作(method):定义了客户可以调用的、处于对象中的服务。操作特性(signature)指操作的参数和返回的结果类型。属性(attribute):接口中定义的数据。数据类型:用于描述参数、属性、返回值以及异常等的允许值。如:long,short,float,double,enum,char,wchar、boolean,octet,any,struct,union,string,wstring,sequence,fixed,objectreference,interface等OMGIDL的操作

操作名:参数:in,out,inout;返回结果:异常:用来表示操作请求没有被成功地完成。执行语义:最多一次(at-most-once):如果操作请求能够成功地返回,那么该操作只被执行一次(exactlyonce),如果返回异常,那么该操作是最多执行一次(at-most-once)。没有oneway修饰符的操作都属此类,即同步或延迟同步的操作调用方式都是这种语义。最大努力(best-effort):不能返回任何结果,且请求者从不与操作是否结束相同步。具有oneway修饰符的操作属此类。上下文:请求的上下文提供了能够影响请求完成的附加的特定操作信息。IDL与Java及C++的对应关系一个实例(1)ModuleBANK{

Interface

BANKAccount{

enumaccount_kind{checking,saving};

exceptionaccount_not_available{string,reason};

exceptionincorrect_PIN{};

readonly

attributefloatbalance;

attribueaccount_kindkind_of_account;

voidaccess(instringaccount,instringpin)

raises(accout_not_available,incorrect_pin);一个实例(2)

voiddeposit(in

floatf,out

floatnew_balance)

raises(account_not_available);

voidwithdraw(infloatf,outfloatnew_balance)

raises(account_not_available);

onewayop1(ininti); }}IDL到编程语言的映射定义相应编程语言所用到的数据类型的定义,如:

OMGIDL Java short short longlong longlong octet byte通过ORB能够进行对象访问的函数接口等。如:客户存根接口的结构、对象适配器的结构、ORB接口的结构等。定义了对象调用和客户的控制线程之间的交互和实现,以实现程序的控制线程和对象调用之间的同步目前有:Ada、C、C++、Java、Lisp、COBOL、Python、Smalltalk。IDL的使用1.3对象请求代理ORB

对象请求代理ORB(ObjectRequestBroker):定义异构环境下对象透明地发送请求和接收响应的基本机制。ORB为客户隐藏:对象位置对象实现方式对象执行状态对象通信机制ORB并不需要作为一个单独的组件来实现。它定义了一系列的接口,任何一种支持了该接口的实现方式都是可行的。ORB体系结构*

ORB主要知识点介绍

接口对象引用客户和对象实现ORB核心接口库和实现库动态调用和静态调用对象适配器1.3.1接口接口:描述了客户可访问的对象操作的一个集合;客户程序所看到的对象接口完全独立于对象所处的位置、实现对象的程序设计语言以及对象接口中未反映的其他特性;接口定义:客户程序与对象实现之间的界面是对象的接口定义;对象接口采用接口定义语言IDL定义;客户程序只能通过对象的接口定义掌握对象的逻辑结构,并通过发送请求来影响对象的行为与状态;ORB的各种接口*1.3.2对象引用对象引用-临时的不透明的句柄,标识ORB中的一个对象实例。它用于定位响应请求的对象实现。可互操作的对象引用IOR:在异构ORB间传递OR。传递对象的两种方法对象X的副本进程P本地执行进程Q对象X传递副本进程P3.执行操作进程Q对象X1.传递引用2.调用操作4.执行的结果a.通过值b.通过对象引用传递对象的两种方法对象X的引用对象引用的获取*

从命名服务或交易服务中获取使用工厂对象使用对象引用字符串。转换为字符串,在文件中、email等中传递。Object_to_string()和string_to_object();特定ORB实现的方法自举,如:CORBA::ORB::resolve_initial_references()作为方法调用的返回值1.3.3客户和对象实现客户(Client)客户访问对象的对象引用,并且调用对象上的操作客户只知道对象的接口,通过调用感受对象的行为尽管一般认为客户是向对象发出请求的程序或进程,但是客户只是相对于特定对象而言的,是一个相对概念;对象实现(ObjectImplementation)通过为对象实例定义数据和为对象方法定义代码提供对象的语义;对象可以具有不同的实现方式;对象实现不依赖于ORB或者客户调用对象的方式;一个对象的实现可以是其它对象的客户;服务器服务器是一个(或一组)组件,能为其它组件提供某种服务。即,如果某个组件创建了一个对象,并能被其它组件通过对象引用来访问,则拥有对象的组件就是该对象的服务器,其它组件对这个对象的请求操作都将由创建该组件的服务器来执行。例如一个进程;客户客户服务器服务器对象实现的实例:Servant回调(CallBack)服务器调用客户实现的对象中的操作,称为客户回调,简称回调。对象X的引用对象Y对象Y的引用对象X组件A组件B1.传递对象引用2.调用X中的操作参数中包含Y的引用4.回调Y中的操作3通常,服务器通过回调向客户返回异步调用的结果或目前运行的情况1.3.4ORB核心*

ORB核心提供的接口ORB内核提供的服务对象接口,同时为客户方和对象实现方所见,可直接为应用程序所使用:对象引用操作:提供对象引用的串化和反串化及对象引用复制、删除、比较及探测对象引用存在与否等操作。如object_to_string();release();ORB和对象适配器初始化:使应用得到指向ORB的对象引用。如ORB_init();获取初始对象引用:ORB规定了客户对象在ORB初始时获取初始对象引用的方法,如resolve_initial_references();1.3.5接口库和实现库*

主要功能接口库(IFR,InterFaceRepository)ORB的一个组件,提供服务,用于接口定义的存储、查找和管理;CORBA对其接口进行了定义;实现库(IR,ImplemetationRepository)ORB的一个组件,用于存储对象实现的相关信息,如;如何定位对象实现,如何激活对象实现,以及其它的与ORB和操作系统相关的信息;OMG没有对其进行详细规范,与具体实现相关;如OrbixWeb:

putit-hHostName

ServerName-jServerAbsoluteClassName1.3.6

静态和动态调用*

从IDL到存根和骨架静态调用:存根和骨架OMGIDL编译器根据接口定义来产生客户方的存根和服务方的骨架。静态IDL存根(IDLstubs):

编译时确定的的静态接口,位于客户对象本地,对客户来说相当于远程的执行对象。由存根向ORB提交请求。负责对请求参数的封装和发送,以及对返回结果的接收和解封装,并以适当的格式进行通信传输。静态IDL骨架(IDLskeletons):在本地调用执行对象服务,并与ORB通信。针对执行对象来说,代表了远程客户。骨架接收经ORB来的请求,将请求参数解封装,识别客户所请求的服务,(向上)调用服务器中的对象实现,把执行结果封装,并将结果返回给客户程序。动态调用:DII和DSI动态调用接口(DII)和动态骨架接口(DSI):通用存根和通用骨架,由ORB直接提供,不依赖于所调用对象的接口。DII-支持客户方的动态请求调用,使客户方应用可以在运行时向任何对象发出请求,动态地选择对象的实现接口和操作。DII根据具体对象实现的IDL接口来动态创建对象请求,其IDL接口信息由接口仓库提供。DSI-DII在Server方的对应。DSI允许用户在没有静态骨架信息的条件下来获得对象实现。DSI从进入的消息找出调用的目标对象及相应的方法,并提供运行时的连接机制。一个由DII发起的请求可能由静态骨架来接受,也可以由DSI来接受。一个静态存根发起的请求可以由DSI来接受,也可以由静态骨架来接受。在ORB上调用creat_request()来创建请求,将方法名、参数列表以及返回值的指针传递给这个请求如用create_list()创建列表,用add_item将参数加进列表。对接口库调用lookup_name()去寻找它想调用的方法,然后调用describe()去获得这个方法的全部IDL定义。获得接口名字:在目标对象的引用上调用get_Interface()方法动态调用的大致过程*

在请求对象上调用相应的方法,将请求发送出去。有三种方法:同步:使用invoke()延迟同步:使用send_deferred()

和get_response()单向调用:使用send_oneway()静态调用与动态调用的对比静态调用:优点:更易编程提供了更强的类型校验速度快缺点:不灵活,客户编译时需要存根。动态调用:优点:灵活、可扩展。客户可在调用时发现接口的相关信息,不需在编译时了解。允许服务器端增加新的类而无需在客户代码上进行修改。缺点:要对数据进行类型校验、速度慢静态调用还是动态调用

使用范例 推荐的调用技术客户频繁使用服务器对象, 使用静态预编译存根服务器对象无变化。客户很少调用服务器对象 可使用DII客户在运行时发现服务器对象 使用DII客户在浏览器内运行,发现新对象使用Applet和静态存根1.3.7对象适配器*

CORBA对象和伺服对象CORBA对象:可看作是一个具有对象标识、对象接口及对象实现的抽象实体。从客户程序的角度看,IOR中包含了对象的标识、接口类型及其他信息以查找对象实现。伺服对象(Servant):指具体程序设计语言的对象实例或实体,通常存在于一个服务程序进程之中。对象适配器(ObjectAdaptor):一个重要的ORB组件,它负责将抽象的CORBA对象映射到具体的伺服对象。主要功能服务器利用对象实现创建伺服对象,然后将这些服务端本地的对象实例转换为可供远程使用的CORBA对象:给该本地对象实例关联了对象标识、对象引用;对象适配器是管理服务端伺服对象、对象标识、对象引用及它们之间关联的主要工具。它负责决定在收到客户请求时应调用哪个伺服对象,然后调用该伺服对象上的合适操作;CORBA支持多种不同类型的对象适配器,但所有对象适配器的主要作用都是创建对象引用,并将对象引用与真正执行服务的程序设计语言伺服对象相关联。BOA:BasicObjectAdapterPOA:PortableObjectAdapter存储允许ORB的定位和激活对象实现的信息,如Server支持的类、实例化对象、这些对象的ID等运行时信息。对象引用的生成、维护,方法调用、对象的激活与终止、对象定位等功能。BOA:BasicObjectAdapterPOA:PortableObjectAdapterDII在Server方的对应。DSI从进入的消息找出调用的目标对象及相应的方法,并提供运行时的连接机制。允许动态地构造对象调用。客户机可推迟到运行时选择对象的实现接口和操作。静态IDL存根在Server侧的对应。由IDL编译程序自动生成。服务的静态接口。由IDL编译程序自动生成。在客户端,如同一本地调用,是远程SERVER对象的代理。访问某个对象实现所提供的服务的程序。根据其接口了解其逻辑结构,并通过调用掌握对象的行为所定义的IDL接口的真正实现。可用语言:C,C++,Java,Smalltalk,Ada…是ORB最关键的部分,负责请求的通信设施:对象的定位编组与解组启动初始服务屏蔽底层网络细节提供接口库和其它的APIORB体系结构回顾

对象的IDL接口定义的存储、分布和管理。客户对象可以在运行时查阅接口仓库的内容,获得对象实现的IDL接口信息,从而向对象实现发出请求。当客户程序要调用远程对象上的方法时,首先要得到这个远程对象的引用,之后就可以像调用本地方法一样调用远程对象的方法。当发出一个调用时,实际上ORB会截取这个调用(通过客户Stub完成),因为客户和服务器可能在不同的网络、不同的操作系统上甚至用不同的语言实现,ORB还要负责将调用的名字、参数等编码成标准的方式(称Marshaling)通过网络传输到服务器方(有时在同一台机器上也如此),并通过将参数Unmarshaling的过程,传到正确的对象上(这整个过程叫重定向,Redirecting),服务器对象完成处理后,ORB通过同样的Marshaling/Unmarshaling方式将结果返回给客户。ORB内核提供的服务对象接口,同时为客户方和对象实现方所见,可直接为应用程序所使用。1.4CORBA服务公共对象服务:系统级的对象框架。这些服务扩展了基本的CORBA体系结构。CORBA服务代表了一组预先实现的,软件开发商通常需要的分布式对象。。目前定义了17种服务CORBA服务清单命名服务(NamingService):为客户程序通过名字查找对象实现提供支持。事件服务(EventService):使对象间的通信能够以松耦合的方式进行。生命周期服务(LifeCycleService):为对象的创建、删除、拷贝和移动提供支持。

持久状态服务(PersistentStateService):为对象持久状态的维护和管理提供支持。事务服务(TransactionService):为事务处理提供支持。并发服务(ConcurrencyService):为多个客户协调一致地同时访问共享资源提供支持。CORBA服务清单(2)关系服务(RelationshipService):为实体和它们之间地关系的外在表示提供支持。外部服务(ExternalizationService):为对象的外部化(externalizing)和内在化(internalizing)提供支持.查询服务(QueryService)::为客户在对象集合中查找满足某种查询标准的对象提供支持。许可证服务(LicensingService):为软件许可证的管理提供支持。

属性服务(PropertyService):为对象属性的定义和操纵提供支持。时间服务(TimeService):为客户获取当前时间以及可能的误差提供支持。安全服务(SecurityService):为基于CORBA的整个系统的安全提供支持。CORBA服务清单(3)交易对象服务(TradingObjectService):为提供和查找具有特定属性的对象提供支。集合服务(CollectionsService):为创建以及操纵各种常用集合类型提供支持。通知服务(NotificationService):对事件服务的扩展,支持事件的类型定义、过滤条件的设定、服务质量的设定等。增强的时间视图服务(EnhancedViewofTimeService

):为一致地使用具有各种自身特点的时钟提供支持。

命名服务目的:为通过名字查找对象提供支持。方法:定义了一系列的接口,使客户可以管理对象的命名空间、在命名空间中查找对象。基本概念:命名上下文Namingcontext:一种命名空间,在该范围内,所有名字是唯一的。

名字Name:一个有序的由组件(component)构成的序列,也叫对象的复合名。在这个序列中,除最后一个组件以外,其它都是一个命名空间的名字。最后的组件是这个对象的简单名。名字绑定Namebinding:名字到对象的关连。支持分层命名的CORBA对象命名服务的使用使用NamingContext接口提供的API,可以:

将一个对象与一个名字绑定:voidbind(inNamen,inObjectobj);在一个命名空间中,删除一个对象绑定:voidunbind(inNamen);通过名字查找一个对象:Objectresolve(inNamen);创建一个命名空间:NamingContextbind_new_context(inNamen);等等.使用BindingIterator接口,可以在一个给定的命名空间中漫游(Navigate)。小结OMG为每个服务定义了标准API。实现厂商提供支持这些API的具体产品,它们的实现方法可能不同,但接口是一致的。用户购买、部署需要的服务产品。在程序中使用时,首先获取服务中相应对象的IOR,然后调用它的操作即可。1.5ORB的互操作可互操作性(interoperability)是指在一个系统中用不同工具或不同供应商的产品开发出来的两个组件是否可以协调工作。ORB之间的互操作与基于DCE、DCOM等的系统的互操作

ORB域和桥接域支持开发人员根据自己的实现因素或管理原因将对象划分为不同的集合,不同域的对象之间需要桥接机制才可彼此交互。如把使用不同对象引用格式的ORB划分为不同的域。桥接:把涉及不同域边界之间的沟通称为桥接(bridge)。OMG针对对象引用域间的桥接,提出了4种方法。

GIOP、IIOP和ESIOP为了不同的ORB间可以互操作,有必要制订传输请求的统一标准,规定传输底层的数据表示方法与消息格式,GIOP:通用ORB间协议,定义了传送语法和消息格式的标准集,能够在任何面向连接的传输上实现ORB间的互操作性。IIOP:InternetORB间协议,定义了如何在TCP/IP传输上构建GIOP。GIOP和IIOP之间的关系类似于接口定义及其实现。ESIOP:能够针对已使用特定分布式计算基础结构的特殊情况(例如DCE-CIOP)构建ORB。GIOP的基本组成部分

TheCommonDataRepresentation(CDR)definition:通用数据表示定义,它实际上是IDL数据类型在网上传输时的编码方案。它对所有IDL数据类型的映射都作了规定。GIOPMessageFormats:规定了Client和Server两个角色之间要传输的消息格式。7种消息格式:Request、Reply、CancelRequest、LocateRequest、LocateReply、CloseConnection、MessageError、Fragment。GIOPTransportAssumptions:主要规定在任何面向连接的网络传输层上的一些操作规则。如:传输应该是面向连接的;传输应是可靠的;在非正常情况下断开连接时,传输应能提供某种通知机制等;CORBA对互操作性的支持

CORBA的目标是支持多个层次的可互操作性,CORBA规范经过多次改进与发展才达到这一目标。早期的CORBA版本强调不同平台与语言之间的可互操作性,包括了IDL标准以及IDL到程序设计语言的映射。使用同一供应商的ORB产品开发的客户程序与服务程序之间可以交互,但使用不同供应商的ORB产品开发的客户程序与服务程序则未必是可互操作的。CORBA2.0版引入GIOP和IIOP,从而实现了不同供应商的ORB产品之间的可互操作性,所有供应商的ORB产品如果与CORBA2.0兼容则彼此之间可互操作。在服务层次的更广义可互操作性是CORBA规范尚未解决的问题之一。1.6

CORBA规范*

CORBA规范是一组规范的集合,通常包括:

CORBAORB规范(“TheCommonObjectRequestBroker:ArchitectureandSpecification”),主要包括:CORBACORE:包含ObjectOverview、IDL语法和语义、ORB、动态调用(DII和DSI)、接口仓库(InterfaceRepository),对象适配器POA等CORBA最核心的概念。CORBAInteroperability(CORBA互操作性):主要规定不同ORB间的互操作性,包括GIOP、IIOP、Inter-ORBBridge以及特定环境下的DCEESIOP(如CIOP)等。CORBANetworking:规定和非CORBA系统的互联,目前主要规定和Microsoft的COM、OLEAutomation以及DCOM的互联。CORBA语言映射:规定OMGIDL到各种编程语言的映射规则,目前规定了IDL到C、C++、JAVA、SmallTalk、Ada、COBOL等语言的映射。CORBA规范(续)CORBA公共服务规范(CORBAservicesSpecifications):17种服务对象。

CORBA设施规范(CORBAfacilitiesSpecifications):设施(facilities)处于公共服务(Services)更高的一层,他们通常规定某个领域应用的基础框架(通常称垂直公共设施),或所有领域能公用的部分(通常称水平公共设施)。如国际化时间和移动代理CORBA行业规范(CORBAIndustriesSpecifications):一些专用规范,和各行业紧密相关。处于比垂直公共设施更高一层次上。如:商业、金融、制造业、电信、交通、医疗保健等。1.7

CORBA发展历程指CORBAORB规范。经历的主要版本:CORBA1:最早于1990提出,包括了ORB和IDL等CORBA基本概念。CORBA2.0[95-07]:于1994底提出,95年成为规范,主要贡献是IIOP,另外,规定了IDL到C和C++的映射CORBA2.0[96-07]:增加了到smalltalk的映射,增加了到COM和OLEAutomation的映射CORBA2.1[97-08]:增加了到COBOL和Ada的映射。

温馨提示

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

评论

0/150

提交评论