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

上传人:wuy****n92 文档编号:74231768 上传时间:2023-02-25 格式:PPT 页数:58 大小:423.50KB
返回 下载 相关 举报
高级软件工程(IR、POA).ppt_第1页
第1页 / 共58页
高级软件工程(IR、POA).ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《高级软件工程(IR、POA).ppt》由会员分享,可在线阅读,更多相关《高级软件工程(IR、POA).ppt(58页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、6、接口池(、接口池(Interface Repository:IR)接口池接口池接口池接口池是是ORB的构件的构件 提供一致的接口定义存储机制提供一致的接口定义存储机制管理和提供对管理和提供对OMG IDL所指定对象定义集合的访问所指定对象定义集合的访问1 内内 容容概述概述 IR的范围的范围实现相关性实现相关性概念与原理概念与原理IR接口接口接口池接口池接口池接口池2(1)概述)概述ORB提供对对象集合的分布式访问提供对对象集合的分布式访问方法是使用方法是使用OMG IDL中指定的对象公共定义接口中指定的对象公共定义接口接口池为相关对象的接口定义集合接口池为相关对象的接口定义集合提供存储、

2、分布和管理提供存储、分布和管理ORB可以使用两种形式的对象定义:可以使用两种形式的对象定义:通过将信息从过程上合并到通过将信息从过程上合并到stub程序中程序中 例如,作为将例如,作为将C语言子程序映射到通讯协议中的代码语言子程序映射到通讯协议中的代码通过动态可访问的接口池访问到通过动态可访问的接口池访问到 例如,作为通过特定于例如,作为通过特定于OMG IDL接口访问的接口访问的“接口对象接口对象”接口池接口池接口池接口池3ORB可以使用在接口池中维护的对象定义可以使用在接口池中维护的对象定义解释和处理请求中提供的值:解释和处理请求中提供的值:提供请求签名的类型检查(请求是否通过提供请求签名

3、的类型检查(请求是否通过DII或或stub发出的)发出的)帮助检查接口继承关系的正确性帮助检查接口继承关系的正确性 帮助提供不同帮助提供不同ORB实现之间的互操作性实现之间的互操作性由于接口池中所维护对象定义的接口是公共的由于接口池中所维护对象定义的接口是公共的因此客户和服务也可以使用因此客户和服务也可以使用Repository中维护的信息中维护的信息例如,例如,Repository可用于:可用于:管理接口定义的安装和分布管理接口定义的安装和分布 提供提供CASE环境的构件(例如,接口浏览器)环境的构件(例如,接口浏览器)提供语言绑定的接口信息(例如编译器)提供语言绑定的接口信息(例如编译器)

4、提供最终用户环境的构件(例如,菜单栏构造器)提供最终用户环境的构件(例如,菜单栏构造器)接口池接口池接口池接口池4(2)IR的范围的范围 接口对象作为一组对象在接口池中维护接口对象作为一组对象在接口池中维护可以通过一组特定于可以通过一组特定于OMG IDL接口定义访问它们接口定义访问它们接口定义包含它支持的操作描述,接口定义包含它支持的操作描述,包括参数类型、例外和它可以使用的环境信息包括参数类型、例外和它可以使用的环境信息此外,接口池还存储常量值此外,接口池还存储常量值 它可以用在其它接口定义中或者仅仅为方便程序员而定义它可以用在其它接口定义中或者仅仅为方便程序员而定义接口池还存储接口池还存

5、储 typecode,这是以结构化术语描述类型的值,这是以结构化术语描述类型的值接口池接口池接口池接口池5 接口池使用模块作为组织接口的方式接口池使用模块作为组织接口的方式并且根据名称查找这些组织并且根据名称查找这些组织模块可以包含常量、类型定义、例外情况、接口定义和其它模块模块可以包含常量、类型定义、例外情况、接口定义和其它模块例如,模块可以对应于例如,模块可以对应于OMG IDL定义的组织定义的组织它们也可以用于代表为管理和其它用途定义的组织它们也可以用于代表为管理和其它用途定义的组织接口池是代表其中信息的一组对象接口池是代表其中信息的一组对象它们是在该透明对象结构上运作的操作它们是在该透

6、明对象结构上运作的操作具体实现可以选择这些对象具体实现可以选择这些对象 是否永久存在是否永久存在 或者在或者在repository上的操作引用时创建上的操作引用时创建也可以有有效提取信息的操作也可以有有效提取信息的操作获得描述整个接口或整个操作的信息块获得描述整个接口或整个操作的信息块接口池接口池接口池接口池6ORB可以访问多个接口池可以访问多个接口池原因原因:两个两个ORB对接口池的实现有不同的要求对接口池的实现有不同的要求对象实现(例如对象实现(例如OODB)希望提供它自己的类型信息)希望提供它自己的类型信息 或者它希望将不同的附加信息或者它希望将不同的附加信息存储在不同的存储在不同的re

7、pository中中使用使用typecode和和repository标识符的目的是标识符的目的是允许不同的允许不同的repository保持它们自己的信息一致保持它们自己的信息一致接口池接口池接口池接口池7接口池接口池接口池接口池8接口池信息的一个关键用途是接口池信息的一个关键用途是将将ORB连接在一起连接在一起当对象在请求中从一个当对象在请求中从一个ORB传到另一个传到另一个ORB时时可能有必要创建新对象代表接收可能有必要创建新对象代表接收ORB中的传送对象中的传送对象这可能需要在接收这可能需要在接收ORB的接口池中找到接口信息的接口池中找到接口信息 通过从发送通过从发送ORB的的repos

8、itory中获取中获取repository标识符标识符可以在接收可以在接收ORB的的repository中查找接口中查找接口为成功操作,为成功操作,该对象的接口必须该对象的接口必须 同时安装在两个同时安装在两个repository中并且有相同的中并且有相同的repository标识符标识符接口池接口池接口池接口池9(3)实现相关性)实现相关性 接口池中的实现需要某些形式的永久对象存储接口池中的实现需要某些形式的永久对象存储通常永久对象存储类型用于通常永久对象存储类型用于决定接口定义如何分布和决定接口定义如何分布和/或在网络域中复制或在网络域中复制如果使用文件系统提供对象存储如果使用文件系统提供

9、对象存储那么在单个机器上可能只有一组接口的唯一副本那么在单个机器上可能只有一组接口的唯一副本如果使用如果使用OODB提供对象存储提供对象存储那么可以维护接口定义的多个副本那么可以维护接口定义的多个副本每个副本都分布在几台机器上每个副本都分布在几台机器上以提供高可用性和负载平衡以提供高可用性和负载平衡接口池接口池接口池接口池10接口池包含接口池包含允许程序在运行时确定和处理类型信息的信息允许程序在运行时确定和处理类型信息的信息程序可以尝试在任何时候通过对象引用上的程序可以尝试在任何时候通过对象引用上的get_interface访问接口池访问接口池一旦信息已经安装在一旦信息已经安装在reposit

10、ory中中那么程序、那么程序、stub和对象可以使用它和对象可以使用它对象对象repository的更新必须小心的更新必须小心以避免破坏环境以避免破坏环境在更新接口池时在更新接口池时某些接口池可能使用某些接口池可能使用Object Services定义的事务和并发控制定义的事务和并发控制例如,支持例如,支持Transaction Service的的repository将继承将继承Repository接口接口它包括更新操作它包括更新操作 Transaction接口接口它包含事务管理操作它包含事务管理操作接口池接口池接口池接口池11(4)接口池接口元素接口池接口元素 名称和标识名称和标识 类型和类

11、型码类型和类型码 接口对象接口对象IRIR的结构与导航的结构与导航接口池接口池接口池接口池12名称和标识名称和标识 简单名称在接口池中没有必要是唯一的简单名称在接口池中没有必要是唯一的它们通常与显式或隐式的模块有关它们通常与显式或隐式的模块有关在该环境中,接口定义通常被认为是显式模块在该环境中,接口定义通常被认为是显式模块限定范围的名称唯一地标识接口池中的限定范围的名称唯一地标识接口池中的 模块、接口、常量、类型定义、例外情况、属性和操作模块、接口、常量、类型定义、例外情况、属性和操作repository标识符全局地表示标识符全局地表示模块、接口、常量、类型定义、例外情况、属性和操作模块、接口

12、、常量、类型定义、例外情况、属性和操作它们可以用于同步多个它们可以用于同步多个ORB和和Repository上的定义上的定义接口池接口池接口池接口池13 类型和类型码(类型和类型码(TypeCode)类型码类型码 是标识调用参数类型与属性类型的值是标识调用参数类型与属性类型的值 可以确定类型的完整结构可以确定类型的完整结构 可以从可以从IR或或IDL编译器中获得编译器中获得 类型码具有多种用途:类型码具有多种用途:在在DII中,被用于指示实际参数的类型中,被用于指示实际参数的类型由由IR使用,表示作为许多使用,表示作为许多 OMG IDL 声明中一部分的类型规约声明中一部分的类型规约它们对于它

13、们对于any 类型的语义极为关键类型的语义极为关键 抽象地讲,类型码抽象地讲,类型码 包含包含 一个一个“kind”域域 以及以及 适于该适于该 Kind 的参数集合的参数集合 例如,描述例如,描述 long 的的 类型码具有类型码具有kind tk_long,无参数,无参数 描述描述 sequence 的类型码具有的类型码具有 kind tk_sequence包含两个参数:包含两个参数:10 and boolean接口池接口池接口池接口池14接口池接口池接口池接口池15接口池接口池接口池接口池16接口对象接口对象接口池管理的关于每个接口的信息接口池管理的关于每个接口的信息都以下面类型的接口池

14、对象集合的形式维护都以下面类型的接口池对象集合的形式维护RepositoryRepository:接口池名空间中最顶层的模块;接口池名空间中最顶层的模块;它包括常量、类型定义、例外、接口,它包括常量、类型定义、例外、接口,或者值类型定义以及模块或者值类型定义以及模块ModuleDefModuleDef:接口与值类型的的逻辑组;接口与值类型的的逻辑组;它包括常量、类型定义、例外、接口,它包括常量、类型定义、例外、接口,或者值类型定义以及其它模块或者值类型定义以及其它模块InterfaceDefInterfaceDef:接口定义;接口定义;它包括常量、类型、例外、操作以及属性。它包括常量、类型、例

15、外、操作以及属性。ValueDefValueDef:值类型定义,值类型定义,它包含常量表、类型表、例外表、操作表、属性表及成员它包含常量表、类型表、例外表、操作表、属性表及成员接口池接口池接口池接口池17ValueBoxDefValueBoxDef:boxed:boxed值类型定义值类型定义ValueMemberDefValueMemberDef:值类型成员定义值类型成员定义AttributeDefAttributeDef:接口或值类型属性的定义接口或值类型属性的定义OperationDefOperationDef:接口或值类型操作的定义接口或值类型操作的定义;包含参数列表与例外包含参数列表与

16、例外TypedefDefTypedefDef:基本接口,非接口或值类型的基本接口,非接口或值类型的namedtypenamedtype定义定义ConstantDefConstantDef:常量定义常量定义ExceptionDefExceptionDef:操作所引发例外的定义操作所引发例外的定义接口池接口池接口池接口池18每个接口池对象的接口规范列出了由该对象维持的属性每个接口池对象的接口规范列出了由该对象维持的属性这些属性多数与这些属性多数与OMGIDLOMGIDL语句直接对应语句直接对应一个实现可以一个实现可以选择维持附加的属性以便于管理池选择维持附加的属性以便于管理池或者记录关于接口的附加

17、信息或者记录关于接口的附加信息扩展扩展IRIR接口的实现应当采用接口的实现应当采用导出新接口导出新接口而不是修改标准接口而不是修改标准接口实现实现CORBACORBA规范为接口池对象定义了操作的一个最小集规范为接口池对象定义了操作的一个最小集IRIR的一个实现可能提供的附加操作的一个实现可能提供的附加操作可以包含提供实体版本化的操作可以包含提供实体版本化的操作以及规范的反编译以及规范的反编译接口池接口池接口池接口池19IRIR的结构与导航的结构与导航 接口池中的定义是按照接口池对象集合的形式进行组织的接口池中的定义是按照接口池对象集合的形式进行组织的这些对象的组织方式与定义的组织方式相同:这些

18、对象的组织方式与定义的组织方式相同:一些对象(定义)包含其它对象一些对象(定义)包含其它对象接口池接口池接口池接口池20接口池接口池接口池接口池21在接口池中定位一个接口的方式有三种:在接口池中定位一个接口的方式有三种:1.1.从从ORBORB直接获取一个直接获取一个 InterfaceDefInterfaceDef对象对象2.2.利用一个名序列在模块空间中航行利用一个名序列在模块空间中航行3.3.定位与一个特定池表示对应的定位与一个特定池表示对应的InterfaceDefInterfaceDef对象对象如果一个对象的类型在编译时刻尚未确定如果一个对象的类型在编译时刻尚未确定则适于直接获取一个

19、则适于直接获取一个InterfaceDefInterfaceDef对象对象通过利用对象的引用调用通过利用对象的引用调用get_interfaceget_interface操作操作可以在接口池中获得关于该对象的信息可以在接口池中获得关于该对象的信息该信息可以被用于在该对象上执行操作该信息可以被用于在该对象上执行操作接口池接口池接口池接口池22当需要一个特定命名的接口时当需要一个特定命名的接口时则适于在模块名空间中航行则适于在模块名空间中航行从接口池的根模块开始从接口池的根模块开始可以根据名字获得入口可以根据名字获得入口当在一个接口池中查找一个对应的入口时当在一个接口池中查找一个对应的入口时则适于

20、通过则适于通过IDID定位定位InterfaceDefInterfaceDef对象对象通过在两个池中使用相同的标识通过在两个池中使用相同的标识可以在一个池中获得一个接口的接口标识可以在一个池中获得一个接口的接口标识然后从另一个池获得那个接口的信息然后从另一个池获得那个接口的信息(那个池可能近一些(那个池可能近一些或者包含关于接口的附加信息)或者包含关于接口的附加信息)接口池接口池接口池接口池23(5)IR接口接口一组公共的操作被用于在一组公共的操作被用于在IRIR中定位对象中定位对象这些操作在接口这些操作在接口IRObjectIRObject,ContainerContainer,and,an

21、dContainedContained等中等中被定义被定义所有的所有的IRIR对象继承对象继承IRObjectIRObject接口接口它提供了一个区别对象具体类型的操作它提供了一个区别对象具体类型的操作属于容器的对象从属于容器的对象从ContainerContainer接口中继承接口中继承navigationnavigation操作操作被其它对象包容的对象从被其它对象包容的对象从ContainedContained接口中继承接口中继承navigationnavigation操作操作接口池接口池接口池接口池24IDLTypeIDLType接口被所有标识接口被所有标识IDLIDL类型的类型的IRI

22、R对象所继承对象所继承包括包括interfaces,typedefs,interfaces,typedefs,及及anonymoustypesanonymoustypesTypedefDefTypedefDef接口接口被所有被所有namednon-interfacetypesnamednon-interfacetypes对象多继承对象多继承基本接口基本接口IRObjectIRObjectContainedContainedContainerContainer IDLTypeIDLType及及 TypedefDefTypedefDef不是暂时性的不是暂时性的IRIR中的所有字符串数据被按照中的所

23、有字符串数据被按照ISO8859-1codedcharactersetISO8859-1codedcharacterset中的定义编码中的定义编码接口池接口池接口池接口池25接口池接口池接口池接口池267、POA设计目标设计目标模型元素模型元素模型体系结构模型体系结构POA创建创建引用创建引用创建对象活动状态对象活动状态请求处理请求处理隐式激活隐式激活多线程多线程DSI位置透明性位置透明性POA接口接口POAPOA27(1 1)POAPOA的设计目标的设计目标l允许编程人员构造允许编程人员构造 可以在不同可以在不同ORBORB产品上移植的对象实现产品上移植的对象实现l提供对永久对象的支持提供对

24、永久对象的支持允许编程人员构造的对象实现允许编程人员构造的对象实现存活时间(从持有对象引用的客户角度)存活时间(从持有对象引用的客户角度)跨越多个服务器存活时间跨越多个服务器存活时间l提供对透明对象激活的支持提供对透明对象激活的支持l允许单个的服务同时支持多个对象标识允许单个的服务同时支持多个对象标识l允许多个不同的允许多个不同的POAPOA实例存在于一个服务器中实例存在于一个服务器中l提供对提供对transienttransient对象的支持,花费最小的编程代价与负载对象的支持,花费最小的编程代价与负载POAPOA28l提供对隐式服务激活的支持,对象标识由提供对隐式服务激活的支持,对象标识由

25、POAPOA分配分配l允许对象实现最大可能地为对象行为负责允许对象实现最大可能地为对象行为负责特别地,一个实现可以控制对象的行为特别地,一个实现可以控制对象的行为通过通过建立定义对象标识的数据建立定义对象标识的数据决定对象标识与对象状态之间的关系决定对象标识与对象状态之间的关系管理对象状态的存储与检索管理对象状态的存储与检索提供响应请求时将被执行的代码提供响应请求时将被执行的代码以及在任意时刻决定对象是否存在以及在任意时刻决定对象是否存在l避免请求避免请求ORBORB维护描述独立对象的永久状态维护描述独立对象的永久状态它们的它们的 标识,它们的状态存在何处标识,它们的状态存在何处某些标识值是否

26、以前已经被使用过某些标识值是否以前已经被使用过一个对象是否已经被彻底删除一个对象是否已经被彻底删除等等等等l提供一个扩展机制提供一个扩展机制用于将策略信息与用于将策略信息与POAPOA中实现的对象进行关联中实现的对象进行关联POAPOA29(2)POA的模型元素的模型元素客户客户 是一个计算语境是一个计算语境它通过对一个对象的引用向其提出请求它通过对一个对象的引用向其提出请求服务器服务器是一个计算语境是一个计算语境对象的实现体存在于其中对象的实现体存在于其中一般情况下,一个服务器对应于一个进程一般情况下,一个服务器对应于一个进程对象对象是一个具有标识、接口、及实现的程序体是一个具有标识、接口、

27、及实现的程序体从一个客户的视角,对象的标识封装在对象的引用中从一个客户的视角,对象的标识封装在对象的引用中POAPOA模型定义了从服务器视角看对象的标识模型定义了从服务器视角看对象的标识它由对象实现通过它由对象实现通过POAPOA接口显式管理接口显式管理POAPOA30ServantServant服务体是实现一个或多个对象请求的编程语言对象或实体服务体是实现一个或多个对象请求的编程语言对象或实体服务体一般存在于一个服务器进程语境中服务体一般存在于一个服务器进程语境中向一个对象应用提出的请求由向一个对象应用提出的请求由ORBORB中转中转并转变为向一个特定服务体的调用并转变为向一个特定服务体的调

28、用在一个对象生命时间内,它可能与多个服务体相关在一个对象生命时间内,它可能与多个服务体相关所谓相关是指向它的请求将以服务体为目标所谓相关是指向它的请求将以服务体为目标ObjectIdObjectId一个对象标识是一个值,由一个对象标识是一个值,由POAPOA及用户提供的实现使用及用户提供的实现使用以标识一个特定的抽象以标识一个特定的抽象CORBACORBA对象对象对象标识值对于客户是隐藏的,由引用封装对象标识值对于客户是隐藏的,由引用封装对象标识没有标准的形式对象标识没有标准的形式它们由它们由POAPOA作为未解释的作为未解释的8 8进制位序列管理进制位序列管理POAPOA31ObjectRe

29、ferenceObjectReference一个对象引用封装了一个对象标识及一个一个对象引用封装了一个对象标识及一个POA标识标识在一个特定在一个特定ORB实现中的一个具体引用包含更多的信息实现中的一个具体引用包含更多的信息例如例如服务器位置服务器位置被考虑的被考虑的POA等等(它可能包含它可能包含POA的全名的全名 及从根部到特定及从根部到特定POA的所有的所有POA的名字的名字)引用也可能不包含对象标识引用也可能不包含对象标识 但却包含由但却包含由ORB管理的压缩过的值管理的压缩过的值它们可以被影射为对象标识它们可以被影射为对象标识POAPOA32POAPOA可移植对象适配器是在服务器语境

30、中的一个可标识实体可移植对象适配器是在服务器语境中的一个可标识实体每个每个POAPOA为对象标识提供了一个名空间为对象标识提供了一个名空间并为其它并为其它POAPOA(nestedorchildnestedorchild)提供一个名空间提供一个名空间与与POAPOA相关的策略描述了在那个相关的策略描述了在那个POAPOA中对象实现的特征中对象实现的特征NestedNestedPOAsPOAs为一个服务器中的对象形成了一个层次式的名空间为一个服务器中的对象形成了一个层次式的名空间PolicyPolicy策略是一个应用程序的与策略是一个应用程序的与POAPOA相关的对象相关的对象以指定在那个以指定

31、在那个POAPOA中实现的对象共享的特征中实现的对象共享的特征本规范定义一些策略,以控制本规范定义一些策略,以控制POAPOA的线程模型的线程模型以及一些其它与对象管理相关的选项以及一些其它与对象管理相关的选项POAPOA33POAManagerPOAManagerPOAPOA管理器是一个封装一个或多个管理器是一个封装一个或多个POAPOA处理状态的对象处理状态的对象利用利用POAPOA管理器上的操作管理器上的操作开发者可以使向相关开发者可以使向相关POAPOA发出的请求被排队或丢弃发出的请求被排队或丢弃开发者也可以利用开发者也可以利用POAPOA管理器去活管理器去活POAPOAServent

32、ServentManagerManager服务体管理器是一个可以与服务体管理器是一个可以与POAPOA关联的对象关联的对象服务体管理器服务体管理器负责管理一个对象与特定服务体的关联负责管理一个对象与特定服务体的关联并负责决定一个对象是否存在并负责决定一个对象是否存在ORBORB可以调用服务体管理器上的操作,以激活或去活服务体可以调用服务体管理器上的操作,以激活或去活服务体POAPOA34AdaptorActivatorAdaptorActivator一个适配器激活器是可以与一个适配器激活器是可以与POAPOA关联的对象关联的对象当一个请求被从目前不存在的子当一个请求被从目前不存在的子POAPO

33、A收到时收到时ORBORB将激活适配器激活器上的一个操作将激活适配器激活器上的一个操作适配器激活器可以根据命令创建所需的适配器激活器可以根据命令创建所需的POAPOAPOAPOA35ORBORB是对客户与服务器皆可见的一个抽象是对客户与服务器皆可见的一个抽象POAPOA是对服务器可见的对象是对服务器可见的对象用户提供的实现被注册在用户提供的实现被注册在POAPOA中中 客户客户拥有引用拥有引用 并向它发出请求并向它发出请求ORBPOAORBPOA与与 实现实现共同决定共同决定操作需要调用哪个服务体操作需要调用哪个服务体并执行调用并执行调用(3)模型体系结构模型体系结构POAPOA36POAPO

34、A37 如果如果POAPOA支持支持 RETAINRETAIN策略策略则它维护一张表(则它维护一张表(mapmap):活动对象表(活动对象表(ActiveObjectMapActiveObjectMap)AOPAOP将对象标识与活动服务体关联起来将对象标识与活动服务体关联起来每个关联组成了一个活动对象每个关联组成了一个活动对象如果如果POAPOA包含包含USE_DEFAULT_SERVANTUSE_DEFAULT_SERVANT策略策略则一个缺省的服务体被注册到则一个缺省的服务体被注册到POAPOA中中相反,如果相反,如果POAPOA包含包含USE_SERVANT_MANAGERUSE_SER

35、VANT_MANAGER策略策略则一个用户编写的服务体管理器被注册到则一个用户编写的服务体管理器被注册到POAPOA中中如果活动对象表未被使用如果活动对象表未被使用或者一个请求对应的对象未出现在活动对象表中或者一个请求对应的对象未出现在活动对象表中POAPOA或者使用缺省的服务器执行请求或者使用缺省的服务器执行请求或者它调用服务体管理器获取一个服务体来执行请求或者它调用服务体管理器获取一个服务体来执行请求如果如果 RETAINRETAIN策略策略被使用被使用则由服务体管理器返回的服务体由活动对象表保持则由服务体管理器返回的服务体由活动对象表保持否则,服务体仅被用于处理一个请求否则,服务体仅被用

36、于处理一个请求POAPOA38POAPOA39(4)创建)创建POA 为实现一个需要为实现一个需要POAPOA的对象的对象需要服务器应用程序获取一个需要服务器应用程序获取一个POAPOA对象对象一个特殊的一个特殊的POAPOA对象,根(对象,根(rootroot)POAPOA,由,由ORBORB进行管理进行管理并在初始对象名并在初始对象名“RootPOA”“RootPOA”下下利用利用ORBORB初始化接口向应用程序提供初始化接口向应用程序提供应用程序开发者可以利用根应用程序开发者可以利用根POAPOA创建对象创建对象开发者可以创建新开发者可以创建新POA:POA:以允许开发者为新以允许开发者

37、为新POAPOA声明特定的策略声明特定的策略并提供一个不同的适配器激活器即服务体管理器并提供一个不同的适配器激活器即服务体管理器 也允许开发者划分对象的名空间也允许开发者划分对象的名空间因为对象标识的解释与因为对象标识的解释与POAPOA相关相关开发者可以独立地为多个对象集合控制请求处理开发者可以独立地为多个对象集合控制请求处理POAPOA40一个一个POAPOA是是利用父利用父POAPOA上的上的create_POAcreate_POA操作操作作为一个已经存在作为一个已经存在POAPOA的子的子POAPOA创建的创建的POAPOA对象不是永久性的对象不是永久性的ORBORB不保存不保存POA

38、POA的任何状态的任何状态服务器程序负责创建并初始化合适的服务器程序负责创建并初始化合适的POAPOA对象对象创建适宜的创建适宜的POAPOA对象对象对于跨越多个服务器生命时间的永久对象特别重要对于跨越多个服务器生命时间的永久对象特别重要为支持在以前的服务器进程中创建的一个对象引用为支持在以前的服务器进程中创建的一个对象引用应用程序必须重新创建出应用程序必须重新创建出创建对象引用的那个创建对象引用的那个POAPOA,以及祖先,以及祖先POAPOA每个被重新创建的每个被重新创建的POAPOA必须与以前必须与以前POAPOA的名字、策略相同的名字、策略相同POAPOA41(5)引用创建)引用创建对

39、象引用封装了对象引用封装了对象标识信息对象标识信息以及以及ORBORB需要的信息需要的信息用以标识并定位与对象关联的服务器以及用以标识并定位与对象关联的服务器以及POAPOA引用按照下列方式被创建:引用按照下列方式被创建:l服务器应用程序创建引用服务器应用程序创建引用调用调用POAPOA的的create_referencecreate_reference与与 create_reference_with_idcreate_reference_with_id操作操作从与从与POAPOA相关的信息中,或者从传给操作的参数中相关的信息中,或者从传给操作的参数中在创建对象引用的过程中,它们将抽象的对象活

40、化,在创建对象引用的过程中,它们将抽象的对象活化,但它不将其与一个活动的服务体关联但它不将其与一个活动的服务体关联POAPOA42l服务器应用程序显式地激活一个服务体服务器应用程序显式地激活一个服务体利用利用activate_objectactivate_object或或 activate_object_with_idactivate_object_with_id操作操作将其与一个对象标识关联将其与一个对象标识关联一旦一个服务体被激活一旦一个服务体被激活服务器应用程序可以服务器应用程序可以利用利用servant_to_referenceservant_to_reference或或id_to_r

41、eferenceid_to_reference操作操作将服务体影射为对应的引用将服务体影射为对应的引用POAPOA43l服务器应用程序可以使一个服务体隐式地激活自身服务器应用程序可以使一个服务体隐式地激活自身这种情况只有在这种情况只有在POAPOA利用利用IMPLICIT_ACTIVATIONIMPLICIT_ACTIVATION策略被创建的前提下才会发生策略被创建的前提下才会发生如果尝试获取一个与非激活服务体对应的对象引用如果尝试获取一个与非激活服务体对应的对象引用POAPOA可能自动分配一个产生的唯一的可能自动分配一个产生的唯一的ObjectIdObjectId给服务体并激活结果对象给服务

42、体并激活结果对象非激活服务体的引用可以非激活服务体的引用可以通过调用通过调用POA:servant_to_referencePOA:servant_to_reference而被获得而被获得或者或者通过在允许这种转换的编程语言中通过在允许这种转换的编程语言中执行从服务体到一个引用类型的隐式或显式转换执行从服务体到一个引用类型的隐式或显式转换POAPOA44(6)对象活动状态)对象活动状态CORBACORBA对象可以与一个活动服务体关联对象可以与一个活动服务体关联如果如果POAPOA具有具有RETAINRETAIN策略策略则服务体与它关联的对象标识被加入则服务体与它关联的对象标识被加入POAPOA

43、的活动对象表的活动对象表l服务器应用程序自身显式激活单独的对象服务器应用程序自身显式激活单独的对象(通过通过activate_objectactivate_object或者或者 activate_object_with_idactivate_object_with_id操作操作)l服务器应用程序指导服务器应用程序指导POAPOA根据命令激活对象根据命令激活对象(通过使通过使POAPOA激活一个用户提供的服务体管理者激活一个用户提供的服务体管理者)l在某些环境下在某些环境下POAPOA可以隐式地激活一个对象可以隐式地激活一个对象当服务器应用程序试图为一个尚未激活的服务体当服务器应用程序试图为一个

44、尚未激活的服务体(即,未与一个对象标识关联即,未与一个对象标识关联)获取一个引用获取一个引用POAPOA45如果如果USE_DEFAULT_SERVANTUSE_DEFAULT_SERVANT策略也起作用策略也起作用服务器应用程序指导服务器应用程序指导POAPOA通过调用一个单个的服务体来激活未知的对象通过调用一个单个的服务体来激活未知的对象如果如果POAPOA拥有拥有 NON_RETAINNON_RETAIN策略策略对于每个请求对于每个请求POAPOA可以使用可以使用一个缺省服务体一个缺省服务体或者或者一个服务体管理者一个服务体管理者定位一个活动服务体定位一个活动服务体从从POAPOA的角度

45、看服务体仅在一个请求过程中是活动的的角度看服务体仅在一个请求过程中是活动的POAPOA不将不将servant-objectservant-object关联加入活动对象表关联加入活动对象表POAPOA46一个请求必须能够承载一个请求必须能够承载(conveying)(conveying)目标对象的对象标识目标对象的对象标识以及以及创建目标对象引用的创建目标对象引用的POAPOA标识标识当一个客户发出一个请求时当一个客户发出一个请求时ORBORB首先定位正确的服务器首先定位正确的服务器(也许在需要时启动它也许在需要时启动它)然后在那个服务器中定位正确的然后在那个服务器中定位正确的POAPOA如果如

46、果POAPOA不存在于服务器进程中不存在于服务器进程中应用程序有机会通过使用适配器激活器重新创建所需的应用程序有机会通过使用适配器激活器重新创建所需的POAPOA一旦一旦ORBORB已经定位了已经定位了POAPOA它将请求传送给那个它将请求传送给那个POAPOA对那个请求的进一步处理取决于对那个请求的进一步处理取决于与那个与那个POAPOA关联的策略关联的策略以及对象的目前活动状态以及对象的目前活动状态POAPOA(7)请求处理)请求处理47如果如果POAPOA有有RETAINRETAIN策略策略POAPOA将在活动对象表中查找将在活动对象表中查找是否有与来自请求的对象标识值关联的服务体是否有

47、与来自请求的对象标识值关联的服务体如果这样的一个服务体存在如果这样的一个服务体存在则则POAPOA调用服务体上的相应方法调用服务体上的相应方法如果如果POAPOA有有NON_RETAINNON_RETAIN策略策略或者或者有有RETAINRETAIN策略策略但未在活动对象表中发现服务体但未在活动对象表中发现服务体POAPOA进行下面的动作:进行下面的动作:l如果如果 POAPOA有有USE_DEFAULT_SERVANTUSE_DEFAULT_SERVANT策略策略一个缺省的服务器已经与该一个缺省的服务器已经与该POAPOA关联关联则则POAPOA将调用该服务体上的相应方法将调用该服务体上的相

48、应方法如果没有服务体与如果没有服务体与POAPOA关联关联POAPOA引发引发OBJ_ADAPTER 系统例外系统例外POAPOA48l如果如果 POAPOA有有USE_SERVANT_MANAGERUSE_SERVANT_MANAGER策略策略且一个服务器管理者已经与该且一个服务器管理者已经与该POAPOA关联关联则则POAPOA将调用它的将调用它的incarnateincarnate或或 preinvokepreinvoke 以发现可能处理请求的一个服务体以发现可能处理请求的一个服务体如果没有与如果没有与POAPOA关联的服务体管理器关联的服务体管理器POAPOA引发引发OBJ_ADAPT

49、ER 系统例外系统例外l如果如果USE_OBJECT_MAP_ONLYUSE_OBJECT_MAP_ONLY策略起作用策略起作用POAPOA引发引发 OBJECT_NOT_EXIST 系统例外系统例外POAPOA49一个一个POAPOA在创建时可以附带的一个策略在创建时可以附带的一个策略指示它的对象可以被隐式地激活指示它的对象可以被隐式地激活一个非活动的服务体可能通过某个操作被隐式地激活一个非活动的服务体可能通过某个操作被隐式地激活该操作逻辑上需要一个被分配给那个服务体的对象标识该操作逻辑上需要一个被分配给那个服务体的对象标识一个对象的隐式激活涉及分配一个系统产生的对象标识一个对象的隐式激活涉

50、及分配一个系统产生的对象标识以及在活动对象表中注册服务体与对象标识以及在活动对象表中注册服务体与对象标识与隐式激活的对象关联的接口由服务体决定与隐式激活的对象关联的接口由服务体决定 POAPOA(8)隐式激活)隐式激活50 支持隐式激活的操作包括:支持隐式激活的操作包括:lPOA:servant_to_referencePOA:servant_to_reference操作操作带有服务体参数,并返回一个引用带有服务体参数,并返回一个引用lPOA:servant_to_idPOA:servant_to_id操作操作带有服务体参数,并返回一个对象标识带有服务体参数,并返回一个对象标识l由影射语言支持

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com