已阅读5页,还剩53页未读, 继续免费阅读
(机械设计及理论专业论文)基于j2ee技术的产品发布网站的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 基于j 2 e e 技术的产品发布网站的设计与实现 摘要 目前,基于j 2 e e 标准的平台架构层出不穷,本文分析了如何构 建一个完善的系统应用。 本文以笔者参与开发的一个项目虚拟实验产品发布平台 为依托,分析了基于j 2 e e 标准的w e b 应用程序的开发。 首先,笔者分析了系统应用分层的重要性并阐述了如何恰当的分 层:分析了如何减少系统应用层次间容易产生的耦合性以便让每个层 次以一种松散偶合的方式彼此作用而不用管底层的技术细节。 其次,阐述了各个层次所应该使用的技术、设计模式等以及各个 层次所应该分别实现的系统功能:怎样建立用户接口? 在哪里处理业 ,务逻辑? 怎样持久化数据等等,进而提出了采用一种基于j 2 e e 标准 的架构实现,即,持久化层+ 业务层+ 表示层的层次结构。 然后,笔者重点阐述了虚拟实验产品发布平台中各个层次的具体 技术构建用h i b e m a t e 来构建持久层,用s p r i n g 来构建业务层,用 s t r u t s 来构建表示层,详细阐述了各个层次的技术实现细节以及所实 现的系统功能等,并做到三个层次之间最大限度的松散耦合且层次间 各司其职。 最后,笔者对论文的编写工作进行了总结,阐述了j 2 e e 的当前 形势,以及本文的研发意义。 关键词:j 2 e ew e b 应用h i b e m a t e s p r i n g s t r u t s a b s t r a c t t h ep a p e re x p a t i a t e sh o wt ob u i l da p e r f e c tw e ba p p l i c a t i o nu n d e r t h eb a c k g r o u n dt h a tal o to ff r a m e w o r k e m e 玛ei ne n d l e s s l yn o w t h ep a p e r , b a s e do na p r o j e c tw h i c ha u t h o rp a r t i c i p a t e di n ,a n a l y z e s t h ew o r ko f d e v e l o p i n gw e b s f i r s t l y , a u t h o ra n a l y z e dt h es i g n i f i c a n tt oa p p l i c a t i o nl a y e r , a n dh o w t om a k ei tr i g h t t h e n ,a u t h o re x p o u n d e dh o wc a nt h ea p p l i c a t i o nb e d e s i g n e ds ot h a ti ti sl o o s e l yc o u p l e da n df l e x i b l et oc h a n g e s e c o n d l y , a u t h o re l a b o r a t e dt h et e c h n i q u ea n dd e s i g np a t t e r n sw h i c h w i l lb eu s e di nb u i l d i n ge v e r yl a y e r ,a n di l l u m i n a t e dh o ww ea r eg o i n gt o c o n s t r u c tu s e ri n t e r f a c e s ,w h e r et h eb u s i n e s sl o g i cw i l lr e s i d e ,a n dh o w t o p e r s i s ta p p l i c a t i o nd a t a ,e t c a n da d o p t e dt e c h n o l o g i e si m p l e m e mw h i c h b a s e do nt h ej 2 e es t a n d a r d ,v i z p r e s e n t a t i o nl a y e r + b u s i n e s sl a y e r + p e r s i s t e n c el a y e r a f t e r w a r d s ,a u t h o re x p a t i a t e do nt h ei d i o g r a p h i c t e c h n i q u e i n b u i l d i n ge v e r yl a y e r , t h a ti s ,f o rt h ep r e s e n t a t i o nl a y e ra u t h o ru s e ds t r u t s ; f o rt h eb u s i n e s sl a y e ra u t h o ru s e ds p r i n g ;a n df o rt h ep e r s i s t e n c el a y e r a u t h o ru s e dh i b e r n a t e t h e na u t h o ri l l u m i n a t e dw h a tf u n c t i o ns h o u l eb e i m p l e m e n t e df o re v e r yl a y e r ,a n dh o w t or e d u c et h ec o u p l i n gb e t w e e nt h e l a y e r s i nt h ee n d ,a u t h o rs u m m a r i z e dt h ep a p e r , a n a l y z e dt h ep o s i t i o nf o r j 2 e e ,a n de x p l a i n e dt h es i g n i f i c a n tf o rt h i sp a p e r ss t u d y i n g k e y w o r d s j 2 e e w e ba p p l i c a t i o nh i b e r n a t e s p r i n g s t r u t s 2 独创性( 或创新性) 声明 本人声明所莹交的沧文是本人在导师指导下进行的研究工作及取锝的研究成果。尽我所 知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰 写过的研究成柴,也不包宙为获缮北京邮电大学或其他教育机捣的学位或证书面使用进携褪 料。与我一同工作的同志对本研究所做的任何贡献均己在论文中作了明确的说明并表示了谢 意。 申请学位论文与资料若有不实之处 本人签名: 裂纽 本人承担切相关责任。 尽期: 2 1 1 生:生:玉 关于论文使翊授权的说明 学位论文作者完全了解北京掷电大学有关保留和使用学位论文的规定,即:研究耋e 在校 攻读学位期间论文工作的知识产权单位属北京邮电大学。学校有权保留茹向国家有关部 门或枧构遴交论文的复印件和磁盘,竞许学位论文被套阅和借阅;学校可以公布学位论 文的全部或部分内容,可以允许采用影印、缩印或其它复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后遵守此规定) 保密论文注释:本学位论文属于保密在一年解密后适用本授权书。非保密论 文注释:本学位论文不属于保密范围,适薅本授权书。 本人签名:塑蕉世 日期: 至! ! :生乙 导p 季签名:毙彳盈绦, r 期: 磁,名 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 1 1 项目背景 第一章绪论弟一早硒形 现今,互联网技术已经在我国得到迅速发展和普及,信息化的快速发展, i n t e m e t 的纵横贯通,网络软硬件价格接受度的合理化,使得各行各业自动化水 平日益提高。传统的产品销售渠道已经不再适合当今日益现代化的行业需求,直 接上门推销产品已经过时,“提供一个网址,就把客户拉迸门”已经成为当今方 便快捷的买卖渠道。通过建立一个面向客户的产品发布平台,可以使企业从事物 理环境中所不能从事的业务,有助于降低企业的成本,提高企业的竞争力,尤其 是对各种各样的企业都提供了广阔发展天地和无限商机,帮助他们节约成本、增 加价值、扩展市场、提高效率并抓牢客户。中小企业可以用更低的成本进入国际 市场参与竞争,同时可以为广大的网上消费者增加更多的消费选择,使消费者得 到更多的利益。正因为如此,我们开发了这个“产品发布平台”,用于对本院的 自主产品“虚拟实验”进行发布工作。 系统是基于w e b 开发的,提供了简单实用的功能模块,包括,产品新闻、 产品介绍、产品咨询、用户管理、留言等等。客户可以登录平台来获得即时的产 品信息,并可以方便的与卖家取得联系。整体架构基于j 2 e e 标准,采用了最新 的三层的j 2 e e 平台的应用体系,实现技术都是当今流行的s t r u t s 、s p r i n g 、 h i b e m “e 等开源架构,目前的测试发布使用免费的m y s q l 和t o m c a t 服务器, 对于以后的大规模发布状态,可以随时变更数据库和服务器。 技术背景 1 2 1j 2 e e 介绍 j 2 e e 是一种利用j a v a2 平台来简化企业解决方案的开发、部署和管理相关 的复杂问题的体系结构。j 2 e e 技术的基础就是核心j a v a 平台或j a v a2 平台的标 准版,j 2 e e 不仅巩固了标准版( j 2 s e ) 中的许多优点,例如,“编写一次、随处运 行 的特性、方便存取数据库的j d b ca p i 、c o r b a 技术以及能够在i n t e r n e t 应 用中保护数据的安全模式等等,同时还提供了对e j b i ( e n t e r p r i s ej a v a b e a n s ) 、 1 。 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 j a v as e r v l e t sa p i 、j s p ( j a v as e r v e rp a g e s ) 以及x m l 技术的全面支持,其最终 目的就是成为一个能够使企业开发者大幅缩短投放市场时间的体系结构。 j 2 e e 体系结构提供中间层集成框架用来满足无需太多费用而又需要高可用 性、高可靠性以及可扩展性的应用的需求。通过提供统一的开发平台,j 2 e e 降 低了开发多层应用的费用和复杂性,同时对现有应用程序集成提供强有力支持, 有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性 能。 1 2 2j 2 e e 的优势 j 2 e e 为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机 制: 1 ) 保留现存的r r 资产:由于企业必须适应新的商业需求,因此,利用已有 的企业信息系统方面的投资,而不是重新制定全盘方案就变得非常重要。这样, 一个以渐进的方式,而不是激进的、全盘否定的方式,建立在已有系统之上的服 务器端平台机制是公司所需求的。j 2 e e 架构可以充分利用用户原有的投资,如 一些公司使用的b e at u x e d o 、i b mc i c s 、i b me n c i n a 、i n p r i s ev i s i b r o k e r 以 及n e t s c a p ea p p l i c a t i o ns e r v e r 等。由于基于j 2 e e 平台的产品几乎能够在任何操 作系统和硬件配置上运行,使得现有的操作系统和硬件也能被保留使用 2 ) 高效的开发:采用j 2 e e 开发技术,允许公司把一些通用的、很繁琐的 服务端任务交给中间件供应商去完成,这样开发人员可以集中精力在如何创建商 业逻辑上,相应地缩短了开发时间。高级中间件供应商提供以下这些复杂的中间 件服务 状态管理服务一让开发者写更少的代码,不用关心如何管理状态,这样 能够更快地完成程序开发 持续性服务一让开发者不用对数据访问逻辑进行编码就能编写应用程 序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护 分布式共享数据对象c a c h e 服务一让开发者编制高性能的系统,极大 提高整体部署的伸缩性 3 ) 支持异构环境:j 2 e e 能够开发部署在异构环境中的可移植程序。基于 j 2 e e 的应用程序不依赖任何特定操作系统、中间件、硬件,因此设计合理的基 于j 2 e e 的程序只需开发一次就可部署到各种平台,这在典型的异构企业计算环 境中是十分关键的。j 2 e e 标准也允许客户订购与j 2 e e 兼容的第三方的现成的组 件,把他们部署到异构环境中,节省了由自己制订整个方案所需的费用 可伸缩性:企业必须要选择一种服务器端平台,这种平台应能提供极佳 2 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 的可伸缩性去满足那些在他们系统上进行商业运作的大批新客户。基于j 2 e e 平 台的应用程序可被部署到各种操作系统上,能消除系统中的瓶颈,允许多台服务 器集成部署。这种部署可达数千个处理器,实现可高度伸缩的系统,满足未来商 业应用的需要 5 ) 稳定的可用性:一个服务器端平台必须能全天候运转以满足公司客户、 合作伙伴的需要。因为i n t e m a t e 是全球化的、无处不在的,即使在夜间按计划停 机也可能造成严重损失,若是意外停机,更将会有灾难性后果。而j 2 e e 部署到 可靠的操作环境中,他们支持长期的可用性。一些j 2 e e 部署在w i n d o w s 环境 中,客户也可选择健壮性能更好的操作系统如s u ns o l a r i s 、m mo s 3 9 0 。最健壮 的操作系统可达到9 9 9 9 9 的可用性或每年只需5 分钟停机时间。这是实时性很 强的商业系统理想的选择。 1 3 应用程序的分层体系结构 计算机应用软件经过4 0 多年的演变,已经由最初的单层体系结构发展为多 层体系结构。在原有的单层体系以及曾经出现的双层体系机构中,界面代码与业 务逻辑代码掺杂在一起,使得程序结构不清晰,开发过程紊乱,而且维护很困难, 特别是对于大型的复杂的软件系统,这一问题将显得尤为突出,因此这两种层次 划分缝构都已经遭到历史的淘汰。最近出现的三层体系结构是对以往层次划分结 构的改善,它把原有体系结构中的应用程序层划分为表示层和业务逻辑层,如下 图1 - 1 所示: 图1 - 1 3 隧獭麟鞫 壤 縻i 攀鞲藕瓣刻 i o 、:# ,一南! 譬,:j j 。”。l 图1 - 2 串 圈 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 三层结构目前已经成为一种典型的应用软件体系结构: 表示层一提供与用户交互的界面。其中的两个典型例子是g u i ( 图形用户界面) 和w e b 页面。 业务逻辑层一实现各种业务逻辑。例如当用户提交登陆请求时,业务逻辑层负责 验证用户的登陆信息,以及当信息正确时把用户转到正确的页面等处理工作。 数据库层一负责存放和管理应用的持久性业务数据。 恰当的为软件分层,将会大大提高软件的各项性能指标:伸缩性、可维护 性、可扩展性、可重用性和可管理性。对于一个合理的分层体系来说,必须满足 以下特征: 每个层由一组相关的类或组建构成,共同完成特定的功能 层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件的a p i , 而下层组件不应该依赖上层组件 每个层对上层公开a p i ,但具体的实现细节对外透明,当某一层的实现发 生变化,只要它的a p i 不变,就不会影响其他层的实现 根据以上分层标准,以及结合j a v a 应用本身的特点,我们把系统开发中的层次 具体的分为三层,把原有的业务逻辑层中的数据访问细节和业务逻辑分开,把 数据访问细节划为单独的持久化层,如上图1 2 所示。 1 4 论文的研究内容 目前,基于j 2 e e 标准的平台架构层出不穷,怎样才能构建出一个完善的系 统平台? 即使用j a v a 建造一个简单的w e b 应用,也不是件轻松的事情。在构建 的一开始就有很多事情要考虑:怎样建立用户接口? 在哪里处理业务逻辑? 怎 样持久化数据等等。在这三层架构中,每一层需要仔细得考虑。本文以笔者最 近所参与开发的一个用于产品发布的平台为依托,分析了基于j 2 e e 开发的系 统应用中,系统所采用的合适的分层结构,以及各个层次所应该使用的技术、 设计模式,各个层次所应该实现的系统功能( 数据验证、事务等) ,兼并考虑到 对系统整体的解耦性,进而设计了一种基于j 2 e e 标准的架构实现。 4 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 第二章持久化层的设计与实现 2 1 持久化层概念 所谓“持久化层”,就是在系统逻辑层面上,专注于实现数据持久化的一 个相对独立的领域( d o m a i n ) 。对于应用系统而言,数据持久功能大多是必不 可少的组成部分。在笔者参与开发的这个系统应用中,独立出一个“持久化层 的概念,而不是“持久模块”、“持久单元”,也就意味着,我们的系统架构中, 存在有一个相对独立的逻辑层面,专注于数据持久化逻辑的实现,与系统其他部 分相对而言,这个层面拥有一个较为清晰和严格的逻辑边界。 持久化层封装了数据访问细节,为业务逻辑层提供了面向对象的a p i 。一个 完善的持久化层应该达到如下的目标: 代码可重用性高,能够完成所有的数据库访问操作 必要的时候,可以支持多种数据库平台 具有相对独立性,当持久化层的实现发生变化时,不会影响上层的实现。 在项目中,我们采用的是h i b e r n a t e 来构建系统应用的持久化层。 2 2 持久化层的几种实现类型 一 一般来讲,持久化层的实现有三种类型: i 混杂模式 持久化功能的原始实现模式,是在业务类中混杂j d b c 访问代码,从而提 供所需的持久化功能。在这样的实现结构下,业务代码中混杂了基于j d b c 硬编 码的持久化实现。 大量的实践证明,这种模式的优点在于开发的迅速便捷,对于小型应用而 言显得别具意义。但另外,基于这种模式开发的系统,其维护性和扩展性较差, 对象属性、数据库结构的变动都将直接导致业务逻辑代码的修改。在这种模式中, 并不能清晰的分辨出所谓“持久化层”的逻辑层次。因此我们这个项目,并不采 用这种方法。 i i 基于d a t ac l a s s 的持久化层实现模式 在这种模式中,数据类( d a t ac l a s s ) 作为业务类与持久化层沟通的桥梁, 起着承上启下的作用。d a t ac l a s s 实际上包含了d a o 模式中的d o m a i n c l a s s o b j e c t 署1 3 d a t aa c c e s s o rc l a s s 。d o m a i nc l a s s 作为对现实世界的抽象,起着 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 信息携带者的作用,而d a t aa c c e s s o r c l a s s 则通过j d b c 代码将d o m a i nc l a s s 与 数据库表相关联。在这种模式中,我们实现了业务逻辑与底层数据结构之间的分 离。d a t ac l a s s 作为一个相对独立的逻辑层次,较为清晰的体现了所谓“持久化 层”的概念。底层关系数据的结构变化,可以较好的屏蔽在数据类这个层次,从 而避免对上层的业务逻辑造成影响。 在目前正在运行的很多j a v a 企业应用系统中,基于这种类型的设计占了很 大比重。而这种模型的缺陷也显而易见,随着设计层次的增多,编码量的增加相 当可观。相对第一种混杂模式而言,系统结构上得到较大提升的同时,项目设计 和开发成本也相应增高。烦杂的j d b c 代码需要大量的人力去编写,单纯依靠自 身力量进行设计和编码,这样的问题难以避免。基于如上原因,我们也没有采用 这个模式,而是采用了如下的第三种模式。 i i i 基于现有持久化层框架的实现模式 实际上,这种模式是第二种模式的延伸。d a t ac l a s s e s 所包含的d a t a a c c e s s o r 和d o m a i nc l a s s 数量并没有减少。只是,我们把其中最为繁琐的工作 甚于j d b c 的o rm a p p i n g ( 对象关系映射) 工作,交由第三方组件完成。 d a t a a c c e s s o r 中的繁琐编码工作因此得到了空前简化,而于此同时,伴随持久 化层框架而来的辅助工具也大大减轻了d o m a i nc l a s s 的编码负担,如下的模式 所示: 2 3 采用h i b e r n a t e 来构建持久化层 2 3 1o rm a p p i n g 技术 在j a v a 发展的初级阶段,直接调用j d b c 几乎是数据库访问的唯一手段, 随着近年来设计思想和j a v a 技术本身的演化,出现了许多j d b c 的封装技术, : , 6 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 这些技术为我们的数据库访问层实现提供了更多的选择。 o rm a p p i n g 技术,即,o b j e c t r e l a t i o nm a p p i n g ( 对象关系映射) ,是建 立在面向对象的基础之上。o rm a p p i n g 为系统设计提供了更加自然的实现方 式。我们可以通过o rm a p p i n g 将系统中的d o m a i no b j e c t 自动映射到各个数据 库表,从而在实际编码中只需关,t 二, o b j e c t 的相关属性,而无需再纠缠于j d b c r e s u l t s e t 中毫无意味的字段型数据。o rm a p p i n g 软件具有中间件的特性。所 谓的中间件,就是在应用程序和系统之间的连接管道。中间件和普通的应用程序 代码的区别在于,前者具有很高的可重用性,对于各种应用领域都适用;后者和 特定的业务功能相关,不同业务领域的应用程序代码会很不一样。 目前在持久化层的研发领域,已经出现了许多优秀的0 rm a p p i n g 技术, 有的是商业性的,有的是开放源代码的。我们所采用的是众多o rm a p p i n g 技术 中的一种,即,h i b e r n a t e 框架。h i b e r n a t e 是一种越来越受欢迎的开放源代码的 o rm a p p i n g 软件。h i b e r n a t e 作为一个开源框架,提供了对j d b c 的完好封装技 术,以优良的设计大大提高了数据库访问层的开发效率,并且通过对数据访问中 各种资源和数据的缓存调度,实现了更佳的性能。h i b e r n a t e 具有中间件的另一 个特点,即透明性,作为h i b e r n a t e 的使用者,我们无需关心它的具体实现,而 只需要知道如何访问它的接口就行了。正是基于上述原因,所以我们采用了 h i b e r n a t e 来开发应用系统的持久化层。实践证明,采用h i b e r n a t e 大大缩短了开 发过程的复杂性,使系统持久化层的结构清晰明朗,大大减少了持久化层和相邻 各层次间的耦合度,同时增加了系统的可扩展性。 2 3 2 h i b e r n a t e 构建代码 h i b e r n a t e 作为优秀的o rm a p p i n g 技术,在构建j 2 e e 持久化层方面,具 有方便的o o p 模式,其所需要的基础代码也是清晰易懂。i - i i b e r n a t e 内部提供了对 j d b c 、j t a ( j a v at r a n s a c t i o na p i ) 和j n d i ( j a v an a m i n ga n dd i r e c t o r yi n t e r f a c e ) 等的封装。由于j d b c 提供底层的数据访问操作,因此只要用户提供了相应的 j d b c 驱动程序,h i b e r n a t e 可以访问任何一个数据库系统。 i 持久化类p o 持久化类,即,p e r s i s e n to b j e c t ,是一个符合j a v a b e a n 规范的纯j a v a 对象, 其实例需要被h i b e r n a t e 持久化到数据库中。持久化类通常都是域模型中的实体 域类。o rm a p p i n g 追求的目标就是要p o 在使用上尽量和p o j o 一致。这里的 p o j o 就是所谓的“p l a i no r d i n a r yj a v ao b j e c t ”,字面上来讲就是无格式普通j a v a 对象。在运行期,由h i b e r n a t e 的c g l i b 动态把p o j o 转换为p o ( c g l i b 是一个 7 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 功能强大的j a v a 字节码生成工具,它能够在程序运行时动态生成扩展j a v a 类或 者实现j a v a 接口的代理类) 。在运行期生成p o 的好处非常大,这样对于程序员 来说,是无法接触到p o 的,p o 对我们来说完全透明,可以更加自由的以p o j o 的 概念操纵p o 。另外由于是运行期生成p o ,所以可以支持增量编译,增量调试。 可以说,p o j o 在h i b e r n a t e 语义中理解为数据库表所对应的d o m a mo b j e c t 。在 编写p o j o 的时候,h i b e r n a t e 并不要求持久化类必须实现j a v a i o s e r i a l i z a b l e 接口, 但是对于采用分布式结构的j a v a 应用,当j a v a 对象在不同的进程节点之间传输 时,这个对象所属的类必须实现s e r i a l i z a b l e 接口,特别是在j a v aw e b 应用中,希 望对h t t p s e s s i o n 中存放的j a v a 对象进行持久化,因此这个j a v a 对象所述的类也必 须实现s e r i a l i z a b l e 接口。 在系统的实际开发中,结合项目需求以及开发过程的模式化,我们对系统 中p o j o 的编写上采用了如下的模式关系: 其中,基类a b s t r a c t e n t i t y 实现7 s e r i a l i z a b l e 接口,并定义了系统中其它的p o j o 都 需要定义的一些常量和方法,如下代码片断: 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 可以看到,a b s t r a c t e n t i t y 中定义的都是一些常量和基础方法,不涉及具体的 d o m a i no b j e c t 。例举项目中的一个典型的p o j o 如下: 其中,每一个p o j o 持久化类,必须有一个i d 属性,用来标识类的每一个对象, 也称为对象标识符,即,o i d ( o b j e c ti d e n t i f i e r ) ,是关系数据库中的主键( 亦 为代理主键) 在j a v a 对象模型中的等价物。h i b e r n a t e 内置了多种标识符生成器, 我们采用的是其中的u u i d h e x ,即,采用1 2 8 位的u u i d ( u n i v e r s a lu n i q u e i d e n t i f i c a t i o n ) 算法来生成标识符,能够在网络环境中生成唯一的字符串标识符, 最终生成的对应数据库表中,主键为3 2 位的字符串。在p o j o 持久化类中,我 们没有引入任何的h i b e r n a t ea p i ,这样提高了持久化类的独立性,如果日:后决定 f + - 9 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 要采用其他的o rm a p p i n g 工具时,不需要对持久化类进行任何修改。 可以看到,我们采用j a v a b e a n 的g e t t e r s e t t e r 形式来构建p o j o ,不仅是一 种良好的j a v a 编码规范,同时在以后也可以配合s p r i n gi o c 机制来实现对数据、 实现的动态注入。另外,在j 2 e e 项目开发中,广泛存在的持久化层p o j o 至l j 表示 层v o 的转换问题,也可以提供很好的解决。 i i h i b e r n a t e 映射文件 p o j o 在这里体现的就是o rm a p p i n g 中o b j e c t 层的语义,而映射( m a p p i n g ) 文件则是将对象( o b j e c t ) 与关系型数据( r e l a t i o n a l ) 相关联的纽带,在h i b e r n a t e 中,映射文件通常以“h b m x m l ”作为后缀,例举系统中和如上p o j o 对应的 h i b e r n a t e 映射文件如下: 1 0 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 其中, 元素的n a m e 属性设定类名,t a b l e 属性设定对应的表名, 子元素设定类的属性和表的字段的映射,n a m e 属性指定持久化类的属性的名字, t y p e 属性指定h i b e r n a t e 映射类型,这是j a v a 类型与s q l 类型的桥梁,c o l u m n 属性 指定与类的属性映射的表的字段名。 在实际的开发过程中,我们并没有采用手工方式来编写h i b e r n a t e 映射文 件,而是运用方便快捷的x d o c l e t 技术。 x d o c l e t 包含了一个为h i b e r n a t e 提供支持的子类库h i b e r n a t ed o c l e t ,其中 包含了生成h i b e r n a t e 映射文件所需的a n t 构建支持以及j a v ad o ct a g 支持,在上 面例举的p o j o 代码中的 部分,即是x d o c l e tt a g ,在实际的开发过程中,我们通过编写带有x d o c l e tt a g 的p o j o 来建立持久化类,从而为其添加特定的附加语义,之后通过x d o c l e t s e 具 对代码中j a v 山o ct a g 进行分析,自动生成与代码对应的配置文件。 通过a n t 工具,h i b e r n a t ex d o c l e t 就会根据如上的这些x d o c l e tt a g 来自动 生成映射文件,系统所用的a n t 文件片段如下: 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 i j ! 豇醣s 醚篡j 誊霉i 薯_ = 1 i 裂j 譬薹譬:0 盎 :二:= ;麓,薯叠蠢曩_ ! = :_ 蔫舞_ _ ! = 瓣蜚燕蔓。蓦蓦一善i ! 蠢胁e 霸i 甜霞i i 鹾i 苍i 精:怼i o ! ! z 摹j 纂墨j _ 一i 毒“ 翟i :囊囊甜誊i 嚣簿j 戮馨蒋翼强蛰巍誊嚣学譬矗曩,。董。 i 州始卿鳃媸谶鬻鬻琴囊蒸i 蓼冀, 囊i i i 秘笺誊藿i ! i i 鬻i 蘩蠹i i 攀 j 霪i 蒸篡 j 墓i 誊:i i j = = _ _ 1 、i 一 -一j i 之嗽哑嘲曩誊:鎏曼i 誊i 参麓蓦。篡= = “。 这样不仅进一步缩短了开发过程的繁琐性,同时也可以确保h i b e r n a t e 持久化类与 h i b e r n a t e 映射文件之间的一一对应,增加了开发阶段的安全系数。 至此,h i b e r n a t e 要真正的运作起来,还需要最关键的一个配置文件,即 h i b e r n a t e 配置文件。h i b e r n a t e 同时支持x m l 格式的配置文件,以及传统的 p r o p e r t i e s 文件配置方式。在p r o p e r t i e s 文件中无法进行配置,必须通过代码中的 h a r dc o d i n g 加载相应的映射文件,而x m l 配置文件提供了更易读的结构和更强 的配置能力,可以直接对映射文件加以配置,因此我们在开发中采用了x m l 型配 置文件。例举在我们的系统中所采用的h i b e r n a t ex m l 格式的配置文件代码片断: 1 2 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 其中, 指定了系统数据库所使用的s q l 方言, 鬻翼瓣囊瓣瓣慧蒸黼黼然豢麓鬻骥鋈i 囊羲鬻i 鹱;交骧照夔l 妻囔 露鬟暴露i 雾i ;孽囊鏊:嚣蓑i 鬻荔嚣攀豢纛薹j ;i 嚣荣鏊黧萋薹瀵誊囊露篓麓蒌錾蘩;夔i i 纛;彝蓑i 藜i 指定了系统数据库所使用的驱动程序, 具体指定了连接系统数据库的u r l 、用户名和密码, 指定了需要加载的h i b e r n a t e 映射文件列表, s q l 语句,这样做有利于跟踪和调试应用程序的运行状态,在系统应用的发布 阶段,应该把这个属性设为“f a l s e ,可以减少应用的输出信息,提高系统的整 体运行性能。 2 3 3d a o 设计模式 多数情况下,我们面对的应用系统要实现错综复杂的业务,以往的项目经 验也证明,如果不采用适当的代码分离设计,对于一个动辄包含了十几甚至几十 个业务步骤的业务过程而言,如此的代码将对日后的维护带来极大的困难。针对 此问题,在项目中我们采用y d a 0 ( d a t aa c c e s so b j e c t ) 模式,d a o 模式实际上 是两个模式的组合,臣o d a t aa c c e s s o r 模式和a c t i v ed o m a i no b j e c t 模式,其中 d a t aa c c e s s o r 模式实现了数据访问和业务逻辑的分离,而a c t i v ed o m a i no b j e c t 实现了业务数据的对象化封装,我们将这两个模式组合使用。 d a o 模式通过对业务层提供数据抽象层接口,实现了以下目标: 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 i 数据存储逻辑的分离 通过对数据访问逻辑进行抽象,为上层结构提供抽象化的数据访问接口。 业务层无需关心具体的j d b c 语句,例如s e l e c t 、i n s e r t 、u p d a t e 等对数据库的操 作,这样一方面避免了业务代码中混杂j d b c 调用语句,使得业务逻辑实现更加 清晰,另一方面,由于数据访问接口与数据访问实现相分离,也使得开发人员的 开发模块划分的更加清晰。这样,精通数据库操作技术的开发人员可以根据接口 提供数据库访问的最优化实现,而精通业务的开发人员则可以抛开数据层的繁琐 细节,专注于业务逻辑编码。 i i 数据访问底层实现的分离 d a o 模式通过将数据访问划分为抽象层和实现层,从而分离了数据使用和 数据访问的底层实现细节,这意味着业务层与数据访问的底层细节无关,也就是 说,我们可以在保持上层结构不变的情况下,通过切换底层实现来修改数据访问 的具体机制。常见的一个例子就是,我们可以通过仅仅替换数据访问层实现,将 我们的系统部署在不同的数据库平台之上。 在我们的实际项目开发中,对具体的针对各个模块的d a o 接口开发,采用 了如下的模式结构: 其中,接b a s e d a o 定义了各个模块都需要使用的一些基本的方法,代码片断 如下: 1 4 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 而其具体功能的实现类为如下的b a s e h i b e m a t e d a o 类: 。通常情况下,对于实现类的编写,可以利用h i b e r n a t ea p i 来进行编码工作。 其中,s e s s i o n f a c t o r y 提供的s e s s i o n 接口是h i b e r n a t e 向应用程序提供的操纵数 据库的最主要接口,提供了基本的查询、保存、更新、删除等方法。 鉴于开源框架s p r i n g 提供了良好的内建的对h i b e r n a t e 的支持,因此,我们 项目中的d a o 全部继承自h i b e m a t e d a o s u p p o r t 类,这使得我们容易取得一个到 h i b e r n a t e t e m p l a t e 类的引用,h i b e m a t e t e m p l a t e 是一个帮助类,它能简化 h i b e r n a t es e s s i o n 的编码和处理h i b e m a t e e x c e p t i o n s ,例如上述代码中的 隧鬻鬻燃骥鬻熙黪黪嘲穗饕羹囊瓣蘩i 篱i i 囊蒸鬻i 婺i :攀蓍鋈蓬攀纂i 囊i 鬻i 雾蓑鬻鬻夔i 羹襄骥蓥鬻 鬻蘩蠹烈嘲黧黧囊峨斓黛熬斡i 燃搿燃鼗黪藜鬻蠹藜纂爨辫蒸瀵篓鎏燃黉瓣 蛰戳鋈蠹薹熟蕊鼗! 羹篓簸量鬻菇鎏蕊i 霆萋霆:蠹妻瓣j 誊鼙鼍妻黧警餐,冀戮鏊j 善蘸;壁鼗;鼗蠹羹i ;篓鬟擎i 蓥塞冀! 攫慧黪 其中,g e t h i b e m a t e t e m p l a t e 0 即可获得一个至l j h i b e m a t e t e m p l a t e 类的引用, l o a d a l l 0 为其中的一个方法。然后,针对每一个d a o 模块所建立的接口,均扩 展b a s e d a o 接口,分别定义了各个模块所需要的一些特定的方法,例举用于用 户模块的m e m b e r d a o 接口: 鬻鬻一 熏篱一 粪篱熙嚣鬻孵 鬻蝤 蒸鬻辩蜷警遗i;i囊一醺警 稿瀚一 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 ;爹l :j 燮i 鬻:戆壁糕瀵夔鬃鬻麟l 鬻l 懑黪嗲黪麟豢蒸蒸蒸粪蒸蒸攀豢誊攀; i i 誉鋈震繁爨骥黧缫纂孽蘩鬻憋鎏、:婺;羹j ,誉j 鋈鎏| | 熏麓藜翼纂i _ :_ 霪i ! 粪鬻粪蒸蒸溪鬓蒸鬻繁i 漂鬻藜攀攀寨攀蒸鋈| | 蓊藜褥骥黧蘸鬻麟器誉 圣薹。誊囊麓懑j 囊琴:黧i 鍪孽i 粪囊羞誊i 霪蠢囊霪薹篱篱誉萋囊誊嚣:鬃i 潭荔0 馨j 蔓耋、篆誊i 雾i :馨纛溪;纛黧豢蘸l 蕤鬟熏熬i 舞鬃薹蓦誊萋妻j 曩 针对m e m b e r d a o 接1 2 1 的具体的实现类为m e m b e r d a o l m p l ,代码片断如下: i i i - 资源管理和调度的分离 实践证明,大多数系统的性能瓶颈往往并非集中于业务逻辑处理本身。在 系统涉及的各种资源调度过程中,往往存在着最大的性能黑洞。d a o 模式将数 据访问逻辑从业务逻辑中脱离开来,使得在数据访问层实现统一的资源调度成为 可能,通过数据库连接池以及各种缓存机制( s t a t e m e n tc a c h e ,d a t ac a c h e 等) 的配合使用,可以在保持上层系统不变的情况下,大幅度提升系统性能。 至此,各个模块的d a o 和其相应的实现类,已经编写完成,下一步就是利 用s p r i n g 框架提供的i o c 机制,来动态的对持久化层的d a o 接口加载其相应的实 现。对于我们这个多层的j 2 e e 应用,由于每一层都有一个自己的 a p p l i c a t i o n c o n t e x t 定义( 此处的具体解释将在业务层章节讲解) ,有效地组成 了一个层次结构,因此我们创建了一个由不同层的x m l 定义文件组成的组合 a p p l i c a t i o n c o n t e x t 。在持久化层,我们创建了一个 a p p l i c a t i o n c o n t e x t p e r s i s t e n t x m l 文件,用来对持久化层进行i o c 处理,代码片 断如下: 1 6 北京邮电大学硕士论文 基于j 2 e e 技术的产品发布网站的设计与实现 其中,对于i d = ”d a t a s o u r c e ”的b e a n , 定义了所使用的数据库连接池。 对于a p p l i c a t i o n c o n t e x t - - p e r s i s t e n t x m l 中的每一个 元素,i d 属性是这 个 的标识符,d a s s 属性则指定了这个 的真正的实现类, 子元素指定参数,其中n a m e 属性指定参数名字,而r e 仔元素,则用来设置此属 性值引用容器管理的其他b e a n ,即,如上的i d = ”d a o ”和i d = ”d e a l e r d a o ”的两个 b e a n ,均含有一个参数名字为s e s s i o n f a c t o r y ,而参数s e s s i o n f a c t o r y 则具体指代 , + 1 7 北京邮电大学硕士论文基于j 2 e e 技术的产品发布网站的设计与实现 i d = ”s e s s i o n f a c t o r y ”的另一个b e a n 。 至此,舜j d a o 接口和其实现类的具体指定,就通过s p r i n gi o c 机制,利用 a p p l i c a t i o n c o n t e x t p e r s i s t e n t x m l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 格力电器招聘面试题及答案
- 会计基础初会题库及答案
- 护士长笔试题库及答案
- 2026年南充科技职业学院单招职业技能考试必刷测试卷含答案
- 2026年梅河口康美职业技术学院单招综合素质考试必刷测试卷及答案1套
- 2026年湖南交通职业技术学院单招职业倾向性测试题库附答案
- 2026年民办四川天一学院单招职业技能测试题库含答案
- 2026年成都职业技术学院单招职业技能测试题库新版
- 2026年河南医学高等专科学校单招职业技能考试题库新版
- 2026年安徽绿海商务职业学院单招职业技能测试题库完美版
- 茶叶直播销售脚本及话术指南
- 第12课 中国共产党诞生 课件(内嵌视频)
- 2025年教师职称考试(道德与法治学科知识)(小学)模拟试题及答案
- 高温合金塑性成形工艺的微观组织调控研究
- 零星工程维修服务方案
- 快递业网络安全培训课件
- 2025年中国电磁兼容性(EMC)屏蔽设备行业市场全景分析及前景机遇研判报告
- 地产项目资金管理制度
- 安全培训师的条件和要求
- (2025秋新版)人教版九年级物理上册全册教案
- 多人合资炒股协议书范本
评论
0/150
提交评论