高级软件工程(IR、POA).ppt

上传人:za****8 文档编号:6318681 上传时间:2020-02-22 格式:PPT 页数:58 大小:438.50KB
返回 下载 相关 举报
高级软件工程(IR、POA).ppt_第1页
第1页 / 共58页
高级软件工程(IR、POA).ppt_第2页
第2页 / 共58页
高级软件工程(IR、POA).ppt_第3页
第3页 / 共58页
点击查看更多>>
资源描述
1 6 接口池 InterfaceRepository IR 接口池 是ORB的构件提供一致的接口定义存储机制管理和提供对OMGIDL所指定对象定义集合的访问 2 内容概述IR的范围实现相关性概念与原理IR接口 接口池 3 1 概述 ORB提供对对象集合的分布式访问方法是使用OMGIDL中指定的对象公共定义接口接口池为相关对象的接口定义集合提供存储 分布和管理ORB可以使用两种形式的对象定义 通过将信息从过程上合并到stub程序中例如 作为将C语言子程序映射到通讯协议中的代码通过动态可访问的接口池访问到例如 作为通过特定于OMGIDL接口访问的 接口对象 接口池 4 ORB可以使用在接口池中维护的对象定义解释和处理请求中提供的值 提供请求签名的类型检查 请求是否通过DII或stub发出的 帮助检查接口继承关系的正确性帮助提供不同ORB实现之间的互操作性由于接口池中所维护对象定义的接口是公共的因此客户和服务也可以使用Repository中维护的信息例如 Repository可用于 管理接口定义的安装和分布提供CASE环境的构件 例如 接口浏览器 提供语言绑定的接口信息 例如编译器 提供最终用户环境的构件 例如 菜单栏构造器 接口池 5 2 IR的范围 接口对象作为一组对象在接口池中维护可以通过一组特定于OMGIDL接口定义访问它们接口定义包含它支持的操作描述 包括参数类型 例外和它可以使用的环境信息此外 接口池还存储常量值它可以用在其它接口定义中或者仅仅为方便程序员而定义接口池还存储typecode 这是以结构化术语描述类型的值 接口池 6 接口池使用模块作为组织接口的方式并且根据名称查找这些组织模块可以包含常量 类型定义 例外情况 接口定义和其它模块例如 模块可以对应于OMGIDL定义的组织它们也可以用于代表为管理和其它用途定义的组织接口池是代表其中信息的一组对象它们是在该透明对象结构上运作的操作具体实现可以选择这些对象是否永久存在或者在repository上的操作引用时创建也可以有有效提取信息的操作获得描述整个接口或整个操作的信息块 接口池 7 ORB可以访问多个接口池原因 两个ORB对接口池的实现有不同的要求对象实现 例如OODB 希望提供它自己的类型信息或者它希望将不同的附加信息存储在不同的repository中使用typecode和repository标识符的目的是允许不同的repository保持它们自己的信息一致 接口池 8 接口池 9 接口池信息的一个关键用途是将ORB连接在一起当对象在请求中从一个ORB传到另一个ORB时可能有必要创建新对象代表接收ORB中的传送对象这可能需要在接收ORB的接口池中找到接口信息通过从发送ORB的repository中获取repository标识符可以在接收ORB的repository中查找接口为成功操作 该对象的接口必须同时安装在两个repository中并且有相同的repository标识符 接口池 10 3 实现相关性 接口池中的实现需要某些形式的永久对象存储通常永久对象存储类型用于决定接口定义如何分布和 或在网络域中复制如果使用文件系统提供对象存储那么在单个机器上可能只有一组接口的唯一副本如果使用OODB提供对象存储那么可以维护接口定义的多个副本每个副本都分布在几台机器上以提供高可用性和负载平衡 接口池 11 接口池包含允许程序在运行时确定和处理类型信息的信息程序可以尝试在任何时候通过对象引用上的get interface访问接口池一旦信息已经安装在repository中那么程序 stub和对象可以使用它对象repository的更新必须小心以避免破坏环境在更新接口池时某些接口池可能使用ObjectServices定义的事务和并发控制例如 支持TransactionService的repository将继承Repository接口它包括更新操作Transaction接口它包含事务管理操作 接口池 12 4 接口池接口元素 名称和标识类型和类型码接口对象IR的结构与导航 接口池 13 名称和标识简单名称在接口池中没有必要是唯一的它们通常与显式或隐式的模块有关在该环境中 接口定义通常被认为是显式模块限定范围的名称唯一地标识接口池中的模块 接口 常量 类型定义 例外情况 属性和操作repository标识符全局地表示模块 接口 常量 类型定义 例外情况 属性和操作它们可以用于同步多个ORB和Repository上的定义 接口池 14 类型和类型码 TypeCode 类型码是标识调用参数类型与属性类型的值可以确定类型的完整结构可以从IR或IDL编译器中获得类型码具有多种用途 在DII中 被用于指示实际参数的类型由IR使用 表示作为许多OMGIDL声明中一部分的类型规约它们对于any类型的语义极为关键抽象地讲 类型码包含一个 kind 域以及适于该Kind的参数集合例如 描述long的类型码具有kindtk long 无参数描述sequence的类型码具有kindtk sequence包含两个参数 10andboolean 接口池 15 接口池 16 接口池 17 接口对象 接口池管理的关于每个接口的信息都以下面类型的接口池对象集合的形式维护Repository 接口池名空间中最顶层的模块 它包括常量 类型定义 例外 接口 或者值类型定义以及模块ModuleDef 接口与值类型的的逻辑组 它包括常量 类型定义 例外 接口 或者值类型定义以及其它模块InterfaceDef 接口定义 它包括常量 类型 例外 操作以及属性 ValueDef 值类型定义 它包含常量表 类型表 例外表 操作表 属性表及成员 接口池 18 ValueBoxDef boxed值类型定义ValueMemberDef 值类型成员定义AttributeDef 接口或值类型属性的定义OperationDef 接口或值类型操作的定义 包含参数列表与例外TypedefDef 基本接口 非接口或值类型的namedtype定义ConstantDef 常量定义ExceptionDef 操作所引发例外的定义 接口池 19 每个接口池对象的接口规范列出了由该对象维持的属性这些属性多数与OMGIDL语句直接对应一个实现可以选择维持附加的属性以便于管理池或者记录关于接口的附加信息扩展IR接口的实现应当采用导出新接口而不是修改标准接口实现CORBA规范为接口池对象定义了操作的一个最小集IR的一个实现可能提供的附加操作可以包含提供实体版本化的操作以及规范的反编译 接口池 20 IR的结构与导航 接口池中的定义是按照接口池对象集合的形式进行组织的这些对象的组织方式与定义的组织方式相同 一些对象 定义 包含其它对象 接口池 21 接口池 22 在接口池中定位一个接口的方式有三种 1 从ORB直接获取一个InterfaceDef对象2 利用一个名序列在模块空间中航行3 定位与一个特定池表示对应的InterfaceDef对象如果一个对象的类型在编译时刻尚未确定则适于直接获取一个InterfaceDef对象通过利用对象的引用调用get interface操作可以在接口池中获得关于该对象的信息该信息可以被用于在该对象上执行操作 接口池 23 当需要一个特定命名的接口时则适于在模块名空间中航行从接口池的根模块开始可以根据名字获得入口当在一个接口池中查找一个对应的入口时则适于通过ID定位InterfaceDef对象通过在两个池中使用相同的标识可以在一个池中获得一个接口的接口标识然后从另一个池获得那个接口的信息 那个池可能近一些或者包含关于接口的附加信息 接口池 24 5 IR接口一组公共的操作被用于在IR中定位对象这些操作在接口IRObject Container andContained等中被定义所有的IR对象继承IRObject接口它提供了一个区别对象具体类型的操作属于容器的对象从Container接口中继承navigation操作被其它对象包容的对象从Contained接口中继承navigation操作 接口池 25 IDLType接口被所有标识IDL类型的IR对象所继承包括interfaces typedefs 及anonymoustypesTypedefDef接口被所有namednon interfacetypes对象多继承基本接口IRObjectContainedContainerIDLType及TypedefDef不是暂时性的IR中的所有字符串数据被按照ISO8859 1codedcharacterset中的定义编码 接口池 26 接口池 27 7 POA 设计目标模型元素模型体系结构POA创建引用创建对象活动状态请求处理隐式激活多线程DSI位置透明性POA接口 POA 28 1 POA的设计目标允许编程人员构造可以在不同ORB产品上移植的对象实现提供对永久对象的支持允许编程人员构造的对象实现存活时间 从持有对象引用的客户角度 跨越多个服务器存活时间提供对透明对象激活的支持允许单个的服务同时支持多个对象标识允许多个不同的POA实例存在于一个服务器中提供对transient对象的支持 花费最小的编程代价与负载 POA 29 提供对隐式服务激活的支持 对象标识由POA分配允许对象实现最大可能地为对象行为负责特别地 一个实现可以控制对象的行为通过建立定义对象标识的数据决定对象标识与对象状态之间的关系管理对象状态的存储与检索提供响应请求时将被执行的代码以及在任意时刻决定对象是否存在避免请求ORB维护描述独立对象的永久状态它们的标识 它们的状态存在何处某些标识值是否以前已经被使用过一个对象是否已经被彻底删除等等提供一个扩展机制用于将策略信息与POA中实现的对象进行关联 POA 30 2 POA的模型元素 客户是一个计算语境它通过对一个对象的引用向其提出请求服务器是一个计算语境对象的实现体存在于其中一般情况下 一个服务器对应于一个进程对象是一个具有标识 接口 及实现的程序体从一个客户的视角 对象的标识封装在对象的引用中POA模型定义了从服务器视角看对象的标识它由对象实现通过POA接口显式管理 POA 31 Servant服务体是实现一个或多个对象请求的编程语言对象或实体服务体一般存在于一个服务器进程语境中向一个对象应用提出的请求由ORB中转并转变为向一个特定服务体的调用在一个对象生命时间内 它可能与多个服务体相关所谓相关是指向它的请求将以服务体为目标ObjectId一个对象标识是一个值 由POA及用户提供的实现使用以标识一个特定的抽象CORBA对象对象标识值对于客户是隐藏的 由引用封装对象标识没有标准的形式它们由POA作为未解释的8进制位序列管理 POA 32 ObjectReference一个对象引用封装了一个对象标识及一个POA标识在一个特定ORB实现中的一个具体引用包含更多的信息例如服务器位置被考虑的POA等 它可能包含POA的全名及从根部到特定POA的所有POA的名字 引用也可能不包含对象标识但却包含由ORB管理的压缩过的值它们可以被影射为对象标识 POA 33 POA可移植对象适配器是在服务器语境中的一个可标识实体每个POA为对象标识提供了一个名空间并为其它POA nestedorchild 提供一个名空间与POA相关的策略描述了在那个POA中对象实现的特征NestedPOAs为一个服务器中的对象形成了一个层次式的名空间Policy策略是一个应用程序的与POA相关的对象以指定在那个POA中实现的对象共享的特征本规范定义一些策略 以控制POA的线程模型以及一些其它与对象管理相关的选项 POA 34 POAManagerPOA管理器是一个封装一个或多个POA处理状态的对象利用POA管理器上的操作开发者可以使向相关POA发出的请求被排队或丢弃开发者也可以利用POA管理器去活POAServentManager服务体管理器是一个可以与POA关联的对象服务体管理器负责管理一个对象与特定服务体的关联并负责决定一个对象是否存在ORB可以调用服务体管理器上的操作 以激活或去活服务体 POA 35 AdaptorActivator一个适配器激活器是可以与POA关联的对象当一个请求被从目前不存在的子POA收到时ORB将激活适配器激活器上的一个操作适配器激活器可以根据命令创建所需的POA POA 36 ORB是对客户与服务器皆可见的一个抽象POA是对服务器可见的对象用户提供的实现被注册在POA中客户拥有引用并向它发出请求ORBPOA与实现共同决定操作需要调用哪个服务体并执行调用 3 模型体系结构 POA 37 POA 38 如果POA支持RETAIN策略则它维护一张表 map 活动对象表 ActiveObjectMap AOP将对象标识与活动服务体关联起来每个关联组成了一个活动对象如果POA包含USE DEFAULT SERVANT策略则一个缺省的服务体被注册到POA中相反 如果POA包含USE SERVANT MANAGER策略则一个用户编写的服务体管理器被注册到POA中如果活动对象表未被使用或者一个请求对应的对象未出现在活动对象表中POA或者使用缺省的服务器执行请求或者它调用服务体管理器获取一个服务体来执行请求如果RETAIN策略被使用则由服务体管理器返回的服务体由活动对象表保持否则 服务体仅被用于处理一个请求 POA 39 POA 40 4 创建POA 为实现一个需要POA的对象需要服务器应用程序获取一个POA对象一个特殊的POA对象 根 root POA 由ORB进行管理并在初始对象名 RootPOA 下利用ORB初始化接口向应用程序提供应用程序开发者可以利用根POA创建对象开发者可以创建新POA 以允许开发者为新POA声明特定的策略并提供一个不同的适配器激活器即服务体管理器也允许开发者划分对象的名空间因为对象标识的解释与POA相关开发者可以独立地为多个对象集合控制请求处理 POA 41 一个POA是利用父POA上的create POA操作作为一个已经存在POA的子POA创建的POA对象不是永久性的ORB不保存POA的任何状态服务器程序负责创建并初始化合适的POA对象创建适宜的POA对象对于跨越多个服务器生命时间的永久对象特别重要为支持在以前的服务器进程中创建的一个对象引用应用程序必须重新创建出创建对象引用的那个POA 以及祖先POA每个被重新创建的POA必须与以前POA的名字 策略相同 POA 42 5 引用创建 对象引用封装了对象标识信息以及ORB需要的信息用以标识并定位与对象关联的服务器以及POA引用按照下列方式被创建 服务器应用程序创建引用调用POA的create reference与create reference with id操作从与POA相关的信息中 或者从传给操作的参数中在创建对象引用的过程中 它们将抽象的对象活化 但它不将其与一个活动的服务体关联 POA 43 服务器应用程序显式地激活一个服务体利用activate object或activate object with id操作将其与一个对象标识关联一旦一个服务体被激活服务器应用程序可以利用servant to reference或id to reference操作将服务体影射为对应的引用 POA 44 服务器应用程序可以使一个服务体隐式地激活自身这种情况只有在POA利用IMPLICIT ACTIVATION策略被创建的前提下才会发生如果尝试获取一个与非激活服务体对应的对象引用POA可能自动分配一个产生的唯一的ObjectId给服务体并激活结果对象非激活服务体的引用可以通过调用POA servant to reference而被获得或者通过在允许这种转换的编程语言中执行从服务体到一个引用类型的隐式或显式转换 POA 45 6 对象活动状态 CORBA对象可以与一个活动服务体关联如果POA具有RETAIN策略则服务体与它关联的对象标识被加入POA的活动对象表服务器应用程序自身显式激活单独的对象 通过activate object或者activate object with id操作 服务器应用程序指导POA根据命令激活对象 通过使POA激活一个用户提供的服务体管理者 在某些环境下POA可以隐式地激活一个对象当服务器应用程序试图为一个尚未激活的服务体 即 未与一个对象标识关联 获取一个引用 POA 46 如果USE DEFAULT SERVANT策略也起作用服务器应用程序指导POA通过调用一个单个的服务体来激活未知的对象如果POA拥有NON RETAIN策略对于每个请求POA可以使用一个缺省服务体或者一个服务体管理者定位一个活动服务体从POA的角度看服务体仅在一个请求过程中是活动的POA不将servant object关联加入活动对象表 POA 47 一个请求必须能够承载 conveying 目标对象的对象标识以及创建目标对象引用的POA标识当一个客户发出一个请求时ORB首先定位正确的服务器 也许在需要时启动它 然后在那个服务器中定位正确的POA如果POA不存在于服务器进程中应用程序有机会通过使用适配器激活器重新创建所需的POA一旦ORB已经定位了POA它将请求传送给那个POA对那个请求的进一步处理取决于与那个POA关联的策略以及对象的目前活动状态 POA 7 请求处理 48 如果POA有RETAIN策略POA将在活动对象表中查找是否有与来自请求的对象标识值关联的服务体如果这样的一个服务体存在则POA调用服务体上的相应方法如果POA有NON RETAIN策略或者有RETAIN策略但未在活动对象表中发现服务体POA进行下面的动作 如果POA有USE DEFAULT SERVANT策略一个缺省的服务器已经与该POA关联则POA将调用该服务体上的相应方法如果没有服务体与POA关联POA引发OBJ ADAPTER系统例外 POA 49 如果POA有USE SERVANT MANAGER策略且一个服务器管理者已经与该POA关联则POA将调用它的incarnate或preinvoke以发现可能处理请求的一个服务体如果没有与POA关联的服务体管理器POA引发OBJ ADAPTER系统例外如果USE OBJECT MAP ONLY策略起作用POA引发OBJECT NOT EXIST系统例外 POA 50 一个POA在创建时可以附带的一个策略指示它的对象可以被隐式地激活一个非活动的服务体可能通过某个操作被隐式地激活该操作逻辑上需要一个被分配给那个服务体的对象标识一个对象的隐式激活涉及分配一个系统产生的对象标识以及在活动对象表中注册服务体与对象标识与隐式激活的对象关联的接口由服务体决定 POA 8 隐式激活 51 支持隐式激活的操作包括 POA servant to reference操作带有服务体参数 并返回一个引用POA servant to id操作带有服务体参数 并返回一个对象标识由影射语言支持的操作用来为一个服务体获取一个对象引用或者对象标识例如 C 中的 this 服务体成员函数为服务体返回一个对象引用由影射语言支持的隐式转换将服务体转换为一个对象引用或者一个对象标识后两类操作依赖于影射语言 POA 52 9 多线程 为了允许开发出使用线程的服务器当在一个多线程环境中使用时必须指定POA的行为以及相关的接口指定这种行为 既不需要ORB必须在一个线程环境中被支持也不需要ORB在处理请求时必须使用线程仅需要 如果一个ORB确实提供对多线程的支持那么这些行为将被ORB支持这允许一个编程人员以在多个ORB间可移植的方式充分利用支持线程的多个ORBsPOA的处理受ORB中可用的与线程有关的调用的影响 work pending perform work run 及shutdown POA 53 POA线程模型当与多线程ORB实现一起被使用时POA支持两种线程模型 ORBcontrolled与singlethreadbehavior这两种模型可以被一起或者单独使用每种模型都可以应用于单线程ORB环境如果创建POA的create POA操作的策略参数中包含一个ThreadPolicy对象时则与一个POA关联的线程模型被指示一旦一个POA被根据一个模型而创建 它不能被变为另一个服务器中所有对POA的使用必须和与这个POA关联的线程一致 POA 54 使用单线程模型向单线程POA的请求被顺序处理使用ORB控制的模型ORB负责一个或多个POA所使用线程的创建 管理及解构使用多线程时的控制ORB与POA不涉及在一个POA内跨线程分派请求的工作因此 服务器程序员必须安排在那些线程中对对象的顺序访问可能同时存在对相同对象的多个活动请求被多线程之间进行分派编程人员必须清楚这种可能性并用心编码 POA 55 POA的设计使得编程人员能够将服务体连接至 特定于类型的skeletons动态skeletons作为特定于skeleton类成员的服务体被认为是特定于类型的服务体连接至动态skeleton的服务体被用于实现DSI并被认为是DSI服务体两个支持同一接口的CORBA对象可能一个由DSI服务体体现而另一个由特定于类型的服务体体现更进一步地 一个CORBA对象可能仅在某些时候由一个DSI服务体体现而在其它时候由静态服务体体现 10 DSI POA 56 POA为那些利用POA实现的对象提供位置透明性支持例如 与来自远地客户的请求类似 来自本地客户的请求在对象非活动时可能导致 对象被激活非确定性地阻塞 如果目标对象的POA处于holding状态被拒绝 如果目标对象的POA处于被丢弃或者非活动状态被发送给一个线程透明的对象实现或者被发送给一个不同的对象 POA 11 位置透明性 57 与POA相关的接口的定义在PortableServer中 POAPOAManagerServantManagerServantActivatorServantLocatorAdapterActivatorThreadPolicyLifespanPolicyIdUniquenessPolicyIdAssignmentPolicyImplicitActivationPolicyServantRetentionPolicyRequestProcessingPolicyCurrent POA POA接口 58 RootPOA的策略
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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