为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

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

2010-10-21 50页 ppt 434KB 27阅读

用户头像

is_082674

暂无简介

举报
高级软件工程04(IR、POA.)nullnull6、接口池(Interface Repository:IR)接口池是ORB的构件 提供一致的接口定义存储机制 管理和提供对OMG IDL所指定对象定义集合的访问null 内 容 概述 IR的范围 实现相关性 概念与原理 IR接口接口池null(1)概述ORB提供对对象集合的分布式访问 方法是使用OMG IDL中指定的对象公共定义接口 接口池为相关对象的接口定义集合 提供存储、分布和管理 ORB可以使用两种形式的对象定义: 通过将信息从过程上合并到stub程序中 ...
高级软件工程04(IR、POA.)
nullnull6、接口池(Interface Repository:IR)接口池是ORB的构件 提供一致的接口定义存储机制 管理和提供对OMG IDL所指定对象定义集合的访问null 内 容 概述 IR的范围 实现相关性 概念与原理 IR接口接口池null(1)概述ORB提供对对象集合的分布式访问 方法是使用OMG IDL中指定的对象公共定义接口 接口池为相关对象的接口定义集合 提供存储、分布和管理 ORB可以使用两种形式的对象定义: 通过将信息从过程上合并到stub程序中 例如,作为将C语言子程序映射到通讯中的代码 通过动态可访问的接口池访问到 例如,作为通过特定于OMG IDL接口访问的“接口对象”接口池nullORB可以使用在接口池中维护的对象定义 解释和处理请求中提供的值: 提供请求签名的类型检查(请求是否通过DII或stub发出的) 帮助检查接口继承关系的正确性 帮助提供不同ORB实现之间的互操作性 由于接口池中所维护对象定义的接口是公共的 因此客户和服务也可以使用Repository中维护的信息 例如,Repository可用于: 管理接口定义的安装和分布 提供CASE环境的构件(例如,接口浏览器) 提供语言绑定的接口信息(例如编译器) 提供最终用户环境的构件(例如,菜单栏构造器)接口池null(2)IR的范围 接口对象作为一组对象在接口池中维护 可以通过一组特定于OMG IDL接口定义访问它们 接口定义包含它支持的操作描述, 包括参数类型、例外和它可以使用的环境信息 此外,接口池还存储常量值 它可以用在其它接口定义中或者仅仅为方便程序员而定义 接口池还存储 typecode,这是以结构化术语描述类型的值接口池null 接口池使用模块作为组织接口的方式 并且根据名称查找这些组织 模块可以包含常量、类型定义、例外情况、接口定义和其它模块 例如,模块可以对应于OMG IDL定义的组织 它们也可以用于代表为管理和其它用途定义的组织 接口池是代表其中信息的一组对象 它们是在该透明对象结构上运作的操作 具体实现可以选择这些对象 是否永久存在 或者在repository上的操作引用时创建 也可以有有效提取信息的操作 获得描述整个接口或整个操作的信息块接口池nullORB可以访问多个接口池 原因: 两个ORB对接口池的实现有不同的要求 对象实现(例如OODB)希望提供它自己的类型信息 或者它希望将不同的附加信息 存储在不同的repository中 使用typecode和repository标识符的目的是 允许不同的repository保持它们自己的信息一致接口池null接口池null接口池信息的一个关键用途是 将ORB连接在一起 当对象在请求中从一个ORB传到另一个ORB时 可能有必要创建新对象代表接收ORB中的传送对象 这可能需要在接收ORB的接口池中找到接口信息 通过从发送ORB的repository中获取repository标识符 可以在接收ORB的repository中查找接口 为成功操作, 该对象的接口必须 同时安装在两个repository中并且有相同的repository标识符 接口池null(3)实现相关性 接口池中的实现需要某些形式的永久对象存储 通常永久对象存储类型用于 决定接口定义如何分布和/或在网络域中复制 如果使用文件系统提供对象存储 那么在单个机器上可能只有一组接口的唯一副本 如果使用OODB提供对象存储 那么可以维护接口定义的多个副本 每个副本都分布在几台机器上 以提供高可用性和负载平衡接口池null接口池包含 允许程序在运行时确定和处理类型信息的信息 程序可以尝试在任何时候通过对象引用上的 get_interface访问接口池 一旦信息已经安装在repository中 那么程序、stub和对象可以使用它 对象repository的更新必须小心 以避免破坏环境 在更新接口池时 某些接口池可能使用Object Services定义的事务和并发控制 例如,支持Transaction Service的repository将继承 Repository接口 它包括更新操作 Transaction接口 它包含事务管理操作接口池null(4)接口池接口元素 名称和标识 类型和类型码 接口对象 IR的结构与导航接口池null名称和标识 简单名称在接口池中没有必要是唯一的 它们通常与显式或隐式的模块有关 在该环境中,接口定义通常被认为是显式模块 限定范围的名称唯一地标识接口池中的 模块、接口、常量、类型定义、例外情况、属性和操作 repository标识符全局地表示 模块、接口、常量、类型定义、例外情况、属性和操作 它们可以用于同步多个ORB和Repository上的定义接口池null 类型和类型码(TypeCode) 类型码 是标识调用参数类型与属性类型的值 可以确定类型的完整结构 可以从IR或IDL编译器中获得 类型码具有多种用途: 在DII中,被用于指示实际参数的类型 由IR使用,表示作为许多 OMG IDL 声明中一部分的类型规约 它们对于any 类型的语义极为关键 抽象地讲,类型码 包含 一个 “kind”域 以及 适于该 Kind 的参数集合 例如,描述 long 的 类型码具有kind tk_long ,无参数 描述 sequence 的类型码具有 kind tk_sequence 包含两个参数: 10 and boolean接口池null接口池null接口池null接口对象接口池管理的关于每个接口的信息 都以下面类型的接口池对象集合的形式维护 Repository: 接口池名空间中最顶层的模块; 它包括常量、类型定义、例外、接口, 或者值类型定义以及模块 ModuleDef: 接口与值类型的的逻辑组; 它包括常量、类型定义、例外、接口, 或者值类型定义以及其它模块 InterfaceDef: 接口定义; 它包括常量、类型、例外、操作以及属性。 ValueDef: 值类型定义, 它包含常量表、类型表、例外表、操作表、属性表及成员接口池nullValueBoxDef: boxed值类型定义 ValueMemberDef:值类型成员定义 AttributeDef: 接口或值类型属性的定义 OperationDef: 接口或值类型操作的定义;包含参数列表与例外 TypedefDef: 基本接口,非接口或值类型的named type定义 ConstantDef:常量定义 ExceptionDef: 操作所引发例外的定义接口池null每个接口池对象的接口规范列出了由该对象维持的属性 这些属性多数与OMG IDL语句直接对应 一个实现可以 选择维持附加的属性以便于管理池 或者关于接口的附加信息 扩展IR接口的实现应当采用 导出新接口 而不是修改接口 实现 CORBA规范为接口池对象定义了操作的一个最小集 IR的一个实现可能提供的附加操作 可以包含提供实体版本化的操作 以及规范的反编译接口池null IR的结构与导航 接口池中的定义是按照接口池对象集合的形式进行组织的 这些对象的组织方式与定义的组织方式相同: 一些对象(定义)包含其它对象接口池null接口池null在接口池中定位一个接口的方式有三种: 1.从ORB直接获取一个 InterfaceDef 对象 2.利用一个名序列在模块空间中航行 3.定位与一个特定池表示对应的InterfaceDef 对象 如果一个对象的类型在编译时刻尚未确定 则适于直接获取一个InterfaceDef 对象 通过利用对象的引用调用get_interface 操作 可以在接口池中获得关于该对象的信息 该信息可以被用于在该对象上执行操作接口池null当需要一个特定命名的接口时 则适于在模块名空间中航行 从接口池的根模块开始 可以根据名字获得入口 当在一个接口池中查找一个对应的入口时 则适于通过ID定位InterfaceDef 对象 通过在两个池中使用相同的标识 可以在一个池中获得一个接口的接口标识 然后从另一个池获得那个接口的信息 (那个池可能近一些 或者包含关于接口的附加信息)接口池null(5)IR接口 一组公共的操作被用于在IR中定位对象 这些操作在接口IRObject, Container, and Contained等中被定义 所有的IR对象继承IRObject接口 它提供了一个区别对象具体类型的操作 属于容器的对象从Container接口中继承navigation操作 被其它对象包容的对象从Contained接口中继承navigation操作接口池nullIDLType 接口被所有标识IDL类型的IR对象所继承 包括interfaces, typedefs, 及 anonymous types TypedefDef 接口被所有named non-interface types对象多继承 基本接口 IRObject Contained Container IDLType 及 TypedefDef 不是暂时性的 IR中的所有字符串数据被按照 ISO 8859-1 coded character set中的定义编码 接口池null接口池null7、POA设计目标 模型元素 模型体系结构 POA创建 引用创建 对象活动状态 请求处理 隐式激活 多线程 DSI 位置透明性 POA接口POAnull (1)POA的设计目标 允许编程人员构造 可以在不同ORB产品上移植的对象实现 提供对永久对象的支持 允许编程人员构造的对象实现 存活时间(从持有对象引用的客户角度) 跨越多个服务器存活时间 提供对透明对象激活的支持 允许单个的服务同时支持多个对象标识 允许多个不同的POA实例存在于一个服务器中 提供对transient对象的支持,花费最小的编程代价与负载POAnull提供对隐式服务激活的支持,对象标识由POA分配 允许对象实现最大可能地为对象行为负责 特别地,一个实现可以控制对象的行为 通过 建立定义对象标识的数据 决定对象标识与对象状态之间的关系 管理对象状态的存储与检索 提供响应请求时将被执行的代码 以及在任意时刻决定对象是否存在 避免请求ORB维护描述独立对象的永久状态 它们的 标识,它们的状态存在何处 某些标识值是否以前已经被使用过 一个对象是否已经被彻底删除 等等 提供一个扩展机制 用于将策略信息与POA中实现的对象进行关联POAnull(2)POA的模型元素客户 是一个计算语境 它通过对一个对象的引用向其提出请求 服务器 是一个计算语境 对象的实现体存在于其中 一般情况下,一个服务器对应于一个进程 对象 是一个具有标识、接口、及实现的程序体 从一个客户的视角,对象的标识封装在对象的引用中 POA模型定义了从服务器视角看对象的标识 它由对象实现通过POA接口显式管理POAnullServant 服务体是实现一个或多个对象请求的编程语言对象或实体 服务体一般存在于一个服务器进程语境中 向一个对象应用提出的请求由ORB中转 并转变为向一个特定服务体的调用 在一个对象生命时间内,它可能与多个服务体相关 所谓相关是指向它的请求将以服务体为目标 Object Id 一个对象标识是一个值,由POA及用户提供的实现使用 以标识一个特定的抽象CORBA对象 对象标识值对于客户是隐藏的,由引用封装 对象标识没有标准的形式 它们由POA作为未解释的8进制位序列管理POAnullObject Reference 一个对象引用封装了一个对象标识及一个POA标识 在一个特定ORB实现中的一个具体引用包含更多的信息 例如 服务器位置 被考虑的POA等 (它可能包含POA的全名 及从根部到特定POA的所有POA的名字) 引用也可能不包含对象标识 但却包含由ORB管理的压缩过的值 它们可以被影射为对象标识POAnullPOA 可移植对象适配器是在服务器语境中的一个可标识实体 每个POA为对象标识提供了一个名空间 并为其它POA(nested or child)提供一个名空间 与POA相关的策略描述了在那个POA中对象实现的特征 Nested POAs为一个服务器中的对象形成了一个层次式的名空间 Policy 策略是一个应用程序的与POA相关的对象 以指定在那个POA中实现的对象共享的特征 本规范定义一些策略,以控制POA的线程模型 以及一些其它与对象管理相关的选项POAnullPOA Manager POA管理器是一个封装一个或多个POA处理状态的对象 利用POA管理器上的操作 开发者可以使向相关POA发出的请求被排队或丢弃 开发者也可以利用POA管理器去活POA Servent Manager 服务体管理器是一个可以与POA关联的对象 服务体管理器 负责管理一个对象与特定服务体的关联 并负责决定一个对象是否存在 ORB可以调用服务体管理器上的操作,以激活或去活服务体POAnullAdaptor Activator 一个适配器激活器是可以与POA关联的对象 当一个请求被从目前不存在的子POA收到时 ORB将激活适配器激活器上的一个操作 适配器激活器可以根据命令创建所需的POA POAnullORB是对客户与服务器皆可见的一个抽象 POA是对服务器可见的对象 用户提供的实现被注册在POA中 客户 拥有引用 并向它发出请求 ORB POA 与 实现 共同决定 操作需要调用哪个服务体 并执行调用(3)模型体系结构POAnullPOAnull 如果 POA 支持 RETAIN 策略 则它维护一张表(map): 活动对象表(Active Object Map) AOP将对象标识与活动服务体关联起来 每个关联组成了一个活动对象 如果POA包含USE_DEFAULT_SERVANT 策略 则一个缺省的服务体被注册到POA中 相反,如果POA 包含USE_SERVANT_MANAGER 策略 则一个用户编写的服务体管理器被注册到POA中 如果活动对象表未被使用 或者一个请求对应的对象未出现在活动对象表中 POA或者使用缺省的服务器执行请求 或者它调用服务体管理器获取一个服务体来执行请求 如果 RETAIN 策略被使用 则由服务体管理器返回的服务体由活动对象表保持 否则,服务体仅被用于处理一个请求POAnullPOAnull(4)创建POA 为实现一个需要POA的对象 需要服务器应用程序获取一个POA对象 一个特殊的POA对象,根(root)POA,由ORB 进行管理 并在初始对象名“RootPOA”下 利用ORB初始化接口向应用程序提供 应用程序开发者可以利用根POA创建对象 开发者可以创建新POA: 以允许开发者为新POA声明特定的策略 并提供一个不同的适配器激活器即服务体管理器 也允许开发者划分对象的名空间 因为对象标识的解释与POA相关 开发者可以独立地为多个对象集合控制请求处理POAnull一个 POA 是 利用父POA上的create_POA 操作 作为一个已经存在POA的子POA创建的 POA对象不是永久性的 ORB不保存POA的任何状态 服务器程序负责创建并初始化合适的POA对象 创建适宜的POA对象 对于跨越多个服务器生命时间的永久对象特别重要 为支持在以前的服务器进程中创建的一个对象引用 应用程序必须重新创建出 创建对象引用的那个POA,以及祖先POA 每个被重新创建的POA必须与以前POA的名字、策略相同POAnull(5)引用创建对象引用封装了 对象标识信息 以及ORB需要的信息 用以标识并定位与对象关联的服务器以及POA 引用按照下列方式被创建: 服务器应用程序创建引用 调用POA的 create_reference 与 create_reference_with_id 操作 从与POA相关的信息中,或者从传给操作的参数中 在创建对象引用的过程中,它们将抽象的对象活化, 但它不将其与一个活动的服务体关联POAnull服务器应用程序显式地激活一个服务体 利用 activate_object 或 activate_object_with_id 操作 将其与一个对象标识关联 一旦一个服务体被激活 服务器应用程序可以 利用 servant_to_reference 或 id_to_reference 操作 将服务体影射为对应的引用 POAnull服务器应用程序可以使一个服务体隐式地激活自身 这种情况只有在POA利用 IMPLICIT_ACTIVATION策略被创建的前提下才会发生 如果尝试获取一个与非激活服务体对应的对象引用 POA可能自动分配一个产生的唯一的Object Id 给服务体并激活结果对象 非激活服务体的引用可以 通过调用POA::servant_to_reference而被获得 或者 通过在允许这种转换的编程语言中 执行从服务体到一个引用类型的隐式或显式转换POAnull(6)对象活动状态 CORBA对象可以与一个活动服务体关联 如果 POA 具有RETAIN 策略 则服务体与它关联的对象标识被加入POA的活动对象表 服务器应用程序自身显式激活单独的对象 (通过activate_object 或者 activate_object_with_id 操作) 服务器应用程序指导POA根据命令激活对象 (通过使POA激活一个用户提供的服务体管理者) 在某些环境下POA 可以隐式地激活一个对象 当服务器应用程序试图为一个尚未激活的服务体 (即,未与一个对象标识关联)获取一个引用POAnull如果USE_DEFAULT_SERVANT策略也起作用 服务器应用程序指导POA 通过调用一个单个的服务体来激活未知的对象 如果 POA 拥有 NON_RETAIN 策略 对于每个请求 POA 可以使用 一个缺省服务体 或者 一个服务体管理者 定位一个活动服务体 从POA的角度看服务体仅在一个请求过程中是活动的 POA不将servant-object 关联加入活动对象表POAnull一个请求必须能够承载(conveying)目标对象的对象标识 以及 创建目标对象引用的POA标识 当一个客户发出一个请求时 ORB 首先定位正确的服务器 (也许在需要时启动它) 然后在那个服务器中定位正确的POA 如果 POA 不存在于服务器进程中 应用程序有机会通过使用适配器激活器重新创建所需的POA 一旦 ORB 已经定位了POA它将请求传送给那个POA 对那个请求的进一步处理取决于 与那个POA关联的策略 以及对象的目前活动状态POA(7)请求处理null如果 POA 有RETAIN 策略 POA 将在活动对象表中查找 是否有与来自请求的对象标识值关联的服务体 如果这样的一个服务体存在 则 POA 调用服务体上的相应方法 如果 POA 有NON_RETAIN 策略 或者有RETAIN 策略但未在活动对象表中发现服务体 POA 进行下面的动作: 如果 POA 有USE_DEFAULT_SERVANT 策略 一个缺省的服务器已经与该POA关联 则POA 将调用该服务体上的相应方法 如果没有服务体与POA关联 POA引发OBJ_ADAPTER 系统例外POAnull如果 POA 有USE_SERVANT_MANAGER 策略 且一个服务器管理者已经与该POA关联 则POA将调用它的incarnate 或 preinvoke 以发现可能处理请求的一个服务体 如果没有与POA关联的服务体管理器 POA引发OBJ_ADAPTER 系统例外 如果USE_OBJECT_MAP_ONLY 策略起作用 POA 引发 OBJECT_NOT_EXIST 系统例外POAnull 一个 POA 在创建时可以附带的一个策略 指示它的对象可以被隐式地激活 一个非活动的服务体可能通过某个操作被隐式地激活 该操作逻辑上需要一个被分配给那个服务体的对象标识 一个对象的隐式激活涉及分配一个系统产生的对象标识 以及在活动对象表中注册服务体与对象标识 与隐式激活的对象关联的接口由服务体决定 POA(8)隐式激活null 支持隐式激活的操作包括: POA::servant_to_reference 操作 带有服务体参数,并返回一个引用 POA::servant_to_id 操作 带有服务体参数,并返回一个对象标识 由影射语言支持的操作 用来为一个服务体获取一个对象引用或者对象标识 例如, C++中的_this() 服务体成员函数 为服务体返回一个对象引用 由影射语言支持的隐式转换 将服务体转换为一个对象引用或者一个对象标识 后两类操作依赖于影射语言POAnull(9)多线程 为了允许开发出使用线程的服务器 当在一个多线程环境中使用时 必须指定POA 的行为以及相关的接口 指定这种行为, 既不需要ORB 必须在一个线程环境中被支持 也不需要 ORB 在处理请求时必须使用线程 仅需要: 如果一个 ORB确实提供对多线程的支持 那么这些行为将被ORB支持 这允许一个编程人员以在多个ORB间可移植的方式 充分利用支持线程的多个ORBs POA的处理受ORB中可用的与线程有关的调用的影响: work_pending, perform_work, run, 及 shutdownPOAnull POA 线程模型 当与多线程ORB实现一起被使用时 POA 支持两种线程模型: ORB controlled 与single thread behavior 这两种模型可以被一起或者单独使用 每种模型都可以应用于单线程ORB环境 如果创建POA的create_POA操作的策略参数中 包含一个ThreadPolicy对象时 则与一个POA关联的线程模型被指示 一旦一个POA被根据一个模型而创建,它不能被变为另一个 服务器中所有对POA的使用必须和与这个POA关联的线程一致POAnull 使用单线程模型 向单线程POA的请求被顺序处理 使用 ORB控制的模型 ORB 负责一个或多个POA所使用线程的创建、管理及解构 使用多线程时的控制 ORB 与 POA 不涉及在一个POA内跨线程分派请求的工作 因此: 服务器程序员必须安排在那些线程中对对象的顺序访问 可能同时存在对相同对象的多个活动请求 被多线程之间进行分派 编程人员必须清楚这种可能性并用心编码POAnull POA的设计使得编程人员能够将服务体连接至: 特定于类型的skeletons 动态skeletons 作为特定于skeleton类成员的服务体 被认为是特定于类型的服务体 连接至动态skeleton的服务体被用于实现DSI 并被认为是DSI 服务体 两个支持同一接口的CORBA对象 可能一个由DSI服务体体现 而另一个由特定于类型的服务体体现 更进一步地,一个CORBA 对象可能 仅在某些时候由一个DSI服务体体现 而在其它时候由静态服务体体现(10)DSIPOAnull POA为那些利用POA实现的对象提供位置透明性支持 例如: 与来自远地客户的请求类似, 来自本地客户的请求在对象非活动时可能导致: 对象被激活 非确定性地阻塞,如果目标对象的POA处于holding 状态 被拒绝,如果目标对象的POA处于被丢弃或者非活动状态 被发送给一个线程透明的对象实现 或者被发送给一个不同的对象 POA(11)位置透明性null与POA相关的接口的定义在PortableServer 中: POA POAManager ServantManager ServantActivator ServantLocator AdapterActivator ThreadPolicy LifespanPolicy IdUniquenessPolicy IdAssignmentPolicy ImplicitActivationPolicy ServantRetentionPolicy RequestProcessingPolicy CurrentPOAPOA接口nullRootPOA的策略:
/
本文档为【高级软件工程04(IR、POA.)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索