(计算机科学与技术专业论文)持久状态服务研究及psdl编译器的设计与实现.pdf_第1页
(计算机科学与技术专业论文)持久状态服务研究及psdl编译器的设计与实现.pdf_第2页
(计算机科学与技术专业论文)持久状态服务研究及psdl编译器的设计与实现.pdf_第3页
(计算机科学与技术专业论文)持久状态服务研究及psdl编译器的设计与实现.pdf_第4页
(计算机科学与技术专业论文)持久状态服务研究及psdl编译器的设计与实现.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(计算机科学与技术专业论文)持久状态服务研究及psdl编译器的设计与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国防科学技术大学研究生院学位论文 摘要 当前,计算机已进入以网络为中心的计算时期。国际对象管理组织0 m g 制定的通 用对象请求代理框架c o r b a ( c o m m o n0 b j e c tr e q u e s tb r o k e ra r c h i t e c t u r e ) 已成为网 络环境下开发面向分布对象应用的主流标准。随着应用领域的扩展以及应用程度的加深, 对象状态的持久化变得越来越重要。如果沿用传统的关系数据库管理系统来存储持久数 据,需要编写大量的代码,并且容易出错,更不能适应分布式对象技术的发展。由此, o m g 提出了持久状态服务,使开发者不必关心访问存储系统的细节,很好地解决了持 久对象状态的存储问题。 本文以对象持久化技术为背景,对持久状态服务规范进行了深入地分析,其中包括; 持久状态服务框架模型、持久状态描述语言( p s d l ) 以及p s d l 的应用开发流程。在对 持久状态服务规范和p s d l 语法和语义的深入理解基础上,着重讨论了p s d l 编译器的 设计与实现。进而,在我校自主研制的遵循c o r b a 规范的中间件产品s t a r b u s 30 的基 础上,设计和实现了一种灵活的p s d l 编译器,其中包括p s d l 编译器的预处理、词法 分析、语法分析和后端代码生成。我们实现的p s d l 编译器的特点是它的语法树采用了 一种分布对象结构,这种结构能够在运行时动态地提供持久状态的描述,从而可能为将 来动态持久状态访问机制提供元信息描述的支持。 关键词:对象持久化;持久状态服务;持久状态描述语言;p s d l 编译器 国防科学技术大学研究生院学位论文 a b s t r a c t t h ec o m p u t e rt e c h n o l o g yh a sc o m et h ee r ao ft h ec a l c u l a t i o no fn e t w o r kc e n t r i ca sw e a l lk n o w , c o m m o n o b j e c tr e q u e s tb r o k e r a r c h i t e c t u r eo f o m gh a sb e c o m eo n eo f t h em a i n s t a n d a r d so ft h ed i s t r i b u t e da p p l i c a t i o n so nt h eo t h e rh a n d ,w i t ht h ee x p a n s i o no ft h ef i e l d s a n dt h ed e e p e no f t h ed e g r e e ,t h eo b j e c tp e r s i s t e n c eb e c o m em o r ea n dm o r ei m p o r t a n ti f u s i n g t h ec o n v e n t i o n a la p p l i c a t i o n ss t o r e dt h ep e r s i s t e n to b j e c t sb yt h er d b m s ,i tn e e d su sp r o g r a m t o om a n yc o d e s ,a n dt h em i s t a k e sw i l lt a k ep l a c em o r ee a s i l y w h a ti sm o r e ,i tc a l l tm e e tt h e r e q u e s t so f t h ed i s t r i b u t e do b j e c t o r i e n t e dt e c h n o l o g y s o ,o m gh a sd e f i n e dp s s ( p e r s i s t e n c e s t a t es e r v i c e ) t om a k eu s e r sp a yn oa t t e n t i o n st od e t n l so f t h es t o r a g es y s t e m s ,s ot h ep r o b l e m o f t h es t o r a g eo f t h ep e r s i s t e n to b j e c t s i nt h i sp a p e r , 1w i l la n a l y z et h es p e c i f i c a t i o no fp e r s i s t e n c es t a t es e r v i c eo nt h eb a s i so f t h et e c h n o l o g yo f o b j e c tp e r s i s t e n c e ,i n c l u d i n gt h em o d e lo f t h es t r u c t u r eo f p s s ,t h el a n g u a g e o fp s d l ,t h ep r o c e d u r eo fd e v e l o p i n gt h ea p p l i c a t i o n su s i n gp s d l w h a ti s m o r e ,1w i l l e s p e c i a l l y d i s c u s st h ed e s i g na n dt h er e a l i z a t i o no ft h e c o m p i l e ro fp s d lb a s i n go nt h e p r o f o u n du n d e r s t a n d i n go f t h es p e c i f i c a t i o no fp e r s i s t e n c es t a t es e r v i c ea n dt h eg r a m m a ra n d s y n t a xo fp s d l t h e n ,1w i l lg i v eaf l e x i b l ea n d e f f i c i e n tr e a l i z a t i o no ft h ec o m p i l e ro fp s d l o nt h eb a s eo f t h em i d d l e w a r e p r o d u c ts t a r b u s 3 0w h i c hc o n f o r m st ot h es t a n d a r do f c o r b 久 a n d1w i l li n t r o d u c et h ep r e t r e a t m e n t ,t h ea n a l y s i so f s y n t a x ,t h ea n a l y s i so fg r a m m a ra n dt h e c o d e sg e n e r a t i o nt h ef e a t u r eo fo u rc o m p i l e ri st h eu s i n go ft h es t r u c t u r eo fd i s t i l b u t e d o b j e c t si nt h et r e eo fs y n t a x ,a n db yu s i n gt h i ss t r u c t u r ew ec a ng e td y n a m i cd e s c r i p t i o no f p e r s i s t e n c es t a t ei nr u n s o ,w ec a np r o v i d es u p p o r tt ot h ed e s c r i p t i o no fm e t a i n f o r m a t i o nf o r t h ef u t u r ed y n a m i cm e c h i n i s m o f a c c e s s i n gp e r s i s t e n c es t a t e k e y w o r d :o b j e c tp e r s i s t e n c e ,p e r s i s t e n c es t a t es e r v i c e ,p e r s i s t e n c es t a t ed e s c r i b e l a n g u a g e ,p s d lc o m p i l e r 独创性声明 x s 1 9 7 3 本人声明所呈交的学位论文是我本人在导师指导下进行的研究工作及取得 的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含 其他人已经发表和撰写过的研究成果,也不包含为获得国防科学技术大学或其它 教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任 何贡献均已在论文中作了明确的说明并表示谢意。 学位论文题目:挂么迭查丛爱盟盟壅区! ;些缠逢墨监遮i 土豆塞塑 学位论文作者签名:茎2 重日期:减年7 月2 矿日 学位论文版权使用授权书 本人完全了解国防科学技术大学有关保留、使用学位论文的规定本人授权 国防科学技术大学可以保留并向国家有关部门或机构送交论文的复印件和电子 文档,允许论文被查阅和借阅;可以将学位论文的全部或部分内容编入有关数据 库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。 ( 保密学位论文在解密后适用本授权书) 学位论文题目: 挂冬达查腿盘啦受盔丞! k 编逢墨数遮i 土复塞翌 日期:加2 年,月功日 日期:弘z 年i 月2 - o 日 国防科学技术大学研究生院学位论文 第一章绪论 1 1 课题研究背景 1 1 1 对象持久化技术研究现状 目前,随着面向对象技术的蓬勃发展,使用面向对象的方法进行建模设计和编写程 序已经迅速成为新的应用开发模式。在许多的面向对象的程序中,对象都不可避免具有 自己的状态,而且对象的生命周期往往超越了创建该对象的进程,这就使得保持对象状 态的持久化成为一个越来越重要的要求。同时因为大多数应用程序需要处理持久数据, 在面向对象的应用开发中为对象添加持久性是使应用具有良好实用性的重要保证。 在面向对象的应用中实现对象持久状态有三类解决方法: 基于网关的对象持久化方法( c r o p ) 在这种方法中使用传统的非面向对象的数据存储方式,同时向所存储的持 久数据添加面向对象的可编程化访问。 当用户希望在现有的非面向对象数据存储的基础上使用面向对象编程模 型开发应用时常使用这种方法。同时,由于用来存储对象持久状态的数据存储 模式的不同,应用中的对象可能会具有不同的数据模型。因此c r o p 系统必须在 应用中的面向对象模式和非面向对象的数据存储模式之间进行映射转换。当运 行时,这些系统将把对象由数据存储时的表现方式转换为应用相关的表现方式。 为了便于实现,g o p 系统使这个转换过程对应用程序员透明。下列几种系统使 用基于网关的对象持久化方法:v i s u a l a g ec + + d a t aa c c e s sb u i l d e r , s m x c 、 o b j e c t s t o r eg a t e w a y , p e r s i s t e n c e ,u n i s q l m ,g e m s t o n “g a t e w a y ,和 s u b t l e w a r e s q l 。这种方法必须是中间件方法,独立于数据和应用。 关系对象型的数据库管理系统方法( o r d b m s ) 在这种方法中使用流行的关系数据库模型,并通过向添加面向对象的模型 特性来增强这些数据库模型。 关系对象型的数据库管理系统方法的建立是基于扩展关系模型是满足新的 面向对象应用的的挑战最好的途径这样种前提。正如关系型数据库所表现的, 关系模型在实践中取得了巨大的成功,并且s q l 已经成为了全球性的标准。因 此关系对象型的数据库管理系统在保存关系型数据库管理系统成功技术的基础 上通过增加面向数据对象模型和查询语言增加对面向对象数据模型的支持。这 种持久状态服务解决方法必须自顶向下,以数据为中心。 第l 页 里堕型兰垫垄查兰竺茎竺堕兰些笙兰一 面向对象型的数据库管理系统方法( o o d b m s ) 在这种方法中通过为面向对象编程语言中的对象添加持久支持实现对象持 久状态。 此种方法基于为对象添加持久性的最好方法是使应用在面向对象编程语言 中的对象持久化的原理。因为o o d b m s 在面向对象编程语言中有自己的根结 点,它们经常被称为持久性语言编程系统。但是,由于面向对象型的数据库管 理系统远远不是简单地在任何个面向对象的编程语言中为对象添加持久性t 同时因为由于历史的原因,很多面向对象的d b m s 是设计来满足c a d 或c a m 设计的需要,在这些应用中,快速访问控制、版本和长事务非常重要。因此, 面向对象型的数据库管理系统支持具有如支持多种编程语言对象持久性、数据 分配、高级事务模型等多种特性的面向对象型的数据库应用。这种持久状态服 务解决方法必须自顶向下,以应用为中心。 在现有的大多数对象持久状态实现中,应用程序多使用关系数据库管理系统 ( r d b m s ) 来存储持久数据,但采用这样的方法需要编写大量的代码,具有很大的工作 量,并且容易出错,更重要的是不符合对象建模的思想,从而不能适应面向对象技术发 展的要求。同时,随着计算机和通信技术的发展,分布计算系统因其良好的性能价格比 而逐渐普及。对象管理组o m g ( o b j e c tm a n a g e m e n tg r o u p ) 的通用对象请求代理框架 c o r b a ( c o m m o no b j e c tr e q u e s t b r o k e ra r c h i t e c t u r e ) 成为分布式面向对象应用的主要企 业标准。为解决对象持久状态特别是分布计算环境下的对象持久状态的问题,o m g 在 1 9 9 7 年1 2 月定义了持久对象服务p o s ( p e r s i s t e n t o b j e c ts e r v i c e ) 10 版本,但在该持久 对象服务中,规范不明确,所含的接口非常复杂,对当前或未来的实现的扩展缺少必要 的支持,同时它己不再符合当前的持久性需要,因而很少被支持或实现。为了解决这些 问题并适应现有的存储技术,o m g 在p o s 的基础上进行了改进,于2 0 0 0 年1 2 月发布 了p o s 20 版本,即持久状态服务p s s ( p e r s i s t e n ts t a t es e r v i c e ) 。 1 1 2 持久状态服务概述 持久状态服务是一个全新的服务,它与持久对象服务并不兼容,是c o r b a 提供的 众多服务中很重要的一个,它的提出主要为了实现下列两个目的: 对象状态的持久化 使对象有效地保存所具有的状态,而不受到进程生命周期的影响 数据存储无关性 使对象状态的数据存储与所使用的数据库无关 第2 页 国防科学技术大学研究生院学位论文 持久状态服务p s s 与i d l 类型系统和对象事务服务o t s ( o b j e c t t r a n s a c t i o ns e r v i c e ) 紧密的结合在一起,它处于应用开发层与d b m s 或文件系统的中间,使得访问异构存储 系统的细节对用户透明。同时,持久状态服务通过为组件开发人员定义的持久a p i ,保 证用户透明地访问异构存储系统,而不必关心访问的细节,从而在下列数据量庞大、基 于分布异构数据系统等应用中起到重要的作用: 大型c a d 辅助设计 地理信息系统( g i s ) 基因工程( g e n o m ed b s ) 已有o r b i x 2 0 0 0 、o p e n o r b 、t a t a n k a o r b 、m i c o 等多个应用系统支持p s s 持久 状态服务,几种主要应用系统的特性如下所述: 0 r b i x 实现了标准的c o s p e r s i s t e n t s t a t e 模块,并且在i t _ p s s 模块中添加了属性 的扩展通过p s s 与o t s 的紧密结合还方便了移动应用的开发,并为如数据库 系统这样的持久数据提供了事务访问机制。 o p e n o r b 该系统完全用j a v a 语言开发,并且通过提供了p s d l 编译器、文件联接 器、数据库联接器和存储器联接器来实现对象持久状态服务。 1 1 3p s d l 概述 由上文所述,持久状态服务p s s 为对象持久状态的保存提供了良好的解决方案,而 为了满足应用开发者利用持久状态服务p s s 来开发相关应用时描述和定义所需的存储对 象的需要,持久状态服务提供了一种中性的定义语言持久状态定义语言p s d l , p s d l 语言有如下特性: p s d l 是i d l 语言的超集,和i d l 语言一样,均为声明性语言而不是一种可 编程语言 p s d l 遵循与i d l 相同的词法规则( 除去新增加的关键字) ;它的语法是对i d l 语法的 扩展,加入了新的结构来定义存储对象和存储h o m e 。 一个p s d l 文件可以包含任何i d l 结构,并且任何本地i d l 操作均可以接 受i d l 类型的参数。 一个包含p s d l 结构的源文件的扩展名必须是“p s d l ”,文件c 。s p e r s i s t e n t s t a t e p s d 咆 一 里堕型兰垫查奎兰堕蚕生堕兰垡丝奎 _ _ _ - i - _ _ - - _ _ _ i _ _ - _ _ _ _ _ _ _ _ - _ _ _ _ _ _ - _ _ _ _ - i _ _ - _ 一一 。 含p s d l 类型定义,被隐式地包括进任何p s d l 定义文件。 在持久状态服务应用的开发流程中,用户将用p s d l 语言编写文件和定义存储对象, p s d l 编译器对这些p s d l 文件进行处理,并生成目标语言的文件,实现对存储状态的管 理,使开发者不必关心访问存储系统的细节。由此可见,p s d l 编译器是持久状态服务中 重要的开发工具。 我们正是在这样的背景下,依照o m g 制订的p s s 规范,基于自主研制平台,开展 p s d l 编译器的设计与实现的研究工作。 1 2 课题研究主要开展的工作 基于以上的背景,我的课题研究主要开展的工作如下: 研究对象持久化问题。 研究o m g 持久状态服务,分析和理解该服务的基本概念、原理和使用。 设计并实现持久状态服务中的p s d l 编译器,使其能对p s d l 源文件进行编译, 并对不符合p s d l 语法规范的部分进行检测和报错。 在分布式应用开发平台上测试p s d l 编译器。 1 3 论文结构 本文组织如下: 1第一章介绍了课题的背景、课题来源及目标等基本内容: 2 第二章介绍了持久状态服务的概念以及如何使用该服务定义和访问持久对象; 3 第三章介绍了持久状态描述语言的设计及其实现,并通过一个例子来说明如何用持 久状态描述语言开发一个应用; 4 第四章介绍了持久状态描述语言编译器的设计与实现,对该编译器的前端,后端及 语法树三部分进行了详细的描述。 5 第五章总结了课题所作的工作,并展望了课题的下一步工作。 6 最后是致谢和参考文献。 第4 页 国防科学技术大学研究生院学位论文 第二章持久状态服务 在这一章中,我们将介绍持久状态服务的基本概念及如何使用持久状态服务定义和 访问持久对象。 2 1p s s 元型 p s s 是为c o r b a 对象实现的开发者提供的一种服务,它提供了一种维持对象持久 状态的机制,使得访问异构存储系统的细节对应用开发者透明。持久状态服务的主要功 能是将持久信息作为存储对象存储起来,使c o r b a 对象可以持久化它们自身的状态。 p s s 处于服务方应用层与底层持久存储系统之间,它对客户端是透明的,即客户方并不 知道一个对象实现是否使用了该服务。示意图如图21 所示: 图2 1基于p s s 的应用系统示意图 图2 2 显示了一个拥有一到多个c o r b a 对象实现的c o r b a 服务器。该服务器提 供了一个外部接口,即通常所指的由1 d l 语言描述的c o r b a 对象对外提供的服务接口; 而服务器内部的伺服程序是通过所谓内部接口访问一个或多个d a t a s t o r e 的。p s s 关心的 就是这个内部接口。 ,一 。 - 。i 。- 。0 0 ;l 、二j 1 :- j 豢豢麟麟蘩戮 t 。黩箩孵每n t 彝菇嚣薯赫j 善l 二 。二- 、= = = :。# :t - i 、 一薹一薹。:曩鬟蔫薹薯i 鳓: 溪瀵蘩辫。j 蔼黔! 繁誊鹫 :g b g l 接口一内部接口。 图2 2 一个c o r b a 服务器的外部与内部接 国防科学技术大学研究生院学位论文 2 2p s s 结构 持久状态服务的结构如图所示: 进程卧, 图23 持久状态服务基本概念 下面介绍一下持久状态服务的基本术语。 1 ) 存储对象: 一类存储持久信息的对象。 2 ) 对象实例: 存储对象映射到具体编程语言的一个对象实例,它用于代表一个对象实例的状态。 3 ) 存储对象i n c a r n a t i o n : 存在于存储器中的存储对象实例称作存储对象i n c a r n a t i o n 。 4 ) 存储h o m e : 用来创建、删除和管理持久对象实例的一类对象。 5 ) 存储h o m e 实例: 具有h o m e 类型的某个对象称为存储h o m e 实例。 6 ) d a t a s t o r e 国防科学技术大学研究生院学位论文 用来存放存储h o m e 的数据管理实体,可以是一个d a t a b a s e ,一个文件系统,或是关 系d a t a b a s e 中的一张表。 7 ) c a t a l o g 提供和管理存储h o m e 实例的实体,分为会话和会话池两种类型。 8 ) 会话( s e s s i o n l : 为访问一个存储对象,在服务方进程与拥有包含该存储对象的存储h o m e 的 d a t a s t o r e 间需要建立一个逻辑连接。这种逻辑连接叫做会话,它可以提供对一个以 上d a t a s t o r e 的访问。 9 ) 关键字( k e y ) : 存储对象的一个状态成员。同一个h o m e 中,关键字能对不同的存储对象提供 唯一的标识。 1 0 ) 存储h o m e 族: 在一个d a t a s t o r e 中,一个存储h o m e 管理它自己的存储对象及它的所有派生存 储h o m e s 的存储对象。一个存储h o m e 及其所有派生存储h o m e s 被称为一个存储 h o m e 族。 总的来说,持久状态服务为保证对象状态的持久性,将持久信息作为存储对象存储 在存储h o m e 中,由存储h o m e 来管理存储对象。而存储h o m e 又存储在d a t a s t o r e 中,由 d a t a s t o r e 负责管理存储h o m e 。 同时,为了使用存储对象,服务开发者为该存储对象针对各种具体编程语言生成相 应的存储对象实现,并将存储对象实例绑定到对应的存储对象上。为了管理存储对象实 例,相应的产生面向具体语言的存储h o m e 实例。c a t a l o g 用于对次p s s 客户会话所涉 及的存储h o m e 实例进行管理。一个存储对象实例可被绑定到一个d a t a s t o r e 中的存储实 体上,并且提供到该存储对象状态的直接访问:修改该实例就会引起d a t a s t o r e 中相应存 储实体的修改。 每个存储对象有一个存储类型,该种类型定义了存储对象实例的状态成员和可以 进行的相应操作。存储类型是可以继承的。 一个存储h o m e 管理的所有存储对象实例的类型相同,存储h o m e 的类型定义了存储 对象的类型以及操作和关键字。存储h o m e 的类型也是可以继承的:某基类存储h o m e 管理的存储对象类型必需为派生类存储h o m e 管理的存储对象类型的基类型。 国防科学技术大学研究生院学位论文 2 3d a t a s t o r e 模型 d a t a s t o r e 在物理上,可以是一个文件系统,关系数据库管理系统,面向对象数据库 管理系统,或对象一关系数据库管理系统,甚至可以是一片内存。 从概念上讲,d a t a s t o r e 是一组存储h o m e 。每个存储h o m e 都有一个类型。在一个 d a t a s t o r e 中,存储h o m e 是独一无二的:一个d a t a s t o r e 中不能存在个以上相同类型的 存储h o m e 。 存储h o m e 中包含存储对象。每个存储对象有一个唯一的i d ( s h o r t p i d ,在存储h o m e 中唯一) 和个全局m ( p i d ) ,p i d 定义的存储对象范围就是所有能被同一c a t a l o g 访问 到的存储对象。 每个存储对象有一个类型,定义该种类型的存储对象实例的状态成员和操作。类型 是可以继承的。 一个存储h o m e 中所有存储对象类型相同,存储h o m e 的类型定义了存储对象的类型 以及操作、关键字。存储h o m e 的类型也是可以继承的:基类型存储h o m e 中的存储对象 的类型必为派生类型存储h o m e 中的存储对象类型的基类型。 在一个d a t a s t o r e 中,一个存储h o m e 管理它自己的存储对象及它的所有派生存储 h o m e s 的存储对象。一个存储h o m e 及其所有派生存储h o m e s 被称为一个存储h o m e 族。 存储h o m e 可以保证它的存储对象类型所定义的状态成员中的若干个成员可唯区 分该存储h o m e 所管理的存储对象,这些状态成员称为个关键字。一个存储h o m e 可含 有任意个关键字。 2 4 持久对象定义模式 当利用p s s 开发应用时,需要由开发者定义所需存储对象和存储h o m e 。 p s s 提供两种方法定义d a t a s t o r e 模式( s c h e m a ) 及该模式下d a t a s t o r e 中存储对象实 例的应用程序接口: 采用持久状态定义语言( p e r s i s t e n c es t a t ed e f i n el a n g u a g e ,简称p s d l ) : 直接使用某种编程语言透明持久方式( t r a n s p a r e n tp e r s i s t e n c e ) 。 2 4 1 透明持久模式 采用透明持久方式时,可以直接通过常用的编程语言结构实现存储对象的定义。例 如,可以用j a v a 语言定义一个j p e r s o n 接口,如下所示: 国防科学技术大学研究生院学位论文 j a v a p u b l i cc l a s sj p e r s o n l m p li m p l e m e n t sj p e r s o n ( p r i v a t el o n g _ s s n ; p r i v a t es t r i n g n a m e ; p r i v a t es t r i n g p h o n e n u m b e r ; p u b l i cl o n gs o c i a l s e c u r j t y n u m b e r ofr e t u r n s s n ) e t c ) 但这种方式存在一定的局限性:不能定义面向特定应用的存储h o m e ;在每个d a t a s t o r e 中只能定义个存储h o m e 族。 2 4 2p s d l 模式 p s d l 是对o m gd l 的扩充,p s s 实现者要提供编译p s d l 定义的接口到目标语 言代码的工具。 p s d l 类型模型与j a v a 语言十分相似:一种p s d l 存储类型( 类似一个j a v a 类) 可 以实现任意多个抽象存储类型( 类似j a v a 接口) ,并且可以继承至多一个其它的存储类 型。同样,个p s d l 存储h o m e 可以实现任意多个抽象存储h o m e ,并且可以继承至多 一个其它的存储h o m e 类型。 i ii nf i l ep e o p l e p s d l a b s t r a c ts t o r a g e t y p ep e r s o n ( r e a d o n l ys t a t el o n gs o c i a i s e c u r i t y _ n u m b e r ; s t a t es t r i n gf u l in a m e ; s t a t es t r i n gp h o n e _ n u m b e r ; ) a b s t r a c ts t o r a g e h o m ep e r s o n h o m eo fp e r s o n p e r s o nc r e a t e ( i nl o n gs s f l ,i ns t r i n gf u l l n a m e ,i ns t r i n gp h o n e ) ; ) ; s t o r a g e t y p ep e r s o n l m p li m p l e m e n t sp e r s o no ; s t o r e g e h o m ep e r s o n h o m e l m p lo fp e r s o n l m p li m p l e m e n t sp e r s o n h o m e o 2 5 持久对象访问 2 5 1 持久对象访问基本模式 前文对持久对象的定义进行了相关论述,本节重点讨论和持久对象访问有关的问题。 第9 页 国防科学技术大学研究生院学位论文 对于所有存储对象实例来说,均被被存储h o m e 实例所管理,而后者本身又被c a t a l o g 所 管理。c a t a l o g 分为两种:会话和会话池。与会话池不同,会话提供编程接口给用户来控 制会话的分配、以及会话一事务的关联。下文将对c a t a l o g s 进行简要的分析。 另外,对存储对象的访问可以是事务性的,或者是非事务性的,这取决于是否采用 了事务性会话( 或事务性会话池) 。有事务和无事务的编程模型有细微的差别:含有事务, 应用程序必须启动并结束事务以保证事务的原子性;没有事务,则不需要这种间隔。 2 5 2c a t a l o g s c a t a l o g 是实现本地接口c o s p e r s i s t e n t s t a t e :c a t a l c i g b a s e 的本地对象,它在p s s 系统 中有下列两部分功能: 负责管理存储h o m ei n c a r n a t i o n s 为c a t a l o g 定义多个属性和方法负责管理存储h o m ei n c a r n a t i o n s ,如通过只 读属性a c c e s s m o d e 返回c a t a l o g 的访问模式,通过f i n d s t o r g e _ h o m e 获得存 储h o m e 实例,并通过f l u s h 操作引导p s s 实现将对该c a t a l o g 管理的存储对 象已缓存的更改写入磁盘等。 如图2 4 所示,对应一个或者一组与后台数据库的逻辑连接 通过与数据库的会话连接进行与关系数据库管理系统的交互,完成对存储 对象更改的保存和读取。 2 5 3c o n n e c t o r c a t a l o g ps q l * , r d b m s “ 图2 4c a t a l o g 与数据库之间的逻辑连接 会话和会话池是由c o n n e c t o r 创建的,c o n n e c t o r 是代表一个给定p s s 实现的本地对 象,应用程序可通过调用c o r b a :o r b 上的对象操作r e s o l v e _ i n i t i a l r e f e r e n c e s 获得 c o n n e c t o r a 每个c o n n e c t o r 对应一种d a t a s t o r e 的具体实现。它用来管理s t o r a g e h o m e 国防科学技术大学研究生院学位论文 f a c t o r i e s ,s t o r a g e t y p ef a c t o r i e s ,以及c a t a l o g s 。同时c o n n e c t o r 也提供了一组操作,通 过这些操作用户可以完成下列功能: 将各种工厂对象注册到c o n n e c t o r 。 创建不同的c a t a l o g ( s e s s i o n ,s e s s i o n p o o l 等) 。 创建一个基本的、非事务性的会话,同时根据会话访问模式提供与否决定是否 引发标准异常p e r s i s t e n ts t o r e 。 操作一个新的会话池。 返回某一个会话或所有由当前c o n n e c t o r 创建的、并与注册到给定事务的资源相 关联的事务性会话。 2 5 4 显式会话管理 图2 5c o n n e c t o r 示意图 p s s 会话是指一个进程与若干d a t a s t o r e 间的逻辑连接,p s s 中共有两种会话:用于 类似文件访问的基本会话、以及用于事务性访问的事务性会话。下面重点分析事务性会 话的几个主要特点: 事务性会话是一个提供到存储对象的事务性访问的特殊的会话,它支持本地接 口c o s p e r s i s t e n t s t a t e :t r a n s a c t i o n a l s e s s i o n 。 在某一给定时刻,一个事务性会话可以与一个或不与任何资源对象( 一个 d a t a s t o r e ) 相关联。 会话一事务关联可以处于a c t i v e 、s u s p e n d e d 或e n d i n g 状态,由一个事务性会话 管理的i n c a r n a t i o n 的状态成员只有在该会话与个资源的关联处于a c t i v e 状态 时才可用。 一个资源在它的整个生命周期只与一个会话关联,但若采用某些高端数据库产 品,同一资源可能同时与几个会话相关联。 国防科学技术大学研究生院学位论文 通过s t a r t 操作开始一个会话一资源关联,通过s u s p e n d 操作挂起一个会话一资 源关联,e n d 操作则关闭一个会话一资源关联。 2 5 5 隐式会话管理 图25 事务性会话状态图 隐式会话管理不对会话进行显式地开始、挂起、结束等控制,而是通过会话池来进 行。会话池是指实现本地接口c o s p e r s i s t e n t s t a t e :s e s s i o n p o o l 的本地对象,它具有下列功 能: 如果会话池的事务策略是n o n _ t 鼬n s a c t i o n a l ,那么对那些p d 包含在参数 p i d s q b 的活跃的i n c a r n a t i o n ,通过相关操作持久化对它们的所有修改,而不考虑调 用它的线程的事务上下文。 如果会话池的事务策略是:t r a n s a c t i o n a l ,并且如果调用它的线程与一个事务 上下文关联,则对那些p i d 包含在参数p i d s 中的i n c a r n a t i o n ,通过相关将把这些 i n c a r n a t i o n 存进底层的d a t a s t o r e ,使得在当前事务性范围内所作的所有状态修改持 久化,又如果调用它的线程不与一个事务上下文关联,那么将引发标准异常 t r a n s a c t i o n a l _ r e q u i r e d 。 如果会话池的当前的事务策略是t r a n s a c t i o n a l ,并且调用它的线程不与 个事务上下文关联,那么将引发标准异常t r a n s a c t i o n a l _ r e q u i r e d 。 国防科学技术大学研究生院学位论文 第三章持久状态描述语言 在这一章中,我们将详细介绍持久状态语言是如何存储对象的,并通过一个例子介 绍如何使用持久状态描述语言开发一个应用实例。 3 1p s d l 开发者可使用p s d l 定义存储对象和存储h o m e 。 p s d l 是o m gi d l 的一个超集:存储对象可以拥有任何i d l 类型的状态成员和操作参 数。p s d l 与i d l 类似,是一种声明性的语言,而不是一种编程语言。 p s d l 遵循与i d l 相同的词法规则( 除去新增加的关键字) ;它的语法是对i d l 语法的 扩展,加入了新的结构来定义存储对象和存储h o m e 。 3 2 关键字 p s d l 与i d l 不同的关键字如下所示 a s 、f a c t o r y 、i m p l e m e n t s 、k e y ,o f 、p r i m a r y 、r e f 、s c o p e 、s t a t e 、s t o r a g e h o m e ,s t o r a g e t y p e , s t o r e s 、s t r o n g 。 3 3p s d l 功能分析 p s d l 使用以下四种结构来对持久对象进行定义 抽象存储类型( a b s t r a c ts t o r a g e t y p e ) 抽象存储h o m e ( a b s t r a c ts t o r a g e h o m e ) 存储类型( s t o r a g e t y p e ) 存储h o m e ( s t o r a g e h o m e ) 其中,s t o r a g e t y p e 描述数据在这种类型存储对象总是如何存储的,s t o r a g e h o m e 描述 一个存储对象的容器,每个s t o r a g e h o m e 由个s t o r a g e t y p e 定义,而且包含存储对象的 类型只能是定义它的s t o r a g e t y p e 的类型。 3 3 1 抽象存储类型 一个存储对象可以同时拥有状态和行为,相应地,个存储对象的抽象存储类型定义 了状态成员和操作。 第1 3 页 国防科学技术大学研究生院学位论文 存储类型的语法和i d l 接口的语法恨相似,但是和接口不同的是,一个抽象存储类 型的定义中不能包含常量操作。用户可用下面的语法定义一个抽象存储类型: a b s t r a c ts t o r a g e t y p ea b s t r a c t - s t o r a g e t y p e - n a m e 【:b a s e a b s t r a c t s t o r a g e - t y p e 】 ( 【o p e r a t i o n s p e c ;】_ _ _ fs t a t e - m e m b e r - s p e c ;】 ) ; 例如: a b s t r a c ts t o r a g e t y p e a c c o u n t b a s e ( s t a t eb a n k d e m o :a c c o u n t l da c c o u n t _ i d ; s t a t eb a n k d e m o :c a s h a m o u n t b a l a n c e ; ) ; 下面详细介绍一下抽象存储类型语法的各个组成部分: 1 继承 一个抽象存储类型可继承任意多的基抽象存储类型,其中包括菱形继承。用相同的 名字继承两个成员( 操作或状态) 是非法的。 2 状态成( s t a t em e m b e o 存储对象地状态成员描述了对象的数据,用户可用下面的语法定义一个状态成员: 【r a a d o n l y 】s t a t et y p e - s p e cm e m b e r - n a m e ; 对于每个状态成员,c + + 映射会提供a c c e s s o r 0 函数用来读写状态成员的值。状态 成员的类型可是任意的i d l 类型和抽象存储类型的引用。 3 操作 抽象存储类型中的操作的定义与i d l 接口中存在的定义相同。它的参数可以是任何 有效的i d l 参数或抽象存储类型引用。 4 继承的操作 所有的抽象存储类型都隐式地从c o s p e r s i s t e m :s t o r a g e o b j e c t 继承。 m o d u l e c o s p e r s i s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论