基于轻量级J2EE架构的一种持久层设计


笫 l8 卷 第 6 期 200 8 年 6 月 计 算 机 技 术 与 发 展 (X )M P U T }.=R T E (’卜 N O L C K ;Y A N D D E \te l O p M ~eZN T V 0 1.18 N O .6 ]u n . 200 8 基 于轻 量 级 J2E E 架构 的一种 持 久 层设 计 朱平付 ,季桂树 ,尹 辉 (中南大学 信息科 学与工程学院,湖南 长沙 410083) 摘 要:在基于 J2EE 项 目的开发过程中,数据持久层的设汁是一项重要的工作 ,它为业务逻辑层提供了操作数据的接 E1, 持久 层性能 的优 劣直 接影 响到业 务逻辑 层 和表 示 层 的效 果 。在分 析 目前 主流 持 久层 解 决 方 案 的基 础 上 ,提 出 了一 种 对 . IⅨ3C 的轻量级封装并应用 DA O 模式实现对数据库的透明访问、降低耦合性 的方法 ,该方法运用 Java 语言的反射和代理 机制 ,遵循软件工程中成熟的分层结构设计规范,同时兼顾框架设计中可靠、安全和可扩展的要求。给出该框架 的设计和 实现过程 ,通过实例论证了采用这种框架的技术优势 。 关键词 :数据持久层 ;DA O 模式 ;JD BC ;J2EE ;轻量级 中图分类号:TP311.5 文献标识码 :A 文章编号 :1673 — 629X (2008)06 — 0094 — 03 A S olu tio n o f D ata P ersisten ce B ased O11 L ig h tw e ig h t J 2 E E F ram ew ork Z H U P ing—fu ,J I G u i—sh u ,Y IN H u i (School of hfform ation Sc ience and E 1N ineeriiG ,C entral South U niversity,C hangsha 410083 ,China) A bstract:T he data persistence layer’S design plays an im portan t role in the J2E E developm ent environm ent.It provides business logic lay— er w ith th e o p eratio n d ata in terfa ce ,th e p erfo r m an ce of d ate p ersiste nc e lay e r in flu en ces th e p e rfo n -nan ce of b u sin ess 1o g ic la y er an d p resen — ta tio n lay e r d irectly .B ase d o n th e resea rch o f se ve ra 1 cu rr en t m ain strea m .so lu tio ns o f d ata p e rsisten ce 。p resen ts th e m eth od o f lig h tw e ig h t encapsulation JD BC an d applies the D A O pattern to ach ieve tran spar ent acce~ to database ,reducm coupling degree.T he m ethc~l uses the m ethod of reflection and proxy m echanism of the Java languag e,follow s the m ature softw ar e engineering h ierar chical structure design specifications,takes into account the reliable,safe an d scalability requ irem ents during fram ew ork des ign .T h en gives the design an d im ple— m en tatio n p rcx:e ~ o f th e fram e w o rk .F in ally ,acco rd ing to a real ex am p le ,it s ho w s th e ad van tag e s o f ap p ly ing th is fram ew o rk . K ey w ords:data persisten ce 1ayer;D A O pattem ;JD B C ;J2 E E ;lig htw eight O 引 言 随着 Internet 的发展 ,在 J2E E 的企业级应 用系统 开发 中已经存在不 少框 架。在 系统架 构分析 时 ,如何 应用这些 已有框架为应用 系统量身定做一个合适 的架 构 ,对 J2E E 设计开 发者提 出了挑战 。 B 是为解 决分 布式对象和远程事 务等 复杂问题而设 计 ,基于 B 的 J2E E 架构也并非适 用 于所有 系统 。对 于大 多数运行 在⋯ 个 JV M 上 的系统 ,采用重量级的 B 是没有必要 的。广大 J2E E 开发 者在 追 寻一种 轻量 级 J2 E E 架构 的过程 中 ,同时 也从 设计 的角 度 阐述 了轻量 级 J2EE 架构 的 特 点 和 优 势 ,比如 来 源 于 开 源 社 区 的基 于 Struts + St)ring + H ibernate 的 J2 E E 轻 量级架 lf句就得 到 收稿 日期 :2007 ⋯ 09 — 11 作者简介:朱平付 (1982 一),男 ,湖南 娄底 人 ,颈 士研究生 ,研 究方 向 为软件工程 、数据库与 网络技 术等 ;季桂树 ,副教授 ,研 究方 向为数 字图像处 、软件工程 、多媒体技术等 。 了广大开发者的欢迎 。 J2E E 的三 层 结 构在 业 界 是 指 表 示 层 (P resents— tim ) 、业 务 逻 辑 层 ( B usines8 logic )、持 久 层 (P ersis— tence)。在基于 J2EE 的应用 中 ,系统 的数 据持 久层负 责对数据库存储数据 ,同时也 负责数 据的检索 、更新 和 删 除。 目前对持久层的实 现存在 多种解 决方 案 ,如基 于 J2E E 容器 的容器管理持久化 (C M P )、由 JC p 官方发 布 的 JD o 规范 诞生于开 源社 区的 H ibernate 和 T opL ink 框 架Ⅲ1 。C M P 需 要 重 量 级 J2E E 容 器 的支 持 ,同样 Jr'X ) 也不是一个轻量级 封装 ,它 试 图建立 一个完整 的 持久 层框 架 .但 是还 不 完善 ,像 H ibem ate 和 T opLink 这些 0 RM 工具的使用 固然能够 简化数据 持 久层 的开 发过程 ,但 是简化的 时所付 出 的代 价就 是数 据访 问 效率的下降 ,对于一个多用 户的 J2E E 系统来 说 ,效率 是需要考虑的 一个重要因素 。另外 ,类 似 H ibem ate 这 样的 O R M 工具 目前 只支持 对数 据库 表 中表 的操 作 , 维普资讯 http://www.cqvip.com 第 6 期 朱平 付等 :基于轻量级 J2E E 架 构的一种持久层设计 · 95 · 对其它比如视图(view ) 、存储过程(store procedure)等 缺乏支持 。而 JD B C 作 为 Java 平 台 的标准 组 成部 分 , 提供了对数据库跨平台的访问。JD BC 本身具有的灵 活性结合数据库 连接池的优点进一步增加 了使用基 于 JD BC 访 问数据库 的优势 ,所 以在 文 中采用 对 JD BC 的 轻量级封装 和 DA O 设计 模式来 进行 数据 持久 层 的设 计 [2】。 1 持 久层 的设计 1 .1 JD B C 体 系结构和 D A o 模式 JI]}jC 由两部 分 与数 据 库 独立 的 A P I组 成 ,一部 分是 面向开发人员的 JD B C A P I,另一 部分是面 向底 层 的 JD B C D river A P I,JD B C 提 供 了一 个 通 用 的 JD B C D riverM anager 用 来 管理 各 种 数 据 库 软 件 商 提供 的 JD BC 驱动程 序 ,从 而访 问相应 的数 据库 。另外 ,对 于 没有提供相应的 JD BC 驱动程序的数据库系统 ,数据 库开 发商 一般 都开发 了特殊 的 JD BC — O DBC 驱动程 序来支持 JDBC 通过现有的 O D BC 驱 动程序 访 问数 据 库 。 D A O (D ate A ccess O bject)模 式 是一个 位 于业务 层 之上 的集 成层模 式 ,它实现 了对 数据 源 的访 问。D A O 的主要作 用是提供对 数据源 的透 明访 问 ,由于数据 访 问对象会 截取和处理所 有对 数据 资源 层 的访 问 ,使 得 业务层和数据资源层达到了松散耦合 。通过该模式, 可以创建出轻便灵活、低耦合度的应用程序,如图 1 所 示 [3】。 目DaoFactory D a o lm p le m e n t 【+getImtance0 I D a O + add () + delete* 0 + update 0 + get B yK eY O get B yC ondition 0 ⋯ 一 一 .‘. ⋯ 一 一 .’ D a taB in d +queryA llO + count() + insert() +utxlateO + delete() + getT otalP ageN um 0 P a r a m e te r s + a d d B a tc h f) + s etP a ram ( ) +setB ooleanO +setIm O +setD oubleO + se tD atd 1 图 1 实现 类 图 1.2 使 用 JD B C 连接 池和 P reparedStatem ent 以提 高 对数 据库的访 问效 率 在数据 库处理 中 ,资源 开销最 大的是 建立 数据库 连接 ,若 每一个用户在 访问时都要重新建立连 接 ,不 仅 用户要长时间的等待,而且系统还有可能由于资源消 耗 过大而停止 响应 。为 了解决这 一 问题 ,JD BC2.0 提 出了 JD BC 连 接池技 术 。 连 接池的原理是 :系统 在 内存 中维持 一个 连接缓 冲池 ,建 立好的数据库 连接 在程序 中的断 开是 逻辑 断 开 ,而实 际 中的物理 连接被存 储在 连接池 中并 被加 以 维 护。因此 ,当下一个用户访 问时 ,直接从连接缓 冲池 中取得一 个数据库连接 ,而不需重新连接数据库 ,从 而 可以大大 提高 整个 系 统 的性 能。在 J2E E 中 ,数 据 源 是通过 JND I来 查找获得 的 ,使用连接池 的语句如下 : C onnection conn = null; try } C on tex t initC~ n text = new InitialCo ntex t() ; Co ntext envC on text = (C on text) in itCo n text.1ook up (JN D I— PR E F IX ) ; D ataSo urce ds = f D ataSouree ) envC on tex t.1ook up (“jdbc/D B — N A M E ”) ; colin = ds.getC onnection ( ); corm .setA utoCo m m it(true) ; } catch (E xception e) { e.prin tS tackT race() ; } 在操作数据库 时,使用 PreparedStatem ent语句支 持预编译的数据库,可 以提高执行速度。支持预编译 的数据库能够缓存一个 SQ L 语句和它的编译结果,当 有新的 S Q L 语句发来 时 ,它将新语句 与缓存 中的语 句 进行 比较 ,然后决 定是否用缓存 中编译 的结果 。 目前 , 许多主流 数据 库 (如 O racle、DB2、SQ L Server 等 )都 支 持预编译功能 。 当使用 PreparedStatem ent语句时,它向数据库传 递的是不带数据 的语句 ,于是这 种形式 的语句 被缓冲 , 当操作使用该语句时,数据被传递给它 ,语句得到执 行。通常情况下,语句在准备的时候即被编译,这样能 最大程度 的减少语句 编译量 ,从 而减 少大量 的语 句执 行 时间-4 J。 1 .3 实现 对 JD B C 数据访 问的轻量级封装 在 D A O 层使用 JD BC 对数据 库进行 操作 时 ,常常 会编写大 量有点类 似重复 的语句 ,比方创 建 P repared — Sta[em ent、创建结果 集 、从 结果集 循环 读取 数据 、关 闭 结果集、关 闭 P reparedStatem ent等。使用真正操作数 据库的语句只在其中占很轻的分量,间接增加 了开发 工作量 。 维普资讯 http://www.cqvip.com - 96 · 计算机技术 与发展 第 l8 卷 针对这种情况 ,利用 Java 语 言的反射和代理 机制 在 D A O 层和数据库之 问专 门设计 了基 于操作 SO L 语 句 的JD BC 访 问层 。此访 问层还通过建立实体 Bean 从 数据库的查询结果 集 中批量 提取字段 数据 ,从而 大大 简化了开发工作量 。其 主要功能类包括 : (1 ) D bconnM anager:提 供 getJndiC onnection ,close C onnection 和 getJdb~ onnection 等方 法取 得 和关 闭对 数据库 的连接 ,提供 getT ransactionConnection 和 close— T ransactionC onn ection 等 方 法用 来对 事务 型数 据 库 的 操作和其它关闭资源对象 的方法。 (2 )D ataB ind :主要 向 D A O 层 提供 数据 数据 的查 询 、添加 、更新 、删 除处 理 的接 口,通过 执行 SO L 语 句 操 纵数据库 。 其核 心查询语 句 : public L ist q ueryA ll(C onnecti0n COlin ,String sq l,C lass clazz,P ar am — eters par am etem ) throw s S Q L E x ception ;//方法 的声 明 conn D bconnM anager.g etlm tan m ( ).getCo nn ection ( ); pstnlt= conn .prepare.S tatem ent(sq 1) ; D ataT yp eB ind bind = new D ataT ypeE ind () ; pstn1t.setF etchSize (50 ) ; bind .se tJd bcP aram eters(pstm t,paranm ters) ; rst= psm lt.ex ecute~ uery () ; L inkedL ist m ethod L ist= null; w hile (rst.next()) { if (m ethod L ist= nul1) { m eth od List : bind .getM ethod Infor(rst,clazz); } list.ad d(bind .setV alueO bject(rst,clazz,m ethod L ist)) ; m eth od L ist= null; } (3 )D ataT y-peB ind :字 段 的数 据处理 类 ,主要 用 来 绑定数据 字段到实体 Be an 及 设置查询参数。 (4 )P aram eters:查 询参 数设 置 ,用 来设 置 SO l 参 数类型 。 (5)DBException:异常 类 ,提供对数据库操 作 中各 种异常的处理 。 同时 ,查询分 页技术 已成为一 种对数据 库数据 操 作的常用 技术 ,分 页的 目的就是 为了查询方便 、页面 清 晰 、方便用 户浏览 ,因此高性能 的查 洵分页技术 是值 得 面对 的 问 题 。在 持 久 层 的 设 计 中 ,通 过 设 计分 页 功 能 类在查 洵时集成分页 的功能 ,使得 可 以根据 客户 的请 求,每次只从符合条件的记录中将规定数 目的记录数 查询读取 出来 。 (6)Pager类 :包 含 offset(第 儿页) ,page(总共 多少 页) 、length (每页多少条记 录) 、size(总共多少条记 录 ) 、 url(指定响应 的 ur1)等字 段 以及 生成分页 导航条 等方 法 。 在 O racle 查 询 中集 成 分页 功 能 : strsql==P ag erSQ L F orO racle.getL irnitS tring (sb .toString ()); D ataB in d d atabind = new D ataB ind () ; P ar am eters p = new P aram eters() ; P .setlnt(1 ,offset+ leng th ); P .setlnt(2 ,offse t); databind .queryA ll(corm ,strsql,E qd ftxB ean .class,p ); 在页面表示层 中,在 A ction 类 中生成 page 对象 : int size= B usinesslm p 1.Co un tB yC ondition (sqlstring ); String url= request.getC on textP ath () + m apping .getP ath ( )+ “. d o ? m e tho d = q u ery ”; P ager p = new P ager(0ffset,size ,G lobd .P A G E — S IZE ,url,“”); request.setA ttribute(“pager”,p) ; 在页面上用 Struts标签显示分页导航条 : < logic :not.E m pty n alTle = “pager”> < bean :w rite nam e = “pager”filter= “false ”/> < /logic:not.E m pty > 1。4 D A O 层 的具体实现 D A O 组件的实现一 般是 由一个 业务组 件 向 D A O 发出数据访问请求,由 D A 0 组件实施对数据源的访 问 ,并 将 操 作 结果 返 回给业 务 组 件 。在 业 务 组件 和 D A O 之间传递 的是一 个封装 了的值对 象或 者数据传 递对象 。 在 D A O 层的具体实现中,采用了工厂方法的设{t- 模式 ,当业务层要访 问数据库 时 ,可 以通过 D A O 工 厂 获取实 现该操作 的具体的 D AO 对象。该 DA O 对象 中 封装 了增 、删 、改 、查等访问数据库 的方法 ,业务层的访 问就是通过调用这些方法来实现的。 在 D A O 层 中,调用上面设计 的对 JD B C 的封装 层 功能类 ,具体查询语句 : public L ist FindB yE qCo :te ( C onn ection COnn , S tring id ) tlu-ow s SQ LException { S tri ng sq l= “select * from table w here id = ?”: D ataB ind bin d = new D ataB ind (); P aram eters IDa u二new P ar am eters(); pa.setS m ng (1 ,id ); return bind .queryAl l(corm ,sqt,M a inC ard .c[&ss,pa) ; 如上 简洁清晰的语 句不仅避免 了对数据 源烦琐的 连接、处理 、关闭操作 ,更重 要 的是这样 没计降低 了各 层之间的耦合性 ,增强 了系统的伸缩性 和容错能力 。 2 持久层在铁路车辆段信息技术管理系统 (JM IS)中的应用 从总体上看 ,JM IS 分 为设 备资产管理 、动态状态 (下转 第 100 页) 维普资讯 http://www.cqvip.com 计算 机技 术与发展 第 18 卷 一 定能够取得最优 的结果 。 可 以 看 出 ,较 之 于 以 样 本 最 优 重 建 为 目标 的 PCA ,具有 “能量聚集特性”的 D CT 变换更适合 于人脸 图像的压缩 ,且对 噪声干扰不敏感。 3 结束语 DC T 变换 是信号 处理 和数据 压缩 中常用 的 一种 方法 ,具有“能量聚集 特性 ”和 变换 的保 距特性 。文 中 正是利用 了 D ( 变换 的特性 ,提 出了基于 【)CT 变换 的线性判别分 析方法 ,即在人脸 识别 的初期 利用 I)C T 变换来对人脸 图像进行降维 ,由于 DCT 有成熟 的快速 算法 ,有效地解 决了计算量大的问题。同时 ,也 给出了 在该模型下的最优判别矢量集的直接求 解方法 。实验 证 明了算法的有效 性。 参考文献 : [1] F uk un aga K .Introd uctio n to Statistical P attern R ecognition [M ].2nd Edition.N ew York:A cadenfic Press,1990 . [2 ] M ika S ,R V atsch G ,M V uller K .A m athenm tica l program m ing approach tO the K ern el F ish algorithm [C ]//in :L een T K ,D i— etterich T G ,T resp V .(E ds.).A dvances in N eural In~OITIla— tion Proce~;ing System s.C am bridg e:M IT P res s.200 1 :59 1 — 5 9 7 . [3 j B elh um eur P N ,H espan ha J P ,K riegm an D j.E igenfaces versus fished aces :R eoc~gnition using class specific linear pro— jection[J j.IEE E Transactions on Pattern A nalysis and M a— chine Intelligence,1997 ,19 :711 — 72 0 . (上 接 第 96 页) 管理、设备维修 管理、设备安全管理 、知识 库管理 、系统 服务管理等模块。 在各个模 块中 ,应 用轻 量级开发思 想 ,按 表示 层 、 业务逻辑层 、持 久层逐层设计 ,在查询 和统 计操作 中, 需要编写 复 杂 的 SQ L 语 句 和处理 复 杂 的视 图结 构。 经过比较选择 ,应用 自己设计 的持久层 达到 系统 的性 能要求 ,维 护了系统 的稳定 。 3 结束语 义中详 细介 绍了这一持久 层设计 的过 程 ,并通 过 和其它持 久层方案的简单比较说明 了这- -持久层的特 点和应用场合,同时 DA O 模式的应用提高了访问的透 明度和降低了各层之问的耦合度,使得系统具 备良好 的仲缩性 和移植性。 当然在应 用这 一持久层 的同时也应该注意一些问 题 ,比如增加 实体 Bean 和 I)A O 模式 的采用 不 可避免 [4] Zhao W .Discrim inan t coFn[X~nent analysis for face reco gnition [(:]//Proceeding s of the International Conference on Pattern R ecognition .B arcelo IKli[S.n.],2000 [5] Y ang J,Jin Z ,Y ang J,eta1 .T he essence of kern el Fisher dis— crim in ant:K P C A plus L D A [J ].P attern R ecognition ,20 04 , 37 (1O ) :2 097 — 2 100 . [6] Swets I),W eng J.U sing di~ rim inan t eigenf eatur es for inmge retrieval[J] IEEE T rans.Patt.A na1.and M ach.Intel1., 1996 ,18 (8 ):83 l 一836 . [7] 杨 健.Fisher线性鉴别分析 的理论研究及其应用[J].自 动 化学报 ,2003 ,29 (4 ):4 81 — 4 93 . [8] Liu C ,W echsler H .Robust ccxting schem es for indexing an d retrieval from large face databases[J].IEEE Yrarks.Inm ge P rocessing ,2000 ,9 (1 ) :132 ~137 . [9] 胡永刚.高维数据降维的 IXTI、变换 [J].计算机工程与应 用 ,2006 ,42 (32 ) :2 1 — 23 . 【10 ] K ailath T .M od em Signal Proee~ ing [M ].[s.I1]:Springer V erlag ,1985 . [11] [12] [13 ] [14] E gecicg lu D im ensionality R eduction an d S im ilarity Czm ~puta — tion by Inn er — P rod uct A pproxi m ations[J j .IE E E T ran sac— tions on K now ledge and D ata E ng ineeri ng ,2004 ,16 (6 ):7 14 — 72 6 . 程云鹏.工程中的矩 阵理论[M ].天津 :天津大学出版社 , 199 8 . Zhong J,Y an g J Y ,H u Z S ,et a1.F ace R ecogni tion based On uncorrelated discrim inant transfom m tion[J].Pattern Recog— ni tion ,200 1 ,33 (7 ) :1405 — 1416 . T urk M ,Pentland A .E igenfaces for recognition[J].J.( 一 tive N eur osci,1991 ,3 (1 ):7 1 — 86 . ··— 卜 一— 卜 一-4-- “-4-- ··— — — 一+ * -4-- ”-4-- —— 一-4-- 一-4-- ··—卜 一+ —+ ··+ 一 -4-- ~·-4-- -+ 一—卜 · 地增加了系统 的复杂度 ,另外在 DA O 层 中的操作 不能 像 H ibern ate 的 H Q L 那 么 简便 ,还 是 得 写 出 完 整 的 SQ L 操作语 句。 参考文献 : [1] uer C ,K ing G .H ibern ate in A ction[M ].Am erican :M an ning P ub lications ( .2 004 . [2 J Cx}rton P ,Liu Y an,qM ve~ N .An ex:casible,lightw eight ar [3] [4] 【5 j cIfitectur e for adaptive J2E E applicati{m s[M ].[S.1.]:A CM P re.~s ,2 0 0 6 :4 7 ~5 4 . Berry C A ,Crupi J.M al ks I).J2t'~ 核心设计模式(M ].北 京 :机械 工业 出版 社 ,2002 田 珂.谢世波,方 马.J2EE 数据持久层的解决方案[J]. 计算机 工程 ,2 003 ,2 9 (22 ) :93 — 95 . 魏 勇,唐文彬 ,郭 梅.基于 I)A O 模式 的J2EE 应用程序 的数据 库访 问 c殳汁 【J ].计 算 机 应 fij.20 03 ,23 (2 ) :356 ~ 3 5 7 . 维普资讯 http://www.cqvip.com
还剩3页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

672381992

贡献于2014-08-28

下载需要 3 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf