对象关系映射引擎的设计与实现_第1页
对象关系映射引擎的设计与实现_第2页
对象关系映射引擎的设计与实现_第3页
对象关系映射引擎的设计与实现_第4页
对象关系映射引擎的设计与实现_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

1、东南大学硕士学位论文对象关系映射引擎的设计与实现姓名:周源申请学位级别:硕士专业:软件工程指导教师:吴介一;犹嘉槐20050705!摘要随着企业事务的复杂化,大量的应用程序采用领域模式()来进行软件开发。领域模式()包含了一组特定的对象集合,这些对象集合是对业务概念(事务流程或事务逻辑)的抽象,并对在其中运行的业务环境实现了模型化。这组与业务概念紧密联系的对象是设计基于的应用程序的核心。由于这种业务对象所需要的存储时间经常会超出创建这些对象的应用程序的生存时间,如何对这些超出生存周期的对象进行存储就成为对象持久化技术亟待解决的问题。而另一方面,关系数据库做为集中存储各种数据的解决方案,对于这类

2、业务对象本身无法进行直接的存储。在对象数据和关系数据之间,出现了无法进行有效关联的技术障碍。对于有关系数据而言,本身是一种平面的数据组织结构,而对象数据无论是在单个数据上还是类之间的继承、聚合关系都远比关系数据要复杂很多。这样,如何存储这样的业务对象,并进行对象关系数据的高效匹配,就催生了不同的解决方案。就目前,业界采用了多种不同的方法来实现对象持久化,各种方法在性能、接口、扩展性上有很大的差别。其中一种较为主要的应用,是利用的硬编码技术来实现对象的持久性和对象关系的相互关联。这种方法无论从效率还是易用性上来看,都无法满足大型软件开发的需求而另一种则是通过对象关系中间件的形式来提供相应的服务。

3、开源数据存储中间件就是一种对象关系映射()工具。但是这样的工具由于缺乏标准性的支持,在兼容性上有着先天的不足。)一是由标准委员会制定的对象关系存储标准。在这组标准的定义之下的数据存储中间件,可以将对象高效的映射到关系数据库中。并且,由于采访了国际统一的标准接口,在兼容性和易用性上都有很大的优势。(论文从分析规范切入,以大型关系数据库为基础,讨论如何在数据库之上设计并实现一个符合标准的数据存储中间件的对象关系映射引擎。并在文章的最后,给出简短的应用例程。【关键词】对象关系映射对象持久化关系数据库数据对象,、,(),:符号、变量、缩略词等本论文专用术语的注释表符号、变量、缩略词等本论文专用术语的注

4、释表:一持久化管理器工厂类:一第二类对象:一第一类对象:一缺省数据存取组:虚拟机:一状态管理器类:一持久化对象类,持久化接口,可持久化特性:一持久化管理器类:数据源代码增强改造代码改造器管理环境非管理环境:元数据东南大学学位论文独创性声明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得东南大学或其它教育机构的学位或证书而使用过的材料。与我同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。研究生签名:叠拳鎏:日期:重里呼目日东南大学学位论文

5、使用授权声明东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位论文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质论文的内容相一致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布(包括刊登)论文的全部或部分内容。论文的公布(包括刊登)授权东南大学研究生院办理。研究生签名:匿鎏:导师签名:第一章绪论第一章绪论课题背景和意义对于目前使用广泛的面向对象软件开发技术,一般是针对领域模式()来进行的。领域模式()包含了一组特定的对象集合,这些对象集合是对业务概念(事务流程或事务逻辑)的抽象。然后,在各种应用程序的开发需求下,往往需要对超出创

6、建这些对象的应用程序的生存时间的对象进行处理,这样传统的处理方法无法有效的对这些超出生存周期的对象进行存储。从关系数据库的角度看来,做为一宜以来集中存储各种数据的解决方案,也出现了类型不匹配的问题。关系数据库无法对这类业务对象进行直接的存储。也就是说,在对象数据和关系数据之间,是有一定关联的技术障碍的。对象数据无论是在单个数据上还是类之间的继承、聚合关系都远比关系数据要复杂很多。而关系数据在数据结构和类型映射上,都有很大的困难。在这种情况下,业界也采用了很多不同的方法来解决如何存储这样的业务对象,并进行对象关系数据的高效匹配的解决方案。就目前,业界采用了多种不同的方法来实现对象持久化,各种方法

7、在性能、接口、扩展性上有很大的差别。其中种较为主要的应用,是利用的硬编码技术来实现对象的持久性和对象关系的相互关联。这种方法无论从效率还是易用性上来看,都无法满足大型软件开发的需求。而另一种,则是通过对象关系中问件的形式来提供相应的服务。开源数据存储中间件就是一种对象关系映射()工具。但是,这样的工具由于缺乏标准性的支持,在兼容性上有着先天的不足。()是由标准委员会制定的对象关系存储标准。在这组标准的定义之下的数据存储中间件,可以将对象高效的映射到关系数据库中。并且,由于采访了国际统一的标准接口,在兼容性和易用性上都有很大的优势。)规范,编号为(:呵叫吼?)在年发布。是的全名,这是一种轻量级的

8、对象持久化标准。提供了一系列的标准接口,用户在处理对象持久化问题时可以完全透明的存取对象,无需考虑底层用以何种格式、方法进行存储。自标准发布以来,她彻底改变了开发人员对于对象持久化的看法。首先在开发人员和数据存储之间提供一个中间映射层,屏蔽了许多具体的细节。其次它简化安全控制并提供了前所未有的扩展性,可以适应从小型的嵌入式系统到复杂的企业级应用。所提倡的以为中心遍历、操纵持久化对象,使开发人员可以只关注于业务逻辑()设计而无需依赖底层的持久化机制。一经推出就席卷社区,开发人员以极大的热情学习、应用这种简单而强大的技术。在规范正式发布之前,已有数十个商业或开源的产品发布供开发人员选择使用。利用开

9、发人员可以创建灵活的应用,并可以同无缝的整合在一起。利用的透明特性,广泛的适用于各种关系数据库,对象数据库以及其他任意的数据存储方式。对于客户端服务器结构的两层应用,和多层架构的服务器级的应用都完全支持。论文的所傲的工作课题来源课题来源于作者在上海实方软件有限公司”实习期间所负责的研发项目一一(以下简称)。上海实方软件公司是一家专业的数据库引擎提供商,公司的主要产品是大型国有关系数据库。作为一家国产数据库管理系统供应商,拥有自己独立的数据库技术,特别在锁处理方东南大学硕士学位论文面有自己独到的地方。公司获得了科技部、上海信息委在资金、政策方面的大力支持;年获得科技部”中小型企业技术创新基金”(

10、年度第批基金项目);年获得上海市信息委立项。年上海市软件评测中心对进行了性能测试和超负荷测试,在所使用的中小型服务器上达到了较高的性能指标。是一个严格参照所制定的规范标准,在数据库上实现的透明的对象持久化框架。按照同底层数据存储的关系以及规范所要求实现的,分为上下两层。论文主要内容及所做的工作论文主要介绍下层模块的设计与实现,下层模块的核心是一个对象关系映射()引擎,负责向上层(状态管理模块)提供一个统一的接口,屏蔽底层数据库的差异,同时将上层所提出的请求映射到底层的具体存储操作。这里采用这个关系数据库作为底层存储,并且通过所提供的接口访问底层的数据库。论文主要详细论述了下层的设计和实现技术,

11、也就是对象关系映射引擎的设计与实现。上层不属于论文的讨论范围,但由于两者关系十分的紧密,所以也将会对两者相联系的接口有所介绍。论文描述了项目底层架构的主要理论基础以及在具体实践中采用的工程设计方法和实现技术。通过对于规范的分析,阐述了实现一个符合规范的产品所需要的遵守的原则和技术条件。具体的工程实践中,设计主要包括对数据库以及接口的分析,对标准规范的分析,对象关系映射模式对映射操作的设计。实现方面主要阐述实现对象关系映射引擎的软件架构的具体步骤和关键技术。论文相关的技术项目由两个全职的软件工程师进行开发,采用原型开发模型(),每次开发都是以上一次开发的成果为基础,进行迭代开发。开发过程中遵循)

12、(编程准则,以测试驱动为原则进行编码“。软件的配置管理使用的配置工具和版本控制工具;开发工具使用并建构在上。在第一次迭代过程中需要实现最基本的功能,只支持的简单类型,单表的映射,对持久化对象的基本操作及查询,实现可达算法。不支持、对象之间继承关系,不支持以及复合主键。提供对于数据库的支持,同时为了便于调试,支持数据库用作内嵌数据库供调试使用。在第二次迭代过程,完成复杂类型的支持,支持,继承,、复合主键。第三次迭代进行代码和性能优化。映射引擎的实现是是建立在多种的技术之上的,涉及对接口的包装;对象关系映射规则的定义;数据库差异的屏蔽以达到透明的数据库访问;语句的包装:数据类型同数据类型以及数据类

13、型之间的映射、转换等。开发对象关系映射引擎所使用的主要技术,可以归纳成最为关键的两个技术:数据库对象包装技术和对象关系映射技术。数据库对象包装技术是将数据库相关的对象包装成对象,供上层统一的进行访问,事实上就是将所提供的各种概念进行包装。其中包括对数据库中的列、键、表、索引、,等对象。对象关系映射技术主要是将访问数据库的操作进行重组和封装,建立持久化对象与数据库对象之间的映射机制。提供访问接口供内部实现的上层调用,使得持久化对象可以透明的存取数据库中的内容。还包括对,的封装,将持久化对象的域映射表中的列,对特殊数据类型的处理等。整个项目的开发工作分为两步:第一步是对标准的研究,研究其所有标准的

14、设计与使用方法,分析其参考实现的架构原型和主流关系数据库的实现方法;第二步是在第一步的基础上,针对数据库,对现有的驱动进行封装,设计并实现的下层,也就是对象关系映射()引擎。使数据库具备符合标准的接口,这也是项目的最终目的。第一章绪论课题追踪了目前对象持久化最先进的技术,参照了目前最流行和主要的产品,并架构在先进的国有大型数据库之上,从的内部出发,逐步完成整个数据访问持久层的设计与实现,所以从研究方向和内容上来看,是具体高度理论性和应用性的。论文结构为了条理清晰,循序渐进地阐述的设计与实现,论文分为五章:第一章绪论,阐述论文的选题背景,课题研究的内容、文章的组织结构等。第二章面向对象编程与持久

15、化,分析面向对象编程与业务对象的关系,阐述对象持久化所面对的主要问题分析对象实现持久化的主要技术方案和发展历史。并对带来的优势进行分析。第三章规范分析,对规范中所定义的数据存储映射、连接管理、代码增强改造、可持久化类接、异常、事务同步、克隆语义、标识、安全性、可选特性等规范迸行分析。第四章设计与实现,分析和阐述下层实现的关键模块:数据库适配器,数据库操作请求、表抽象、映射机制、数据类型管理。第五章应用,给出个简短的实际应用。第六章总结,对论文已完成的工作做出总结,并对整个毕设做了简短回顾和评价。附录一系统需求及功能说明书,在文章的最后,附上了代表论文来源的上海实方软件公司的工程文档。东南大学硕

16、士学位论文第二章面向对象编程与持久化对象关系映射阻抗在面向对象的语言中,将内存中对象实例的状态保存在持久化介质上耗费了开发人员大量的时间和精力,而现实中将对象保存在关系数据库中一直是困扰各级开发人员的棘手难题。将对象化的数据存放在结构化的数据库中,将对象的状态映射到数据库中的列,更为困难的是如何表示接口,抽象类这些非实体类。关系数据库中无法直接表示对象之间的复杂关系,尤其是面对复杂的继承体系时尤为突出。这就是我们常说的对象关系映射阻抗()。如果采用传统的开发模式,工作流程如图所示,将对象的信息存储在数据库上完全有开发人员手工完成,将描述问题空间的信息映射到结构化的数据库中,这就要求开发人员不仅

17、需要熟悉业务逻辑(),还需要了解具体的数据库编程。更为重要的是,需要针对不同的开发设计不同的映射规则,在底层的数据存储方式改变后代码也需要进行巨大的修改。这不仅大大的增加了开发的成本,还使得代码难以维护,业务逻辑同数据库设计紧密相关。创建一个对象图传统的持久化工作流程利用提供的透明的持久化特性,工作流程如图所示,开发人员无需关注底层采用何种存储方式,使用何种事务管理结构和连接方式,也无需指定存储在具体的那个表或那个数据库中。自动的将用户指出的所需要保存的持久化状态映射为底层具体的结构自动保持用户所使用的对象实例同底层中的数据保持一致:用户可以采用面向对象的方式查询符合条件的存储的对象。开发人员

18、可以在真正的意义上抛开数据的存储和对象的持久化,将具体的工作委托给完成,只需要使用非常简单的提供的。将开发人员从繁琐的数据处理工作中解脱出来,专注于业务逻辑的设计,实现了透明的存储。第二章面向对象编程与持久化存储对象读取对象图透明的持久化工作流程与持久化将运行时的数据进行持久化保存一直是开发人员所要面对的问题,随着面向对象设计方法的广泛使用,保存对象化的数据也交得十分迫切。对象的持久化要求将对象存储在持久化的介质上,并且从持久化介质上读取保存的信息后,可以重新恢复原有对象的状态以及重建同其他对象的关系。语言在对象的持久化方面提供了全面的支持。在和两种体系框架内,提供给开发者多种持久化选择。最为

19、简单的是采用序列化技术(),复杂一些的是采用组件封装针对特定对象的持久化操作,最为有名的是在企业级系统中使用的()技术。序列化这一机制在保存一个对象同时会将相关联的其他对象一起保存,这只是一种简单的应用。它将实现了接口的对象转化为一个字节序列,适合网络传输和存储。这种序列化机制采用的文件系统作为底层存储,通过文件系统提供的将信息存放在一个文件中。使用文件系统进行存储当然无法支持事务,查询等特性。采用序列化只是需要文件系统的支持,特别适合只需要一些简单的对象存储要求的简单应用,并不可以使用在企业级的事务化信息管理。在过去,当开发人员使用关系数据库存储对象时,需要自己实现特定的组件完成对象的存储。

20、通常编写轻量级的用以存储数据以及提供数据访问、修改方法。是一种可以被重复使用的组件规范,在中的各种方法可以被外部发现并调用,它实现了一种基本的组件复用策略。采用这种方案,提供了较小的对象模型并且在小型项目中工作良好。但是这种操纵数据的组件内部采用了技术,是语言访问数据库的接。技术只是对数据库的操作进行了一层简单的包装,内部实际上还是通过数据库专有的语言进行操作。组件只是将脚本语句包装为对象。事实的情况是,对象模型和数据模型之间的映射还是需要开发人员手工实现,并且这种映射是针对特定的应用才有效,几乎不可能在不同的项目之间进行移植。对于的开发入员来说,代码中的语句需要单独的调试,但是在许多的情况下

21、语句是根据上下文的环境生成的,大致在实际的开发中很难对组件做比较全面的测试。采用“对象数据库()”可以将对象直接的存储在数据库中而无须额外的处理,这确实是一个理想的选择。但是现今许多用户己经在数据库方面投入了大量的资金,特别是大量的应用和服务是针对特定数据库所编写的,他们无法承受数据库迁移所带来的高昂的代价。是运行在大型、分布式的企业级应用中的持久化框架,它他天生就是适合分布式应用。但由于技术是基于远程访问协议(雕)开发的,而跏进行远程方法调用效率低下、使用复杂。在中小规模的应用中使用技术实际,无端的增加远程访问(尽管这种访问可以在同一个虚拟机中进行)。规范中()对于对象持久化支持是有限;规范

22、对于()访问的效率有大的改进,但是实体()的效率一直是人们关注的问题。在东南大学硕士学位论文数据映射方面只提供了有限的支持,并且配置复杂,一个简单的应用就需要实现多达四个以上的接口。总的来说,之前所提供的各种持久化方案都具有一些致命的缺陷,无法满足真正的持久化透明存储的要求。标准的推出,给开发人员指明了正确的方向。只有采用技术才能够真正的根本上从繁琐的对象持久化中解脱出来。对象持久化技术简史大多数的商业应用程序都是建立数据库应用访问的基础上,几乎所有的企业级的应用都是以数据为中心。在实际的环境中,整个企业的信息化系统通常以一个大型的数据库为中心,各种应用以及服务都围绕着存取或处理数据。应用代码

23、所表示的对象模型和数据库中的关系数据模型之间的差异是开发人员难以逾越的鸿沟。为了处理这两种不同模型之间的差异所造成的问题,也就是“匹配阻抗”(),最早的解决方案出现在九十年代中期,其中有()。是用编写的,不久便成为应用服务器的一部分,最终这个产品被公司收购(),在年移植到平台。公司的是映射工具中最为有名的产品,它最初用编写,年发布了版本。年,产品改换门庭,获得了他并集成到作为持久化框架的一部份。是一个具有企业级特性的映射产品,它引入了类似的,但不是完全的符合规范。本身参与了规范的制订,所以可以预计在将来会全面的支持标准。类似的产品有【的产品()。这些企业级映射工具难易维护且价格昂贵,在考虑到将

24、来的移植性和产品的复杂程度,会使许多公司对这一类产品望而却步。在年,(:)发布了对象持久化的标准,年发布了标准,但是他们都没有获得广泛的关注。其中主要的原因是关注的是对于对象数据库的访问,实际上在映射方面就毫无意义。由于在标准方面的过于超前,至今也没有完全符合标准的产品出现,其中最为接近符合这个标准的产品有基金会的(:)在年推出标准后,实体被广泛的采用。随着应用服务器市场的不断扩大,被大量的使用。事实上实体并没有推动了关系对象映射工具的发展,而是阻碍了其发展。实体将持久化域对象()看作了简单的数据的拥有者,这些对象没有复杂的方法只有最为简单的,只可以看作为一个纯粹的简化的类,类似于语言中的数据

25、类型。同透明持久化概念所要求的无差别的处理对象的概念相反,并且在使用的时候非常笨拙。在年创建项目(),这是一件里程碑式的事件。这是一个完全的开源的映射工具,它将包装从而提供一个灵活的、透明的持久化框架;它提供自己的查询语言,相对于的,支持的功能更全面,更强大足以替代的语言并且无需制定表名,列名。只是在年,每个发行版本就有三十万次的下载量,事实上成为了最为流行的映射工具。著名的应用服务器供应商()将作为的引擎。由于加入到制定规范的专家组,所以也可以预计支持规范。年所发布的规范是在规范的基础上,完善了对于一些企业级特性的支持,提供了更多的优化选项,强化了查询功能。规范的进步在社区内部引起的轰动导致

26、许多厂家和开发商抛弃了以往使用的产品,转向更为轻便,效率更高的产品。动摇了作为企业级持久化框架的地位,许多服务器的供应商都是一些著名的跨国公司,无法承受用户的流失,从而在会议上否定了规范。只是一个非盈利、非官方组织,它所定义的标准没有强制力,只是作为推荐使用。否决一个规范在的历史上很少发生,规范的否决不仅没有宣判的死亡,反而在社区内部引起了巨大的反响,直接的后果是标准被推后发布。作为两种功能重叠的持久化框架规范和第二章面向对象编程与持久化最终决定推后发布,等待提出一个新的持久化标准。社区内的持久化框架之争最终的结果是两者互相吸取所长,最终发布的标准十分令人期待。优势的目标明确,就是提供了一个统

27、一的、简单的、透明的持久化框架。在许多方面为对象的持久化提供了令人惊奇的便利以及在所支持的特性上超越了以前的所有的标准。允许用户在持久化对象的同时支持事务和多用户。事务和多用户这两个特性对企业化应用来说是必须的。而相比较的庞大应用结构,是一种轻量级的数据映射、访问架构,特别适合在中小型的企业应用中作为一种持久层的实现。同的优势同时体现在可以运行在两层架构中,而不是必须像一样运行在一个昂贵的应用服务器中。强有力的查询机制。参照的设计了。这是一种基于对象的查询语言,就像写代码一样编写查询语句,无需了解语言,完全对数据库透明。同应用服务器技术完美地集成在一起。的设计目标就是支持两种运行环境。在环境中

28、,实例是在应用服务器的环境中存活,对于数据对象的事务,连接都由服务器容器通过接口同进行交互,也就是说作为一个服务由服务器所控制。环境是指独立的运行。快速上手。整个规范一共有近二十个接口,而用户所需要了解的接口只有五个,他们是,和。这几个接口提供的方法使用简单,用户所涉及到的主要的操作定义在接口中,其他都是些辅助接口。用户的学习周期非常短,可以很快的熟练使用。极大地降低了应用程序与数据库有关的开发工作。使用可以让应用程序员专注于应用逻辑的设计,对于底层数据的访问可以通过所提供的标准进行透明的管理。无需了解底层数据库的数据类型而只需关注所提供的数据类型,两者之间的映射都由实现完成。采用何种类型的底

29、层存储对于用户来说无需了解,不管是还是、)咖。文件或其他格式都无需在意,将各种数据源之间的差异屏蔽,这对于拥有多种异构数据源的大型信息管理系统尤为适合。超强的移植性。语言的特点在于一次编写,到处运行(,)。就秉承了这个特点。用户的商业逻辑源代码无需修改就可以移植到环境中。通常实现利用一个称为的代码增强器,在二迸制代码级对已编译的代码进行改造,插入支持所要求的代码。并且按照规范要求,改造后的代码必须保持二进制兼容,可以在不同的产品之间进行无缝的迁移。在描述持久化对象信息的描述文件方面,标识特定供应商所提供的扩展功能可以利用”标记,这样一来,同个描述文件可以被多个产品使用而无需修改,每个产品会从中

30、获取自己有用的信息。几乎涵盖了对象模型的所有方面。规范要求产品支持对象的继承,包含等关系以及,这些集合数据类型,这基本上涵盖的对象模型的主要方面。同时规范中指出。可以有选择的提供对于接口,抽象类的支持,这样在对象映射方面的支持也就更为全面。东南大学硕士学位论文第三章规范分析的标准分为两个层次(如图),上层提供给用户使用,定义在包中;下层定义在包中,主要供实现内部使用,本文所关注的是定义在下层中的接口、类以及相关的行为。这里的含义是,它明确的指出这个包内定义的类由供应商使用,同用户无关”。图程序接口规范规范对于上层主要定义了代码改造规则(),接口,状态管理器(),标识()等。代码改造()内部具有

31、的元数据()概念是控制持久化对象的关键,它描述了一个持久化对象的特征,而对于事务,连接的管理实际上就是对于底层数据源()的管理。内部的安全控制机制利用了语言的沙箱()机制防止外部的恶意代码访问,此外还确保了内部对于持久化对象内部域值的高效访问而不会违反定义的安全规则。的下层实现,主要的功能是将上层传入的持久化对象进行映射,存入中。规范只定义了用户接口,对于如何实现底层的映射并没有做出规定,提供给供应商以最大的自由。但是通过研读规范,可以看到在内部实际上还是定义了许多内在的限制。对于这些限制的准确把握才可以实现出符合规范的产品。数据存储映射支持将对象模型存储在各种不同的存储结构中,底层的数据源可

32、以是、复合数据库)或(如文件系统,)。规范没有制定标准的映射规则,当实现支持多种时,需要针对不同的采用各自的映射规则,以及生成自己订制的。若一个(实现支持不同的类型,需要考虑针对不同的底层存储架构采用不同的映射机制。譬如将对象以的格式存储,用数据模型()表示对象模型,也就是在和)几数据之间进行映射,采用()()是最好的选择。语言在关系数据库中十分重要,通过访问关系数据库,可以在代码中嵌入命 第三章规范分析令操作数据库。关系数据库使用的是关系数据模型(),不同于使用的对象模型,这时就需要在两种不同的模型之间进行映射以屏蔽差异。关系数据库是广泛使用的数据源,使我们主要关注在关系数据库上进行映射的策

33、略和方法,具体的就是在和两种关系数据库。持久化对象模型和关系数据库中的关系模型之间的映射方法可以分为三大类从对象模型中产生关系模型如果你开发一个新的应用,没有已经存在于关系数据库中的数据,你可以让自动的从你的对象模型中产生关系模型,这称为正向引擎()。这种方法可以大大提高开发效率,用户无需考虑关系模型的设计,两者之间的映射由自动完成。规范并没有要求实现自动产生模型的机制,而且这种机制需要用户指定一些元数据()和设定自动生成时需要的一些配置属性”“。从关系模型中产生对象模型这种情况最为普遍,应用通常是在已有的数据库上进行开发。在这种情况下,会自动的分析数据库中的关系模型并产生相应的对象模型,这种

34、机制称作逆转引擎()”“。直接定义两个模型之间的关系这种映射机制最为简单,也是所支持的。用户在开发期间,需要分别设计关系数据模型和对象模型,并定义两者之间的映射关系。这种情况下,需要使用定义两种模型内部的不同对象之间的映射关系,如类映射为表,域映射为列。这种在两种模型之间手工指定映射关系得方式被称为桥式映射()”“。如果将同关系数据库一起使用,并不会阻止你在应用中使用或其他的方法直接访问数据库,这样做的好处是可以逐步的将代码迁移到上。如果有已经存在的关系模型,最好使用逆转引擎或桥式映射模式实现两种模型的映射。如果使用和混合访问数据库,对于映射规则的了解是十分必要的,有可能需要访问一些额外的表才

35、可以获得持久化对象完整的信息。对象模型和关系数据模型是两种完全分离的、不同的数据模型,如表所示,他们代表了不同的系统和数据。一般来说将持久化对象映射到关系数据库上时,有些概念在两种模型内是类似的。需要着重注意的是那些无法在双发之间直接找到对应关系的那些概念,主要是集合(),非具体类(,),特别是当一个对象处于复杂的继承体系中,关系数据库很难进行准确的描述,需要额外的机制进行处理。对象模型中的概念和关系数据模型之间还是有些概念是相对应的。在具体的实现中,对于集合类,表之间的继承关系,多态的支持需要自己定义映射策略。对于类来说,如果一个类没有继承关系,也没有,类型的域,那么可以用一个表表示一个类。

36、集合()在中并没有相应的概念,但是可以被当作一个额外的实例存在,被映射为一张表表示集合中所包含的值。如果你使用一组对象,并让自动生成关系模式,此时需要设定两种模型之间标识符()的映射规则。的命名规范采用大写分割单词,而关系数据库中采用下划线分割单词。两者之间的映射关系需要确保在两个模型之间的名字转化是可逆的,也就是一一对应的。对象之间的引用关系,可以利用关系数据库中的主键,外键表示。支持多态(),所以必须要判断引用指向的类型才可以访问正确的表,这就需要存放对象类型信息来帮助对于对象类型的判别。对于复杂的继承关系可以采用几种映射策略;可以用单个表表示一个类:用单个表表示一个类,但却保留从父类中继

37、承的域;将整个继承体系平展开,用单个表展示继承结构的信息。不管采用何种策略,都需要在别的地方存储额外的映射信息,供读取。关系数据库是无法直接表示继承关系的。东南大学硕士学位论文“表对象模型和关系模型映射关系连接管理的连接管理有四种应用环境。单个连接:这是最为简单的情况,直接连接到,并管理事务。在这种情况下,一般是在的连接属性中定义连接属性,并且利用这个连接处理事务化的操作。连接池:这就稍微有些复杂了,由创建了多个,所获得的连接由一个连接池组件所提供,这样可以减少资源的消耗。分布式事务:这就更加复杂了,所要求的连接涉及到了分布式事务,这就需要以及中的接口互相协调向)提供连接。这是在环境下,所获得

38、的连接是由所提供的,这就要求实现的接口,从而使得可以获得连接。当同应用服务器结合在一起,应用组件可以同平常一样的使用,但是此时在应用服务器的环境下,一般通常通过获得一个的引用。在这种环境下,是作为应用服务器的一个服务存在的,应用服务器负责管理服务以及同他相关的所有的服务、资源。此时的服务器负责的事务管理、资源管理和连接管理。代码增强改造规范要求每一个具有持久化特性的对象必须实现接口,这似乎看起来同的目标一透明性()背道而驰,实际上利用了来使得每个持久化对象实现接口,用户的源代码没有任何变化,只是对字节码()进行改造。在改造之前,你需要告诉增强工具)如何对这些对象进行改造,所有改造的规则定义在一

39、个以格式存储的文本文件中,以为扩展名存放。(在部署一个应用之前,必须将已编译的代码()进行变化,一个供应商一般会提供自己的增强工具()。不管你如何对代码进行改造,按照规范的要求,各种改造后的代码必须支持的参考实现。也就是说不同的改造的代码可以在所有的环境中运行,这就是改造后代码的二进制兼容性。规范要求被改造的代码的二进制兼容,这是指实现接口的类可以运行在符合规范的运行环境中。事实上各个供应商都提供自己的,他们可以在文件中使用标记。这个标记表示这个特性是由供应商自定义的特性,同具体的产品有关,利用这个标记表现出不同的产品之间的差异。不同供应商的标记中的内容各不相同,需要各自的进行分别的处理。同时有的会产生针

温馨提示

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

评论

0/150

提交评论