(计算机应用技术专业论文)轻量级、可重用数据持久层构件技术研究与实现.pdf_第1页
(计算机应用技术专业论文)轻量级、可重用数据持久层构件技术研究与实现.pdf_第2页
(计算机应用技术专业论文)轻量级、可重用数据持久层构件技术研究与实现.pdf_第3页
(计算机应用技术专业论文)轻量级、可重用数据持久层构件技术研究与实现.pdf_第4页
(计算机应用技术专业论文)轻量级、可重用数据持久层构件技术研究与实现.pdf_第5页
已阅读5页,还剩77页未读 继续免费阅读

(计算机应用技术专业论文)轻量级、可重用数据持久层构件技术研究与实现.pdf.pdf 免费下载

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

文档简介

西南交通大学硕士研究生学位论文 第1 页 摘要 信息时代中,信息是发展的第一要素,网络的发展让信息的共享成为可能。 而信息共享的实质是数据的共享。数据是信息资源最直接的表现形式。这样, 为了实现资源的真正共享,在每一个计算机应用程序中,数据不仅必须是可访 问的( 即与用户界面连接并按一系列业务规则管理) ,而且还必须是可持久的。 所以,对于与数据息息相关的系统来说,数据持久层的设计就变的尤为重要。 再者,随着信息数据化趋势的发展,出现了越来越多的管理系统。如果系统要 具有一个良好的结构,那么在每一个系统中数据持久层设计也是必不可少的。 同时,为了让系统具有更好的可移植性和可维护性,数据持久层设计的简洁性 是十分关键的要素之一。所以,为了让持久层的设计变得更加容易,将持久层 中与逻辑无关的部份尽量多的抽取出来作为一个可重用的构件在不同系统的 数据持久层设计中使用,可以简化数据持久层的设计,并且有了构件的辅助也 能避免由用户在持久层设计中可能出现的常见错误;同时,在有众多可选工具 的情况下,构件使用的简洁性,即构件是否具有轻量级的优点对于构件的推广 来说也是要考虑的要素之一。基于以上考虑,我们提出轻量级、可重用数据持 久层构件的设计,对于数据持久层的研究来说是具有一定意义的。 本文首先从对象、面向对象方法入手,讨沦了对象持久的概念、方法。重 点介绍了作者设计并实现的一个数据持久层构件的原理、结构、机制、以及其 对设计模式的运用等方面相关内容。同时,对构件的设计中为了满足不同用户 的使用习惯所加入的对o r m ( o b j e c tr e l a t i o n a lm a p p i l l g ) 的支持进行了介绍, 重点突出了其在轻量级和可重用两个方面的优点。从该构件在交通部示范工程 “成都市公众出行交通信息服务系统”中与p o j o 、均相结合对数据持久 层进行设计,证明了该构件的可用性、轻量级和可重用性。最后,与当前流行 的o 删映射工具h i b e m a t e 进行比较,通过在数据的查询、插入、删除、更新 几种常用的数据库操作性能上的对比,突出了其在孤立域模型条件下具有较高 的数据访问效率,最后对其优缺点进行了总结性的说明。 关键词:数据持久层、j d b c 、h i b e r n a t e 、d a 0 、模式 西南交通大学硕士研究生学位论文 第1 i 页 a b s t r a c t i ni n f o r n l a t i o na g e ,i n f o 珊a t i o ni st i l em o s ti m p ( ) n a n tf a c t o rf o rd e v e l o p m e n t i ne v e r ya r e a i ti sp o s s i b l et os h a r ei i l f o 珊a t i o na m o n gd i f f e r e n to r g a n i z a t i o n sw i t 量l t l l e 蛔p r o v e m e n to fn e t w o r k 1 i lf a c t ,w h a ts h a r e dm i l l 】f o n l l a t i o ni sb a s i c a l l yd a t a d a t ai st h ev e r yd i r e c tr e p r e s e n t a t i o no fi n f o 瑚a t i o nr c s o u r s s o ,i no r d e tt o r e a l i z ed a t a s h a r i n g ,d a t as h o u l dn o to l yb ev i s i t e d ( t h a ti st ob ec o n n e c t e dw i t hu i a l l dt ob em a n a g e df o l l o w i n gas e r i e so fp r i n c j p l e s ) b u ta l s ob ep e r d u f e d a sa r c s u n ,w i l hf c g a r dt ot h es y s t 啪sc o 皿e c t e dw i 出d a t a ,t h ed e s i g no fd a t a p e r s i s t e n c eb e c o m e sq 1 1 i t ej m p o n a t l t ;w h a ti sm o r c ,w i t l lt h ed e v e l o p m c n to fd a t a f o m l a t t i n go fi n f o 咖a 廿o n ,m o r e 柚dm o r em a n a g e m e n ts y s t e m sa p p e a r c d i fm e s y s t e m sa r et 0b ed e s i 印c dw i t hag o o ds t n l c t u r c ,t l l ed e s i g l lo f d a t ap e r s i s 白融c ei s a na b s o l u t e l yn e c e s s i t y f o rt h es a l 【eo fs y s t e m 仃a n s p l a i l ta l l dm a j l l t a i l l a b n i i y , c o n c i s i o ni nd c s i g no fd a t ap e r s i s t e n c ei so eo ft h ek e yf a c t o f sw l l i c hs h o u l db e c o n s i d c r e d t h e r e f o f e ,i no r d e r t om a k em ed e s i g no f d a t ap e r s i s t e n c em u c he a s i e r , e x t r a c t i n gp a n sw i ml i n l ef e l a t i o n sw i t hb u s i l l e s sl o 垂c s a sac o m p o n e n ta i l d u s i n gi ti d a t ap e f s i s t e n c ed e s i 弘o fd i r e n ts y s t e m sc 锄m a k et h ed e s i 弘o fd a t a p e r s i s t c n c em u c he a s j 盯w i t ht 置l e 弱s i s t a n c eo ft h ec o m p 咖e n t ,c o m m o ne 湘f s m a d eb yu s e r sw i ub er e d u c e di ns o m ee x t e t i na d d j t i o n ,j nt h ec o n d i t i o no fs o m a n yt o o l sf o r t h ed e s j 印0 fd a t ap e r s i s t c n c ea 猢i l a b l e , c o n c i s i o o fm e c o m p o n e n t ,t h a tj st os a y w 血e t h e r 仃帅e w o r ko ft l l e 蝴p o n c n ti sal i g h t w e i g h t o eo rn o li sa l s oo n co ft h ef a c t o r sw i t hk c yi n u e n c e sf o rp o p u l 捌t y 缸s t a t c d a b o v e ,r e s e a r c hj n t ot h el i g l l 仰e i 曲ta n df e u s a b l ec o m p o n e n tf o rd a t ap e r s i s t e n c ei s w o n h w h j l e i nt h i sp 印e r ,丘r s t l y ,o b j e c t sa i l do b j e c t - o r i e n t e dm e t h o d sa r ei m m d u c e d ,锄d d i s c i l s s i o no f t h ec o n c 印t i o n sa l l dm e t h o d sf o ro b j e c t sp e f s i s t e n c ea r er e f e r r e d t 1 l e p r i n d p l e ,s t r u d u r e ,m e c h a i l i s m ,a p p l i c a t i o no fd e 虹g np a t t e m s a n de t co fa c o m p o n e n td e s i g n e da i l di 1 1 l p l e m e n i e db ya u t h o ra r ei n t m d u c e dw i t he m p h a s i s a t t h es 锄et i m e ,s u p p o r tf b ro r m ( o b j e c tr c l a t i o n a lm a p p i n g ) i sa l s op r e s e n t e ds o a st o s a t i s f y d i 行b r e n t p r o 擎a m m i n g h a b i t so fd i 妇k r e n tu s e r s d u r i n gt h e i n t m d u c t i o n ,t h ea d v a n t a g eo f1 i 曲t w e i 曲ta n dr e u s a b j l i t ya r ep m s e n t e de s p e c i a n y h lo i d e rt op r 0 v et l l eu s a b i l i t y ,c o d s i o na n dr e u s a b i l i t yo ft h ec o m p o n e n t ,i t i s 西南交通大学硕士研究生学位论文第i 页 a p p i i e dw i t hp o j 0a i l dd a o t od e s i g nt h ed a t ap e r s i s t e n c ei i lp r o j e c to f “t r a f f j c l n f o 瑚a t i o ns e i c es y s t e mf o rp i l b l i ct r a n s p o r t a t i o ni nc h e n g d uc i t y ”f j n a l l y c a p a b i l i t i e s0 fq u c r y ,i i l s e n ,d c l e t i o n ,u p d a t eo fd a t ab e 咐e e nt h ep o p u l a ro r m t o o l 一h i b e m a t ea l l dt h ec o m p o n e n ta r ec o m p a r e d h i 曲p e l l l b 姗卸c e so fd a t a v i s i t i n ge f f i c i e n c ya r es h o w e di nt h ec o n d i t i o no fi s o l a t e dm o d e l s a d v 锄t a g e sa n d d j s a d v a n t a g e so f t t l ec 0 i i l p o n e n ta i 弓e x p l a i n e da sac o c l u s i o n k e y w o r d s :d a t ap e r s i s t e n c e ,j d b c ,h i b c m a t e ,d a o ,d e s i 掣1p a t t e m 西南交通大学硕士研究生学位论文第1 页 1 1 研究意义 第1 章绪论 随着计算机技术的飞速发展,尤其是网络技术的迅猛革新,在当今的信息 时代,资源共享已是时代发展的需要,是任何一个团体、企业对外发展所不可 缺少的。而对于资源的共享强调的更多的是信息的共享。由于数据是信息资源 最直接的表现形式。这样,为了实现信息资源的真正共享,在每一个计算机应 用程序中,数据不但必须是可访问的,而且必须还是可持久的。在不能进行数 据持久的系统中,数据对象被创建、使用后即被删除,这样的对象的生命周期 是短暂的,其状态不能被继续使用。对于大部份的应用系统来说,数据要被继 续使用才具有意义,这也就提出了对数据持久的需要。为了实现数据的持久, 开发人员在利用高级程序设计语言构建过程模型的同时,一般都会利用现有的 数据存储技术( 如关系数据库管理系统) 来构建数据模型。而在面向对象方法 大行其道的今天,数据和过程已被封装到一个个的对象当中,这样对数据的可 访问和持久性研究就上升为对对象的可访问和持久性研究。所谓对象的持久性 也就是指对象的生命周期在被创建和使用后能够通过持久机制而延续,可以在 下一次系统启动时继续使用,这样它的生命周期也就是持久的生命周期。这样 的数据才是有意义的数据,可以在系统和网络中长期的进行共享。而一旦数据 持久上升为对象持久,数据模型和过程模型的分开构建就上升为对象模型的统 一构建。为了实现对象的持久和对象模型的统一构建,也就势必要求发展出新 的技术来设计和构建对象持久化,也就出现了本文所讨论的对数据持久层研究 的必要1 。 此外,目前的数据持久化技术普遍存在着使用较繁琐、可重用性不高的缺 点,这样就让数据持久层的设计过程工作量较大,而且数据待久层中经常出现 的连接泄漏等问题是系统瘫痪的主要原因之一。所以,用轻量级、可重用的数 据持久层构件作为辅助来对数据持久层进行设计和构建,具有快速、方便、安 全的特点,由此可见,对于轻量级、可重用的数据持久层构件的研究是具有现 实意义和理论意义的。 西南交通大学硕士研究生学位论文 第2 页 1 2 国内外发展现状 对于任何一个系统的开发来说,对数据和过程的开发都是不可缺少的基本 要素。其中的数据是静态的部份,过程是动态的部份。目前对于数据的持久化 多采用的是文件系统、关系数据库存储机制以及刚刚发展起来的对象数据库存 储机制。对于过程的处理则采用高级语言来进行。随着面向对象思想的提出, 数据与过程都被封装到“对象”当中,两者被细粒度的藕合在了一起,这样的 “对象”无疑能够解决数据持久的问题。但同时也就需要一种新的技术来解决 其持久化。 目前,用的较多的数据持久机制主要有三种,文件系统、关系数据库、 对象数据库。其中用的最多的应该是关系数据库存储机制。关系数据库是目前 发展的最为成熟的一种持久化机制。而对数据持久层的设计,就基于j 2 e e 的 标准来说,我们经常采用的有以下四种:j a v a 对象序列化、实体b e 柚、会话 b e a l l + j d b c 、会话b e a l l + j d o 四种方式。其中用的较多且效率较高的要数会话 b e a n + j d b c 驯。 1 3 本文研究内容 本文首先从对象、面向对象方法入手,讨论了对象持久的概念、方法。 并重点介绍了自己设计并实现的一个数据持久层构件的原理、结构、机制、以 及其对模式的运用等方面相关内容,重点突出了其在轻量级、可重用性方面的 优点。从该构件在交通部示范工程“成都市公众出行交通信息服务系统”以及 “交通信息资源互通互连及共享”部份系统中与d a o 、p o j o 结合起来对数 据持久层进行设计,来证明该构件的可用性、操作的简易性和可重用性。最后, 通过与当前流行的o r m 映射工具h i b 咖a t e 进行对比,对其优缺点进行了说明。 1 4 文章组织结构 全文共分六章: 第一章绪论介绍本课题的研究背景、国内外展现状、主要的研究内 容,对全文结构有一个总体的介绍; 第二章 对象持久化主要说明了对象和对象持久化的概念、并对当前 西南交通大学硕士研究生学位论文 第3 页 第三章 第四章 第五章 第六章 较流行的几种对象持久化机制进行了简要的介绍; 数据持久层构件技术研究重点介绍了作者设计实现的数据 持久层构件,从原理、结构、机制、以及其对模式运用等方面对 构件的核心类库设计,处理流程以及核心算法等进行了详细的 阐述: “p o j 0 + d a o + 构件”在数据持久层设计中的应用介绍了该构 件在交通部示范工程“成都市公众出行交通信息服务系统”中 与d a o 、p o j o 结合起来对数据持久层进行设计,从而对构件 的运用进行了说明,并证明了该构件的可用性、操作的简易性 和可重用性; 数据持久层构件与hi b e r n a t e 工具在对象持久性研究中的比较 通过与当前流行的0 r m 映射工具碰b e m a t e 进行对比,对该构 件在孤立域条件下的优势进行了说明,主要突出了其在轻量级 和可重用性上的优势; 总结与展望对本论文的工作进行了总结,指出了还需继续研 究和探讨的问题,并对今后的工作进行了展望。 西南交通大学硕士研究生堂垡笙塞塑! 夏 2 1 对象 第2 章对象持久性与数据持久层 面向对象方法是基于客观世界的对象模型化的软件开发方法。在面向对象 程序设计中,所谓对象就是一个属性( 数据) 集成及其操作( 行为) 的封装体。 作为计算机模拟真实世界的抽象,一个对象就是一个实际问题领域、一个物理 的或者逻辑的实体。在计算机程序中,对象可视为一个“基本程序模块”,因 为它包含了数据结构和所提供的相关操作功能。 对象的属性是指描述对象的数据。对象某一时刻属性值的集合称为对象的 状态。对象的行为是定义在对象属性上的一组操作方法的集合。方法是响应消 息而完成的算法,表示对象内部实现的细节,对象的方法集合体现了对象的行 为能力。 对象的属性和行为是对象定义的组成要素,有人把它们统称为对象的特 性。无论对象是有彤的或是抽象的、简单的或是复杂的,一般都具有以下特征: 一 具有一个状态,由与其相关联的属性值集合所表征; 一 具有唯一标识名,可以区别于其它对象; , 有一组操作方法,每个操作决定对象的一种行为; 一 对象的状态只能被自身的行为所改变; 一对象的操作包括自操作( 麓于自身) 的其它操作( 施于其他对象) ; 一 对象之间以消息传递的方式进行通信; 一 一个对象的成员可以是一个对象。 2 _ 2 对象持久性 对象持久性指的是对象的一种时态特性,是对对象生存期的描述。一般, 对象的生存期可以初略的分为两大类:暂态和持久的生存期。生存期不超过 一个进程的对象称为暂态对象( t r a n s j e to b j e c 【) ;生存期超过一个进程的对 象称为持久对象( p e r s i s t e n c eo b j e d ) 。在没有持久化机制的系统中,一个对 壑塑璺型兰鱼竖篓堡堡:塑堡旦:鎏型鉴! 些堕! 象的典型生命周期是被创建被使用被删除。此时, 鎏尘翌塞堕星笪查翌墨: 这个对象就是暂态对象, 西南交通大学硕士研究生学位论文第5 页 它的生存期就是暂态的生存期。而一旦系统支持持久化,对象的生命周期在 被创建和被使用之后,就可以通过持久化机制而延续。这样的对象也就成了 持久化的对象,它的生存期也就是持久的生存期了。其实,持久性语义主要 描述了两个方面的问题:如何确定一特定对象是持久的;如何保证持久 对象的数据完整性。 其实,从对象持久性语义上讲,对象持久实际上要求的并不是对象动态 因素的持久,而是其静态因素的持久,也就是要求对象状态的持久。这样, 我们完全可以在某一时刻把对象状态信息从对象中提取出来,并以某种方式 存储在现有的数据存储系统中。当需要时,可以创建一个新的对象实例,并 用先前存储的状态填充,以“还原”出与原对象信息一致的对象。如此一来, 也就可以通过先保存对象状态并在以后恢复它的方法来存储和检索对象了。 此外,还要考虑持久对象的存储场所,持久化的对象可以存储在文件系统、 数据库系统或大型事务处理系统中。 在传统方式下,如果我们采用数据库系统进行数据存储,我们处理对象 持久化的方式如图1 1 所示: 吴= 亘一 对象 开发人员 圈2 1处理信息的传统的持久化 通常,在这种方式下实现对象持久性的应用程序开发应遵循下列步骤: 1 ) 确定对象模型; 2 ) 确定模型中的持久化实体; 3 ) 编写数据模型来映射持久化实体信息; 4 ) 编写代码,以数据存储系统可以理解的格式来存取信息: 5 ) 编写应用程序代码,使用类来完成业务任务。 由此一来在这种方式中,开发人员必须定义和建立并使用在程序中映射相 同业务域的两个模型:在应用程序代码中的业务对象以及在数据库中代表的关 系。它们还要保证两个模型的视图以及行为保持致,因为对二者之一任何细 小的改变都将导致模型与现实世界业务之间的不匹配。 为了减少在上面说到的应用程序设计中的依赖,甚至不依赖于整个持久性 西南交通大学硕士研究生学位论文 第6 页 的基础结构。我们必须让开发人员能够直接的使用对象来进行对象的存储和获 取,而不用去处理对象中包含的数据信息。这样的方式中如何持久化并重新建 立这些对象的细节对开发人员来说是透明的。这通常被称为是透明的持久性。 在本文中所使用的数据持久层构件就是一项实现了透明持久性的技术。有关其 细节内容我们在后面的有关章节里探讨。 通过使用透明的持久性设计,开发人员只需关注应用程序;而无需关注其 中包含的数据信息。同前面传统的持久化方式相比,开发将减少“编写数据模 式来映射持久化实体信息”的步骤。其方式可用下图来表示: 对象开发人员 图2 2 处理信息的透明的持久化 在这种透明的持久化方式下,开发人员只需开发并维护一个模型或程序的 表示。 目前,在企业应用程序开发中,一方面面向对象的开发方法被广泛地使用; 另一方面在数据存储方面,由于传统和性能的考虑,人们可能更多的使用或选 择关系数据库。这就需要关系和对象的统一。把对象存储到关系数据库中有两 种策略,一是围绕关系数据库来建立面向对象的应用,每一个对象,都要懂得 如何存取其属性信息;二是把面向对象应用移到关系数据库中实施,以关系表 格来模拟对象,前者可称为映射法,它把应用与数据存储分开,有利于系统的 管理和扩展,是一种可行的策略。在这种策略下,对象持久化可以通过内嵌 s q l 语句、紧耦合映射方法和健壮的持久层方法来具体实现。 2 3 。目前所采用的对象持久存储技术 对象持久化需要存储对象的当前状态,以便于应用程序能在将来某个时 间内查询这些对象的状态,并依据它们恢复这些对象。目前,虽然业界采用了 多种不同的机制来实现对象存储。但迄今为止,最为流行的方法还是莫过于基 于操作系统的文件存储机制、关系数据库存储机制和对象数据库存储机制等三 西南交通大学硕士研究生学位论文第7 页 种对象存储机制。其中支持事务、技术相对成熟的关系数据库存储机制的使用 尤为普遍。所以,在本文中介绍数据持久层构件的运用主要是以关系数据库为 基础来展开讨论的, 2 4 数据持久层简介 数据持久层是任何一个与数据息息相关的信息系统所必不可少的组成部 分。数据持久层的设计目标是为整个项目提供一个高层的、统一、安全、并发 的数据持久机制。完成对各种数据进行持久化的编程工作,并为系统业务逻辑 层提供服务。它能够使其它程序员避免手工编写访触数据源的方法,使其专注 于业务逻辑的开发,并且能够在不同项目中重用本框架,大大简化了数据的增、 删、改、查询功能的开发过程,同时又不丧失多层结构的天然优势,继承延续 j 2 e e 特有的可伸缩性和可扩展性。 当运用关系型数据库做为数据存储机制时,在业务层与数据源间加入数据 持久层,能够解决对象与关系的“阻抗不匹配”问题,将对象的状态持久化到 关系型数据库中。 西南交通大学硕士研究生学位论文第8 页 第3 章数据持久层构件技术研究 本文所研究的数据持久层构件是基于j d b c ,对j d b c 进行了封装和重构, 可以在不同的数据持久层设计中重复使用,且其使用起来更为方便、具有更好 的安全性。 3 。1 j d b c 简介 3 1 1 j d b c 的组成与工作机制 j d b c ( j a v ad a t a b a s ec 0 加e c t i o n ,j a v a 数据库连接) 作为j a v a 平台的一个标 准组成部分,是根据“与平台无关”的基本原则而设计的,对独立于数据库的跨 平台数据库访问提供了有力的技术支持。j d b c 是j a v a 程序连接和访问各种数 据库的a p i f 应用程序接口) ,它由一组类和接口构成,通过调用这些类和接口所 提供的方法,提供了j a v a 程序与各种数据库服务器之间的连接服务。由图3 1 可以看出,j d b c 由两部分与数据库独立的a p i 组成,一部分是面向程序开发 人员的j d b c a p l ,另一部分是面向底层的j d b c d r i v c r a p i 。j d b c 提供了一 个通用的j d b cd “v e rm 柚a 窟e r ,用来管理各种数据库软件商提供的j d b c 驱 动程序,从而访问相应的数据库。此外,对没有提供相应的j d b c 驱动程序的 数据库系统,开发了特殊的驱动程序:j d b c o d b c 桥,该驱动程序支持j d b c 通过现有的0 d b c 驱动程序访问其数据库“。 西南交通大学硕士研究生学位论文第9 页 圈3 一lj d b c 的组成与工作机制 在上图中, j a v a 程序:j a v a 程序主要是指根据j d b c 方法实现对数据库的访问和操 作的j a v a 应用程序和j a v a 小应用程序: j d b c a h : j d b c a p i 主要是一组面向程序员的数据库访问接口,其关 键接口主要有:连接( c o 肌e c t i o n ) 、语句( s t a t e m e n t ) 和结果集( r 船u l t s e t ) ; j d b cd r i v e rm 蛐a g e r :j d b c 驱动程序管理器,它能够动态地管理和维 护数据库查询所需要的所有驱动程序对象,实现j a v a 程序与特定驱动程序的连 接,从而体现j d b c 的“与平台无关”这一特点; 驱动程序:驱动程序处理j d b c 方法,向特定数据库发送s q l 请求,并为 j a v a 程序获取结果; d b :指j a v a 程序需要访问的数据库及其数据库管理系统。 3 1 2 j d b c 驱动程序简介 j d b c 驱动程序实现在j d b ca p i 中定义的所有抽象类和接口,为通用的 d r j v e r m a n a g e r 提供j d b ca p i 。j d b c 驱动程序通常由数据库厂商提供,目前 主流数据库产品都提供相关的j d b c 驱动程序。根据访问数据库技术的不同, 西南交通大学硕士研究生学位论文 第1 0 页 j d b c 驱动程序相应地分为四种类型,如图3 1 所示的不同类型的j d b c 。驱动 程序有着不一样的特性和使用方法“。 ”第一类:j d b c 0 d b c 桥驱动程序( j d b c - o d b cb d g e ) 此类驱动程 序提供了通过o d b c 驱动程序的j d b c 访问。其特点是必须在本地计算机上 先安装好o d b c 驱动程序,然后通过j d b c o d b cb r i d g c 的转换,将j a v a 程 序中使用的j d b ca p i 访问指令转换成0 d b ca p l 指令,进而通过o d b c 驱 动程序调用本地数据库驱动代码完成对数据库的访问。这种方法的不足是:执 行效率比较低,不适合对大数据量存取的应用;要求客户端必须安装o d b c 驱动,不适合基于i n t e m e ti n t r a n e t 的应用。 ”第二类:部分j a v a 的本地j d b ca p l 桥驱动程序( j d b c - n a t i v ea h b d 鸯e ) 同第一类一样,此类驱动程序也必须在本地计算机上先安装好特定的 驱动程序( 类似o d b c ) ,然后通过j d b c n a t i v e a p ib f i d g e 的转换,把j a v a 程 序中使用的j d b ca p l 转换成n a t i v ea p i ,进而数据库存取。这种方法效率比 第一类驱动程序效率虽然高一些,但仍然需要在每台客户机上预先安装本地 a p i 库,因此不利于维护和使用。 ”第三类:纯j a v a 的肛m c 中间件驱动程序( j d b c - m i d 棚ew a i 曲使用这 类驱动程序时不需要在本地计算机上安装任何附加软件,但是必须在安装数据 库管理系统的服务器端加装中间件( m i d d l e w a r e ) ,这个中间件负责所有存取数 据库时必要的转换。此类驱动程序能将j d b c 访问转换成与数据库无关的标准 网络协议随常是 f r r p 或唧s ) 送出,然后由一个中间件服务器再将其转换 成数据专用的访问指令,完成对数据库的操作。中间件服务器能支持对多种数 据库的访闯。由于是基于中间件服务器的,这类驱动程序的体积最小,效率较 高,具有最大的灵活性,缺点是需要一个中间服务器的支持。此类驱动采用标 准的网络协议,可以被防火墙支持,是i n t 锄e t 应用理想的解决方案。 ”第四类:纯j a v a 的j d b c 驱动程序0 p 1 l mj d b cd d v e r ) 使用这类驱动 程序时无需安装任何附加的软件( 无论是本地计算机或是数据库服务器端) ,所 有存取数据库的操作都直接由j d b c 驱动程序来完成,此类驱动程序能将 j d b c 调用转换成d b m s 专用的网络协议。数据库厂商是这一类驱动程序的主 要提供者。它允许从客户机到数据库服务器的直接调用这种驱动程序的效率 最高,但由于采用d b m s 专用的网络协议,可能不被防火墙支持。在i n t e m e t 应用中会存在潜在安全隐患”“。 综上所述,最佳的j d b c 驱动程序类型是第四类,它不会增加任何额外 的开销,并且由纯j a v a 语言开发而成,拥有最佳的兼容性。由于第一类和第二 西南交通大学硕士研究生学位论文 第1 1 页 类的j d b c 驱动程序都必须事先安装其他附加的软件,有损j a v a 数据库程序 的兼容性。第三类j d b c 驱动程序也是不错的选择,它也是由纯j a v a 语言开 发而成的,并且中间件也仅需要在服务器上安装。因此,最好以第三类和第四 类j d b c 驱动程序为主要选择,一类和第二类的j d b c 驱动程序为次要选择, 在本文所使用的是第四类j d b c 驱动程序。 3 1 3 j d b c 中的类和接口 j d b c3 o 由两个包组成j a v a s q l 包和j a v a x s q i 包。j a v a s q l 包提供了使用 j a v a 语言访问处理存储在一个数据源上的数据的a p i 。该a p i 包括了一个框架。 在这个框架里,不同的驱动可以动态地装入以访问不同的数据源。i a v a s q l 包中 几乎包含了j d b c 中的大部份的类和接口,仅仅使用j a v a s q l 包已经能够完成一 般情况下的大部份数据库操作。j a v a x s q l 包是j a v a s q l 包的补充,提供了服务 器端数据源访问和处理的j a v a 语言的a p i “”。 下面就这两个包中的一些关键类和接口作一个简要的介绍: ,j a v a s q l d v e r m a 肋g e r :处理驱动程序的装载,建立新的数据库连接; 一j a v a s q l c o 皿e “i o n :完成对某一指定数据库的连接; ,j a v a s q j s t a t e i 耻n t :管理在一个指定数据库连接上的基本s q l 语句 的执行。类似的,还有从它派生出来的用于管理预编译的或者基本 s q l 语句执行的j a v a s q l p r e p a r e d s t a t c m e n t ,及从j a v a s q l p f e p a r e m e m 派生出来的用于执行数据库中存储过程的j a v a s q l c a l l a b l e s l a t e m c n t ; 一j a v a s q i r 电鲫l t s e t :获得数据库检索和更新返回的结果( 集) 。 3 2 数据持久层构件介绍 罩2 1 构件总体结构介绍 该构件提供的j d b c 抽象框架由主要由c o r c ,d a t a s o u r c e ,o b j e c t ,c p 和 s u p p o n 等五个不同的包组成。其总体结构如图3 2 所示: 西南交通大学硕士研究生学位论文 第1 2 页 巨寸- 审 瞥:鱼 图3 2 构件总体结构包图 其中,c o m p o n e n t j 曲c c o r e 包里定义了提供核心功能的类,其中有各种 s q i j e k c e p t i o n t r a n s l a t o r 和d a t a f i c l d m a 】【v a l u e i i i c r e i n c n t e r 的实现以及一个名为 j d b c t b m p l a t e 的d a o 基础类。伽p o n e t j 曲c d a t a s o u r c e 包里有一个用以简化 数据源访问的工具类,以及各种数据源的简单实现,以被用来在j 2 e e 容器之 外不经修改地测试j d b c 代码。这个工具类提供了获得连接和可能用到的关闭 连接的静态方法。它支持绑定线程的连接,比如被用于t r a n s a c t i o n m 柚a g c r 。 c o m p o n e n t i d b c o b j e c t 包里是把关系数据库的查询,更新和存储过程封装为线 程安全并可重用对象的类。这种方式模拟了j d o ,查询返回的对象理所当然 的“脱离”了数据库连接。这个j d b c 的高层抽象依赖于唧o n e n t j d b c c o r e 包中所实现的底层抽象。最后在c o m p o n e n t j d b c s u p p o r t 包中可以找到 s o l e x c e p t i o n 的转换功能和一些工具类。 此外,在j d b c 调用中被抛出的异常被转换成在定义m p o n e n t d a 0 包中的 异常。这意味着使用j d b c 抽象层的代码不需要实现j d b c 或者r b m s 特定 的错误处理。所有的转换后的异常都是u n c h e c k e d ,它允许你捕捉那些可以恢 复的异常,并将其余的异常传递给调用者。 3 2 2 核心类简介 j d b c 弧m p l a t e 类是d a 0 基础类,是c o m p o n e i n j d b c c o r e 包中最重要的类。 它简化了j d b c 的使用,它处理了资源的建立和释放。能够帮助用户避免一些 常见的错误,比如忘了关闭连接等。它运行核心的j d b c 工作流,如s t a t e m e n t 的建立和执行,而只需要应用程序代码提供s q l 和提取结果。这个类执行s q l 查询、更新或者调用存储过程,模拟结果集的迭代以及提取返回参数值。它还 西南交通大学硕士研究生学位论文 第1 3 页 捕捉j d b c 的异常并将它们转换成c o m p o n e n t d a o 包中定义的通用的运行时异 常,能够提供更多信息的异常体系并帮助业务层完成透明的对象持久化。 3 2 2 1 查询操作处理 对于查询而言,该类的类图如下所示 图3 3j d b c t e p l a t e 模板类查询功能类图 从上图可以看出,查询操作以j d b c t e m p l a l e 类为核心,主要涉及到数据源、 j d b c 操作、s t a t e m e n t 、r e s l l l t s e t 、异常处理等几个主要角色。继承于 j d b c a c c e s s o r 类,实现了j d b c o p c i a t i 吨s 接口,其中: j d b c t e m p l a t e 模板类:该类是整个构件的核心类,也是用户直接调用的 主要类。使用这个类的代码只需要根据明确定义的一组契约来实现回调接口。 该类可以直接通过数据源的引用实例化,然后在服务中使用; 数据源( d a t a s o u r c e ) 角色:该角色可以看作是_ 个通用的数据库连接工厂, 用户不需要知道具体的数据库连接的细节,用户只需要提供j d b c 驱动完整的 类名、和相对于j d b c 驱动的不同u r l 以及数据库的用户名和密码,它们通常 作为构造函数的参数传入; 抽象j d b c 操作角色:这是j d b c l 色m p l a t e 模板类所实现的接口,它定义了 模板类所需实现的基本操作: 抽象j d b c 访问角色:该类是j d b c t c m p l a t e 模板类的父类,它主要实现了 西南交通大学硕士研究生学位论文第1 4 页 对数据源类和异常类的设置; s t a t e m e n t 回调角色:该角色主要由s t a t e m e n t c a l l b a c k 回调接口来担任,具 体的处理类都是该接口的实现,它通过回调机制在d o h i s t a t e m c n i 函数中对 s t a t e m e m 进行处理。通过回调机制的运用使得s t a t e m c n t 角色只用专注于业务 逻辑的处理而不用关心对资源的管理,能够帮助用户避免一些常见的错误,有 效的防止资源的泄漏; r e s u l t s e t 回调角色:该角色主要由r o w c a l l b a c k h a n d l e r 接口来担任,具体 的处理类都是对该接口的实现。它也是通过回调机制在p r o c c s s r o w 函数中实 现对数据集中每一数据行的处理,通过与值对象的结合使用将数据查询结果集 组装到值对象中,能够将结果集从数据库连接中“脱离”出来; 异常处理角色:该角色由s q l e x c e p t i o n n 锄s l a t o r 接口担任,这是一个需 要实现的接口,它被用来处理s q l e x c e p t i o n 和我们的数据访问异常 c o m p o n c n d a o d a t a a c c e s s e x c c 硼o n 之间的转换。 以用户调用模板类进行数据库查询操作的交互过程为例,其过程如图3 4 所示,从图中可见,用户只用关心对业务逻辑的处理,使用过程具有方便性和 简洁性。 扣- ! ! 粤 目 m 一 。em匿匾。9ib擘总 0 一 血) 一 伊蓍ii;i 。r厂 西南交通大学硕士研究生学位论文 第1 5 页 图3 4 模板类使用序列图 对应于该操作,j d b c t e m p l a t e 模板类内部运用了两级回调来处理用户的 查询操作,其序列图如下所示: 皇 等早甲甲甲甲甲译 :,竺:! ! 。: u 厣赢酬 j ; ;烂竺一 矿 。一噬薹蓦”3 产一。l 。 i 一 。 i ,一。 r 1 纛蠹蕈礴寓m ;i 疆拦) ? 。;! ! 芝! ! ! ! 竺磐4 i i ? 圜i 土j 旷一r 。j i c b :t o。i 蓐舀孛争; i 。h 差 i ! 图3 5 模板类内部调用序列图 这两级回调第一次发生在对s t a t e m e n t 的回调处理,对应于5 中的 d o i 璐t a t e m e n t ( s t a t l c n ls t m t ) ;第二次回调发生在对r e s u l t s e t 的回调处理, 即8 中的p m c c s s r o w ( r e s u l t s e tr s ) ,使数据集不再依赖于数据库连接。 所以,从上图可以看出,用户在进行数据库操作时可以简单的告诉模 板类“我要做什么,我要的结果是什么样的”,具体的c o i i i l e c t i o n 、s t a t e m e n t 、 r e s u l t s e t 等资源的管理都抽取出来由模板类自己进行处理,简化了用户的使 用过程,同时也具有了更好的安全性,从这里也可以看出构件具有“轻量级” 的特点。 西南交通大学硕士研究生学位论文 第1 6 页 3 2 2 2 更新操作处理 在本构件的设计中我们通常将数据库的插入、更新、删除统一称为更新 操作( 因为它们都对数据库表进行了修改) 。同查询操作类似我们采用回调 方法来完成,在回调中进行数据的更新操作。该操作涉及到的不同角色间的 关系如图3 6 所示: 图3 6j d b c t e m p l a t e 模板类更新操作类图 相对于查询而言,更新操作的类图相对简单一些,该操作同样以 j d b c l e m p

温馨提示

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

评论

0/150

提交评论