中间件对CORBA的进一步解释.ppt
《中间件对CORBA的进一步解释.ppt》由会员分享,可在线阅读,更多相关《中间件对CORBA的进一步解释.ppt(74页珍藏版)》请在三一办公上搜索。
1、第四章 对CORBA的进一步解释,IDL的特点,面向对象用于定义分布式服务的规格说明定义复杂的数据类型独立于具体的程序设计语言和特定的硬件,网络和操作系统平台,4.2 语法与定义,词法规则模块声明类型的声明常量异常接口值类型,4.2.1 词法规则,类似ANSI C+词法规则和预处理特性关键字是大小写敏感;标识符大小写无关,4.2.2 模块的声明,用于限制标识符的作用域一般将逻辑上密切相关的接口,类型,常量,异常等存放在同一模块中,4.2.3 类型的声明,基本数据类型复合数据类型枚举结构UNION序列和数组,4.2.4 常量的声明,转换为该IDL接口生成的操作接口中的常量声明接口内接口外,4.2
2、.5 异常的声明,引入关键字exception专门定义异常,4.2.6 接口的声明,属性声明参数传递单向传递上下文传递继承机制抽象接口,接口属性,属性不应看作对象的状态数据,是一种特殊的操作(0元操作)可读写属性被映射为java中重载的方法(getter(),setter()IDL接口中的属性被映射为JAVA语言的方法而不是变量,因此IDL接口可直接映射到JAVA的接口而不是类,接口参数传递方向,in:客户到对象实现out:对象实现到客户inout:双向in可直接映射到java方法的参数out,inout无法直接映射,利用持有类解决,接口单向操作,没有返回值的操作可设计为oneway操作对象实
3、现不确认请求是否真的收到,接口上下文表达式,附带于操作中指明客户端那些影响对象请求执行结果的,与发出调用请求的客户环境有关的因素,4.2.7 值类型的声明,作用典型用法声明形式抽象具体动态确定参数传递盒装值类型定制值类型与可截断值类型,值类型作用,在网络中传递对象状态信息,即为了实现按值传递对象,值类型典型用法,按值调用传递参数:创建实参的副本远程操作返回一个对象时创建返回的副本实质:一个对象的目的是为了封装数据,或一个APP需要显式地对某一对象进行复制,该对象应使用IDL值类型而不是接口类型,此时的对象实例称为“值”,值类型抽象值类型,只含操作的基调而没有状态数据和初始化数据,因而不能创建值
4、的实例可继承多个抽象值类型,但不能继承具体值类型,值类型具体值类型,类似IDL结构类型,但允许包含状态数据和初始化数据可继承单个具体值和多个抽象值类型,还可支持单个具体接口和多个抽象接口映射为JAVA的抽象类对接口的支持关系映射为JAVA中类对接口的实现关系,值类型盒装值类型,允许将非值类型的IDL数据类型包装为值类型,值类型定制值类型与可截断值类型,不采用默认的对象打包和解包操作,而是由程序员手工实现由CustomMarshal接口继承的marshal()和unmarshal()方法映射的java抽象类继承CustomValue,而不像具体值类型那样继承StreamableValue不生成映
5、射的read(),write()方法,需自己实现,4.4.1 接口库的定义,接口定义也可由一个专门的服务进程来存储或管理,即把IDL文件中地对象接口定义组织成可运行的接口库服务,由该服提供对象接口的相关信息表达的信息与IDL文件完全相同,更适于动态访问常见用法:查找一个对象引用的所有IDL接口定义客户程序或对象实现利用接口库获取一个编译时未知类型的对象引用的详细接口信息,从而更好地利用DII,DSI,4.4.2 结构,接口库将接口描述看作对象,为其定义了新的接口,无需引入数据库机制层次结构库标识:用于唯一标识一个接口库对象的字符串IDL:一系列/分隔的标识符:版本号IDL:Bank/Accou
6、nt/deposit:1.0,对象适配器,作用:管理服务器端伺服对象,对象标识,CORBA对象以及它们之间关联的主要工具是对象适配器决定在收到一个客户请求时应调用哪一个伺服对象,然后调用该伺服对象上的合适操作POA的可移植性指建立在POA基础上的服务端程序不依赖于特定的ORB产品,从而在不同ORB产品之间是可移植的,可移植对象适配器,POA是对象实现与ORB其他组件之间的中介,它将客户请求传送到伺服对象,按需创建子POA,提供管理伺服对象的策略。对CORBA对象发出的所有调用请求都必须经过POA,即使目标对象是本地的(即伺服对象与客户程序处于同一地址空间),这样POA能够统一地应用POA策略,
7、CORBA对象与伺服对象,CORBA对象与具体的伺服对象是两个不同抽象层次的概念:它们之间的彻底分离使得CORBA独立于任何特定程序设计语言,并为服务端程序的可移植性打下基础。对象适配器(object adapter)是一个重要的ORB组件,它负责将抽象的CORBA对象映射到具体的伺服对象。CORBA对象可看作是一个具有对象标识、对象接口及对象实现的抽象实体。之所以称为抽象的,是因为并没有硬性规定CORBA对象的实现机制。由于独立于程序设计语言和特定ORB产品,一个CORBA对象的引用又称可互操作的对象引用(Interoperable Object Reference)。从客户程序的角度看,I
8、OR中包含了对象的标识、接口类型及其他信息以查找对象实现。,CORBA对象与伺服对象,伺服对象(servant)是指具体程序设计语言的对象或实体,通常存在于一个服务程序进程之中。客户程序通过对象引用发出的请求经过ORB担当中介角色,转换为对特定的伺服对象的调用。在一个CORBA对象的生命期中,它可能与多个伺服对象相关联,因而对该对象的请求可能被发送到不同的伺服对象。对象标识(Object ID)是一个用于在POA中标识一个CORBA对象的字符串。它既可由程序员指派,也可由对象适配器自动分配,这两种方式都要求对象标识在创建它的对象适配器中必须具有唯一性。,CORBA对象与伺服对象,伺服对象通过对
9、象标识关联到CORBA对象。建立一个伺服对象与一个CORBA对象之间关联的过程称为“激活”(activate)或“体现”(incarnate),反之,撤销这种关联的过程称为“冻结”(deactivate)或“净化”(etherealize)。经过激活或体现后,CORBA对象、伺服对象以及对象标识均可称为活动的(active),否则称它们为非活动的(inactive)。不是简单的new持久对象(persistent object)可在创建它的服务程序进程之外存在,瞬时对象(transient object)只能在创建它的服务程序进程中存在。它们都是指一个CORBA对象。,Corba对象伺服对象
10、ID,POA体系结构,POA体系结构,可移植对象适配器,客户请求的传递过程客户程序发出的请求中包含:创建对象引用的POA名字、对象标识及目标机器与端口等信息。如果目标POA不存在,ORB还允许调用适配器激活器创建所需的POA。,一旦请求被ORB传送到正确的机器与端口,监听该端口的POA管理器负责检查对象关键码(object key),对象关键码中含有POA名字与对象标识;POA管理器利用对象关键码将请求传送给正确的POA,POA利用对象关键码确定对象标识,根据POA的策略集直接或间接地利用对象标识将请求传送到正确的伺服对象。,客户请求的传递,客户程序,POA管理器正在监听的端口号,ORB,1.
11、客户程序向ORB发出请求,对象定位信息,请求内容,目标机器、端口,对象关键码,ORB,2.ORB根据其中的目标机器和端口信息将请求发送到指定端口,目标机器、端口,对象关键码,客户请求的传递,POA名字,对象标识,name1POA,3.POA管理器根据请求中的POA名字将请求发送到特定的POA,请求内容,name2POA,POA管理器管理多个POA,.,POA名字,伺服对象1,伺服对象2,伺服对象3,对象标识,请求内容,4.POA根据对象标识将请求传到正确的伺服对象,POA接口,/POA接口 interface POA/POA属性 readonly attribute string the_na
12、me;readonly attribute POA the_parent;readonly attribute POAList the_children;readonly attribute POAManager the_POAManager;attribute AdapterActivator the_activator;/异常定义 exception AdapterAlreadyExists;exception AdapterNonExistent;exception InvalidPolicy unsigned short index;exception NoServant;except
13、ion ObjectAlreadyActive;exception ObjectNotActive;exception ServantAlreadyActive;exception ServantNotActive;exception WrongAdapter;exception WrongPolicy;,POA接口,POA接口,/创建与撤销POA POA create_POA(in string adapter_name,in POAManager a_POAManager,in CORBA:PolicyList policies)raises(AdapterAlreadyExists,In
14、validPolicy);POA find_POA(in string adapter_name,in boolean activate_it)raises(AdapterNonExistent);void destroy(in boolean etherealize_objects,in boolean wait_for_completion);/用于创建策略对象的factory操作 ThreadPolicy create_thread_policy(in ThreadPolicyValue value);LifespanPolicy create_lifespan_policy(in Li
15、fespanPolicyValue value);/.,POA接口,POA接口,/伺服对象管理器的注册 ServantManager get_servant_manager()raises(WrongPolicy);void set_servant_manager(in ServantManager imgr)raises(WrongPolicy);/为USE_DEFAULT_SERVANT策略提供的操作 Servant get_servant()raises(NoServant,WrongPolicy);void set_servant(in Servant p_servant)raises
16、(WrongPolicy);/对象激活与冻结 ObjectId activate_object(in Servant p_servant)raises(ServantAlreadyActive,WrongPolicy);void activate_object_with_id(in ObjectId id,in Servant p_servant)raises(ServantAlreadyActive,ObjectAlreadyActive,WrongPolicy);void deactivate_object(in ObjectId oid)raises(ObjectNotActive,Wr
17、ongPolicy);,POA接口,POA接口,/创建CORBA对象引用的操作 Object create_reference(in CORBA:RepositoryId intf)raises(WrongPolicy);Object create_reference_with_id(in ObjectId oid,in CORBA:RepositoryId intf)raises(WrongPolicy);/对象标识映射操作 ObjectId servant_to_id(in Servant p_servant)raises(ServantNotActive,WrongPolicy);Obj
18、ect servant_to_reference(in Servant p_servant)raises(ServantNotActive,WrongPolicy);Servant reference_to_servant(in Object reference)raises(ObjectNotActive,WrongAdapter,WrongPolicy);ObjectId reference_to_id(in Object reference)raises(WrongAdapter,WrongPolicy);Servant id_to_servant(in ObjectId oid)rai
19、ses(ObjectNotActive,WrongPolicy);Object id_to_reference(in ObjectId oid)raises(ObjectNotActive,WrongPolicy);,POA接口,为什么要有多个POA,如果只有一个的话,也不需要什么管理器了,POA层次一个服务程序进程中可使用多个POA,不同POA以名字区分。这些POA的集合呈现一种层次结构,即每个POA都有一个父POA,所有POA都是根POA的后代。每个ORB在创建时都自动带有一个根POA,可根据需要从根POA创建其他子POA。POA层次为服务程序中的对象标识提供了一个层次化的名字空间。通常每
20、个伺服对象最多仅与一个POA相关联,POA“拥有(包括POA策略)”这些对象并负责删除这些对象,当POA被删除时其中的所有对象以及子POA也将被删除。,POA管理器POA管理器(POA Manager)是一个对象,它将一个或多个POA组织在一起,为其中的POA提供共同的操作,POA管理器的状态代表了它所管理的所有POA的状态。例如开发人员可通过POA管理器提供的操作决定是否接收或丢弃POA的请求,也可利用POA管理器终止POA。,活动对象映射表每一个POA中都有一个活动对象映射表(Active Object Map),表中保存了活动对象的对象标识及与之关联的伺服对象,其作用是将活动对象通过对象
21、标识映射到伺服对象。在一个特定的POA中,对象标识唯一地标识了一个CORBA对象。为将伺服对象转换为一个可供远程调用的CORBA对象,必须建立CORBA对象与伺服对象之间的关联。此外,POA还允许单个伺服对象(即缺省伺服对象)同时与多个CORBA对象相关联,这种特性对开发大规模应用意义重大。,伺服对象管理器伺服对象管理器(servant manager)是程序员自己提供的代码,用于取代POA活动对象映射表的功能。如果应用程序需要以一种更复杂的方案将对象标识映射到伺服对象,这时开发人员可设计专用的伺服对象管理器。伺服对象管理器负责决定一个CORBA对象是否存在,然后查找伺服对象并将伺服对象指派给
22、CORBA对象。为满足不同的应用需要,开发人员可设计多个伺服对象管理器。有两类伺服对象管理器可供选择:伺服对象激活器和伺服对象定位器,开发人员可利用POA策略决定选用哪一种类型。,什么是POA策略?,POA策略是一个对象,负责控制相关POA的行为及这些POA所管理的对象,使用POA前应仔细考虑应用程序所需的策略集。POA策略可为不同的应用程序设计目标而配置不同的POA。目前CORBA规范定义了7种标准的POA策略,不同的ORB产品从可伸缩性或可靠性等因素考虑引入一些新的POA策略。,选用POA策略,选用POA策略时应注意某些策略值之间存在依赖关系(选用了一种,隐含的选用另一种)。线程策略该策略
23、指定POA使用的线程模型,它有两种取值:ORB_CTRL_MODEL(缺省值):表示由ORB负责将对POA的请求指派到线程。在多线程环境中,并发请求可以用多线程传送。SINGLE_THREAD_MODEL:这时只有一个线程,POA顺序地处理请求。,选用POA策略,生命期策略该策略指定POA中对象实现的使用期限,它可有以下值:TRANSIENT(缺省值):由POA创建的对象引用是瞬时的,这些对象在创建它的POA之外不可存在。一旦POA被冻结为非活动状态,调用该POA创建的任何对象引用将引发OBJECT_NOT_EXIST异常。对话型对象通常设计为瞬时对象。PERSISTENT:由POA创建的持久
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中间件 CORBA 进一步 解释
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5176782.html