可移植对象适配器

上传人:艾力 文档编号:50949629 上传时间:2018-08-11 格式:PPT 页数:57 大小:247KB
返回 下载 相关 举报
可移植对象适配器_第1页
第1页 / 共57页
可移植对象适配器_第2页
第2页 / 共57页
可移植对象适配器_第3页
第3页 / 共57页
可移植对象适配器_第4页
第4页 / 共57页
可移植对象适配器_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《可移植对象适配器》由会员分享,可在线阅读,更多相关《可移植对象适配器(57页珍藏版)》请在金锄头文库上搜索。

1、可移植对象适配器n11.2 简介POA技术提供的最基本地服务是:对象 创建、伺服程序注册以及请求的调度。 POA提供了一整套特性和服务,可以利 用它来编写可扩缩的、高性能的服务器 应用程序,它在合理控制资源请求方面 起着重要的作用。n11.3 POA基本原理在一个服务器应用程序中,POA负责创建对象、激活对 象以及将对各个对象的请求调度到它们各自的伺服程 序上,通过POA,CORBA对象完成了编程语言所提供 的伺服程序的相互对应关系。当一个对象处于激活状态时,该对象就可以接收并执行 请求。当对象得到一个请求后,该对象必须由伺服程 序进行具体化,或给它以具体形式。一个给定对象仅 由一个单个的伺服

2、程序在给定点及时进行具体化,但 超时以后,可以创建许多伺服程序实例来具体化一个 CORBA对象。最后每一个伺服程序释放后就结束了它 与相对应的CORBA对象之间的连接。具体化和释放是应用于伺服程序的,创建和撤消是应用 于CORBA对象的。11.3.1 基本的请求调度n基本调度如下:(1) 首先,服务器应用程序以某种方式为CORBA对象导出一个对象 引用。客户机可能通过命名服务或者交易服务或者从另一个请求 接收它来获得导出的对象引用。对象引用从逻辑上“指向”目标 CORBA对象,像C+指针指向它底层的C+对象一样。(2) 其次,在应用程序的控制下,客户程序ORB使用对象引用来决定 对象驻留在何处

3、和如何访问它,然后它向服务器ORB发送请求。(3) 再次,服务器ORB接收请求并将其调度给拥有该目标对象的POA 。(4) 最后,POA通过调用具体化该目标对象的伺服程序来继续执行该 调度。11.3.2 关键的POA实体n有三种关键实体涉及到POA对象引用POA负责创建对象引用。对象标识符在POA主机的作用域内,每一个对象通 过调用一个octet序列的对象标识符进行 识别。当POA创建一个新的CORBA对象 时,典型情况是,它就将对象标识符嵌 入在对象引用的对象密钥部分。伺服程序应用程序直接通过POA可以创建并注册伺服程 序来具体化对象。同样,应用程序可以向POA 提供伺服程序管理器对象,当需

4、要执行一个请求时,POA就能创建伺服程序。应用程序甚至 可以提供一个默认的伺服程序。与POA策略有 关,在任何给定的时间,单个的伺服程序可以用POA注册来具体化一个和多个的CORBA对象 。POA通过目标对象的对象标识符与合适的伺服程 序之间的映射来调度请求。一个伺服程序也可以通过对_this调用隐式创建一个新的CORBA对 象,并为其注册一个伺服程序。11.4 POA策略nPOA规范的关键特性就是一个应用程序可以包 含多个POA实例。每一个POA实例代表具有相 似性能的一组对象。这些性能通过POA创建时 所指定的POA策略来控制。所有应用程序至少 有一个POA,也就是Root POA,它具有

5、标准的 策略集。n策略是用来定义POA性能的对象,该对象在策 略内部创建。向POA和POAManager接口一样 ,CORBA规范指出,在标准的PortableServer模 块中定义POA策略接口。n像所有的策略接口一样,POA策略类从 CORBA:Policy接口派生出来。POA策略nPolicy接口及相关的类型提供的管理操作(1) 通过基本的Policy接口,利用policy_type只读属性可 以确定策略的实际派生类型。 PolicyType是由OMG控 制的一个标志值,这样可以确保所有的标准接口都有 一个唯一的标志(2) copy操作可以克隆(clone) 一个Policy对象。返回

6、的引 用指向目标Policy对象的一个全新的拷贝。 (3) destory操作用来撤消目标Policy对象。(4) PoicyList用来将指向各种派生Policy对象 的引用分组来形成策略集。POA创建操 作接收一个PolicyList类型的参数,这个 参数可以将策略设置成新的POA。n策略对象是局部约束对象。也就是任何 试图将它们的引用作为参数传递给标准 的CORBA操作或通过 ORB:object_to_string将它们转换成字符串 的操作都将产生CORBA:MARCHAL异常 。11.4.1 CORBA对象生存期范围n假如一个客户程序向一个当前没有运行或没有激活的 目标对象发出一个请

7、求,如果必要的话,ORB工具就 会为该对象激活一个服务器进程,然后激活对象本身 。服务器进程和目标对象的任何激活对发出请求的客 户来说都是透明的。n持久对象:生存期超过创建或激活它们的某一特定进 程的CORBA对象。n除了持久对象外,其它的对象的生命周期由进程的生 命周期甚至于创建它们的对象适配器来决定。11.4.2 对象标识符nPOA通过它的对象标识符识别每一个对象。对象标识符被赋值为 ObjectId类型,这个类型在PortableServer模块中定义为octet的一个 序列。n一个程序可以显式的提供自己的对象标识符,也可以让POA为它 创建对象标识符。n对象标识符和对象引用的主要区别是

8、在命名一个对象的POA作用 域外,对象标识符是无意义的。n在单个POA的作用域内,所有对象标识符必须是唯一的。n如果使用具有SYSTEM_ID策略值的POA,POA就会自动生成唯一 的ID。如果使用具有USER_ID策略值的POA,POA就会通过产生 异常来防止两个相同的ID。n对象标识符由IdAssignmentPolicy来控制11.4.3 对象到伺服程序之间的映射n一个只有少量几个暂态对象的应用程序 在开始监听请求前,可能会为每个对象 创建各自的伺服程序并使用POA注册它 们。拥有多个持久CORBA对象的应用程 序可能只需要一个伺服程序来具体化所 有的这些对象。n对象标识符映射到用UNI

9、QUE_ID策略值 创建的POA中的伺服程序。当调用一个请求时,POA先提取出ObjectId,通 常ObjectId嵌入在目标对象的对象引用中,然 后使用该ObjectId在激活的对象映射中查找目 标对象的伺服程序。在激活的对象映射中的每一个条目由一个ObjectId和一个指向一个伺服 程序的指针的关联组成。保留ObjectId对伺服 程序关联的每一个POA都有它自己的激活的对 象映射。对于UNIQUE_ID,POA实现的规则 是每一个对象标识符映射到一个不同的伺服程序。而在一个MULTIPLE_ID中,多个对象标 识符可以映射到一个伺服程序。对于Root POA,标准的对象标识符的唯一策略

10、 值是 UNIQUE_ID。Root POA要求一个独立的 伺服程序来具体化每一个对象。11.4.4 策略工厂操作 n通过调用POA的策略工厂操作可以创建策略。 POA接口为每个类型都提供了一个独立的策略 工厂操作。n每一个策略工厂操作都一同样的方式工作:向 新的策略对象传递所需的值,然后操作返回对 象引用。最终,必须调用返回对象中的destroy 操作来撤销它。11.5 POA创建n为了让POA策略有效,在创建时就将它们应用 于POA。通过调用另一个POA的create_POA可 以创建一个POA。因为所有的服务器应用程序 都有一个Root POA,所以它的create_POA操作 起到了创

11、建其它POA的起始点的作用。n使用另一个POA创建的POA就成了正在创建的 POA的子POA。但是,这对子POA的策略没有 影响,策略并不继承符父POA。相反,如果没 有策略值传递给create_POA操作,则使用默认 值。n在IDL定义时需要注意:POAManager允许应用程序控制一个POA中的请 求流。create_POA操作有三个参数。POA的名称、指向 为要创建的POA控制请求流的POAManager的 一个引用,为空将创建一个新的、创建POA策 略列表。create_POA 操作可能会产生两个异常。同名 AdapterAlreadyExists异常。策略未知或不一致 Invalid

12、PolicyPOA创建nPOA策略的创建:CORBA:PolicyList policy_listPortableServer:POA_var child_poa=root_poa- create_POA(“child”,PortableServer:POAManager:_nil(), policy_list)(1) 先初始化ORB和从Root POA获得一个引用的一般调用 序列(2) 创建一个CORBA:PolicyList序列,默认为空(3) 调用Root POA的create_POA,传递字符串“child”作为 新的POA的名字,同时传递的参数还有一个空的 POAManager引用和

13、空的策略列表。也可以创建一分层的POA。例如:PortableServer:POA_var poa_A=root_poa- create_POA(“A”,)PortableServer:POA_var poa_B=poa_A- create_POA(“B”,)PortableServer:POA_var poa_C=poa_B- create_POA(“C”,)11.6 Server IDL类型nnative类型native类型的目的是允许IDL标识符可以被说明为没有 IDL定义的一种类型,但是这种类型可由每种语言映射 来单独进行定义。在C+中,Servant类型映射到一个指向ServantB

14、ase类的 指针。 ServantBase可视为所有框架的基类,也就是所 有应用程序伺服类的基类。ServantBase提供_default_POA函数, _default_POA函数的 ServantBase实现返回一个指向Root POA的引用。当调 用一个伺服程序的_this函数来隐式创建并激活一个新 的暂态CORBA时, _default_POA提供POA引用。11.7 对象创建和激活n11.7.1 对象创建POA提供两种不用创建伺服程序就可以创 建CORBA对象的操作。create_refernce和create_refernce_with_id都需 要一个RepositoryId参

15、数来识别新对象支 持的大多数派生的IDL接口。create_refernce操作要求POA具有一个值为 SYSTEM_ID的IdAssignmentPolicy值,以 便POA为新的对象生成ObjectId。如果没 有,将会引发WrongPolicy异常。使用create_refernce_with_id时,应用程序提 供Object_Id。这个Object_Id在应用程序 域内表示对象的身份。Object create_refernce(in CORBA:RepositoryId intf) raises(WrongPolicy);Object create_refernce_with_id

16、(in ObjectId oid, CORBA:RepositoryId intf) raises(WrongPolicy);对象创建和激活n11.7.2 伺服程序注册激活一个对象的最简单方法之一就是使用POA对象激活 操作。使用这些操作,应用程序开发人员显式提供一 个伺服程序来具体化将被激活的对象,并且根据POA 的IdAssignmentPolicy,POA赋值一个ObjectId或应用程 序开发人员提供一个ObjectId。根据目标POA的策略,选择使用active_object或 activate_object_with_id。active_object操作要求目标POA具有值为 SYSTEM_ID的一个IdAssignmentPolicy和值为 RETAIN的一个ServerRetentionPolicy值。activate_object_with_id操作要求目标POA具有 RETAIN的一个ServerRetentionPolicy值。如果POA的IdUniquenessPolicy设置为 UNIQUE_ID并

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

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号