- 1、本文档共57页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
可移植对象适配器-Read.ppt
可移植对象适配器;11.3 POA基本原理
在一个服务器应用程序中,POA负责创建对象、激活对象以及将对各个对象的请求调度到它们各自的伺服程序上,通过POA,CORBA对象完成了编程语言所提供的伺服程序的相互对应关系。
当一个对象处于激活状态时,该对象就可以接收并执行请求。当对象得到一个请求后,该对象必须由伺服程序进行具体化,或给它以具体形式。一个给定对象仅由一个单个的伺服程序在给定点及时进行具体化,但超时以后,可以创建许多伺服程序实例来具体化一个CORBA对象。最后每一个伺服程序释放后就结束了它与相对应的CORBA对象之间的连接。
具体化和释放是应用于伺服程序的,创建和撤消是应用于CORBA对象的。
;11.3.1 基本的请求调度;11.3.2 关键的POA实体;伺服程序
应用程序直接通过POA可以创建并注册伺服程序来具体化对象。同样,应用程序可以向POA提供伺服程序管理器对象,当需要执行一个请求时,POA就能创建伺服程序。应用程序甚至可以提供一个默认的伺服程序。与POA策略有关,在任何给定的时间,单个的伺服程序可以用POA注册来具体化一个和多个的CORBA对象。
POA通过目标对象的对象标识符与合适的伺服程序之间的映射来调度请求。一个伺服程序也可以通过对_this调用隐式创建一个新的CORBA对象,并为其注册一个伺服程序。;11.4 POA策略;POA策略;(4) PoicyList用来将指向各种派生Policy对象的引用分组来形成策略集。POA创建操作接收一个PolicyList类型的参数,这个参数可以将策略设置成新的POA。
策略对象是局部约束对象。也就是任何试图将它们的引用作为参数传递给标准的CORBA操作或通过ORB::object_to_string将它们转换成字符串的操作都将产生CORBA::MARCHAL异常。;11.4.1 CORBA对象生存期范围;11.4.2 对象标识符;11.4.3 对象到伺服程序之间的映射;当调用一个请求时,POA先提取出ObjectId,通常ObjectId嵌入在目标对象的对象引用中,然后使用该ObjectId在激活的对象映射中查找目标对象的伺服程序。在激活的对象映射中的每一个条目由一个ObjectId和一个指向一个伺服程序的指针的关联组成。保留ObjectId对伺服程序关联的每一个POA都有它自己的激活的对象映射。对于UNIQUE_ID,POA实现的规则是每一个对象标识符映射到一个不同的伺服程序。而在一个MULTIPLE_ID中,多个对象标识符可以映射到一个伺服程序。
对于Root POA,标准的对象标识符的唯一策略值是 UNIQUE_ID。Root POA要求一个独立的伺服程序来具体化每一个对象。
;11.4.4 策略工厂操作 ;11.5 POA创建;在IDL定义时需要注意:
POAManager允许应用程序控制一个POA中的请求流。
create_POA操作有三个参数。POA的名称、指向为要创建的POA控制请求流的POAManager的一个引用,为空将创建一个新的、创建POA策略列表。
create_POA 操作可能会产生两个异常。同名-AdapterAlreadyExists异常。策略未知或不一致-InvalidPolicy
;POA创建;也可以创建一分层的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类型;11.7 对象创建和激活;使用create_refernce_with_id时,应用程序提供Object_Id。这个Object_Id在应用程序域内表示对象的身份。
Object create_refernce(in CORBA::RepositoryId intf) raises(WrongPolicy);
Object create_refernce_with_id(in ObjectId oid, CORBA::RepositoryId intf) raises(WrongPolicy);;对象创建和激活;active_object操作要求目标POA具有值为SYSTEM_ID的一个IdAssignmentPolicy和值为RETAIN的一个ServerRetentionPolicy值。
activate_object_with_id操作要求目标POA具有RETAIN的一个ServerRet
文档评论(0)