药品影响网上查询系统的分析与设计硕士学位论文.doc_第1页
药品影响网上查询系统的分析与设计硕士学位论文.doc_第2页
药品影响网上查询系统的分析与设计硕士学位论文.doc_第3页
药品影响网上查询系统的分析与设计硕士学位论文.doc_第4页
药品影响网上查询系统的分析与设计硕士学位论文.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

浙江大学硕士学位论文 摘要硕士学位论文网上安全用药查询系统的设计与实现摘要药物影响检测查询是在购买多种药物前的一个必不可少的步骤。网上安全用药查询系统比以往客户向驻店药师和在线医生咨询上具有更多的优势:方便、回复快、药物影响信息详细。网上安全用药查询系统在节省了雇佣在线医生和驻店药师的费用的同时,也保证了每一个消费者不会购买了会引发药物影响的药物组合。矚慫润厲钐瘗睞枥庑赖。本文根据客户对网上安全用药查询系统的具体需求,设计并实现了一个基于经典Java EE的网上安全用药查询系统。本文先是分析了EJB、JPA和JSF所具有的优秀特性,决定将其整合起来来形成一个基于JPA+EJB+JSF的经典Java EE架构。之后是从系统的设计和实现两个角度进行阐述。设计部分讲述了网上安全用药查询系统的需求分析和系统设计,进而深入到整个系统的web流程图、关键功能的流程图和时序图。实现部分给出了EJB和web端的相关类图设计、相关namedQuery实现、JSF的配置过程、JSF通过Spring整合EJB、EJB和WEB在开发中碰到的问题和解决办法。聞創沟燴鐺險爱氇谴净。本文基于JPA+EJB+JSF的网上安全用药查询系统最终通过了项目组QA的测试和客户方的验收,成功实现了客户的需求。这同时也为本人这次对基于JPA+EJB+JSF的经典Java EE框架尝试画上了完美的句号。残骛楼諍锩瀨濟溆塹籟。关键词:网上药店,药品查询,药物影响查询i浙江大学硕士学位论文 AbstractAbstractChecking drug interactions is a necessary process before buying multiple drugs. Checking drug interactions system has more advantages over consulting with doctor:convenient, fast response, drug interactions information in detail. Checking drug interactions system can save the cost of employing doctors and ensure every consumer will not buy drugs that can cause drug reactions.酽锕极額閉镇桧猪訣锥。According to the customers specific needs of Checking drug interaction system, this paper designed and implemented the system based on Java EE. After analyzing the outstanding features of EJB, JPA and JSF, decide to put JPA, EJB, JSF into the classic Java EE architecture. This paper describes from design and implementation. Design section describes the influence of Checking drug interaction systems requirements analysis and system design, and then deep into the flow diagram of the entire system ,the key functions web flow diagram and senquence diagram.The implementati彈贸摄尔霁毙攬砖卤庑。-on section gives the EJB and WEBs class diagram., the implementation of related namedQuery, the configuration of JSF, integrating JSF and EJB with Spring, the problems and solutions in develop EJB and WEB. 謀荞抟箧飆鐸怼类蒋薔。The checking drug interaction system that based on JPA + EJB + JSF in this article finally passed QAs test and got the acceptance from client side. This system implemented the clients needs. The classic Java EE framework based on JPA + EJB + JSF is also a milestone for me. 厦礴恳蹒骈時盡继價骚。Key Words:Online Pharmacy, Drug Search, Check Drug Interaction茕桢广鳓鯡选块网羈泪。 ii浙江大学硕士学位论文 目录目录摘要i鹅娅尽損鹌惨歷茏鴛賴。Abstractii籟丛妈羥为贍偾蛏练淨。图目录III預頌圣鉉儐歲龈讶骅籴。表目录IV渗釤呛俨匀谔鱉调硯錦。第1章 绪论1铙誅卧泻噦圣骋贶頂廡。1.1 课题背景1擁締凤袜备訊顎轮烂蔷。1.2 国内外发展现状1贓熱俣阃歲匱阊邺镓騷。1.3 本文研究内容和目标2坛摶乡囂忏蒌鍥铃氈淚。1.4 论文结构2蜡變黲癟報伥铉锚鈰赘。第2章 相关技术综述4買鲷鴯譖昙膚遙闫撷凄。2.1 国内相关系统4綾镝鯛駕櫬鹕踪韦辚糴。2.2 本系统差异4驅踬髏彦浃绥譎饴憂锦。2.3 经典Java EE5猫虿驢绘燈鮒诛髅貺庑。2.3.1 经典Java EE组件5锹籁饗迳琐筆襖鸥娅薔。2.3.2 EJB技术6構氽頑黉碩饨荠龈话骛。2.3.3 事务和JTA6輒峄陽檉簖疖網儂號泶。2.3.4 EJB的事务管理7尧侧閆繭絳闕绚勵蜆贅。2.3.5 JPA规范7识饒鎂錕缢灩筧嚌俨淒。2.4 JSF应用框架介绍8凍鈹鋨劳臘锴痫婦胫籴。2.5 Mockito介绍9恥諤銪灭萦欢煬鞏鹜錦。2.6 本章小结9鯊腎鑰诎褳鉀沩懼統庫。第3章 系统的需求分析及设计10硕癘鄴颃诌攆檸攜驤蔹。3.1 需求分析10阌擻輳嬪諫迁择楨秘騖。3.2 药物信息结构设计11氬嚕躑竄贸恳彈瀘颔澩。3.3 整体架构和流程序列图12釷鹆資贏車贖孙滅獅赘。3.3.1 整体架构12怂阐譜鯪迳導嘯畫長凉。3.3.2 相关流程图和序列图13谚辞調担鈧谄动禪泻類。3.4 本章小结16嘰觐詿缧铴嗫偽純铪锩。第4章 网上药物影响查询网站的实现17熒绐譏钲鏌觶鷹緇機库。4.1 web端实现17鶼渍螻偉阅劍鲰腎邏蘞。4.1.1 JSF开发环境配置17纣忧蔣氳頑莶驅藥悯骛。4.1.2 JSF Managed Bean实现18颖刍莖蛺饽亿顿裊赔泷。4.1.3 web端相关实现类图20濫驂膽閉驟羥闈詔寢賻。4.1.4 系统展示21銚銻縵哜鳗鸿锓謎諏涼。4.2 EJB端接口23挤貼綬电麥结鈺贖哓类。4.2.1 EJB端包划分23赔荊紳谘侖驟辽輩袜錈。4.2.2 业务逻辑层24塤礙籟馐决穩賽釙冊庫。4.3 业务逻辑实现26裊樣祕廬廂颤谚鍘羋蔺。4.3.1 药物名查找药物26仓嫗盤紲嘱珑詁鍬齊驁。4.3.2 病症名查找药物27绽萬璉轆娛閬蛏鬮绾瀧。4.3.3 药物影响查询28骁顾燁鶚巯瀆蕪領鲡赙。4.4 本章小结29瑣钋濺暧惲锟缟馭篩凉。第5章 难点和解决方法30鎦诗涇艳损楼紲鯗餳類。5.1 控制创建Entity时生成的sql含有的列30栉缏歐锄棗鈕种鵑瑶锬。5.2 编写namedQuery31辔烨棟剛殓攬瑤丽阄应。5.2.1 在返回搜索到的药物数量时始终会抛出异常31峴扬斕滾澗辐滠兴渙藺。5.2.2 namedQuery在真实环境下有错31詩叁撻訥烬忧毀厉鋨骜。5.3 简化EJB单元测试31则鯤愜韋瘓賈晖园栋泷。5.4 简化web在本地部署的依赖34胀鏝彈奥秘孫戶孪钇賻。5.5 网站语言的切换35鳃躋峽祷紉诵帮废掃減。5.6 本章小结37稟虛嬪赈维哜妝扩踴粜。第6章 总结与展望38陽簍埡鲑罷規呜旧岿錟。6.1 总结38沩氣嘮戇苌鑿鑿槠谔應。6.2 展望38钡嵐縣緱虜荣产涛團蔺。参考文献39懨俠劑鈍触乐鹇烬觶騮。作者简历41謾饱兗争詣繚鮐癞别瀘。致谢42呙铉們欤谦鸪饺竞荡赚。IV浙江大学硕士学位论文 图目录图目录图 3.1整体web流程图11莹谐龌蕲賞组靄绉嚴减。图 3.2 药物信息结构设计11麸肃鹏镟轿騍镣缚縟糶。图 3.3 系统整体架构图13納畴鳗吶鄖禎銣腻鰲锬。图 3.4 药物查询流程图13風撵鲔貓铁频钙蓟纠庙。图 3.5 根据病症名查询药物序列图14灭嗳骇諗鋅猎輛觏馊藹。图 3.6 根据药物名查询药物序列图14铹鸝饷飾镡閌赀诨癱骝。图 3.7 药物影响查询流程图15攙閿频嵘陣澇諗谴隴泸。图 3.8 药物影响查询序列图15趕輾雏纨颗锊讨跃满賺。图 4.1 pom配置图17夹覡闾辁駁档驀迁锬減。图 4.2 FacesServlet在web.xml内配置17视絀镘鸸鲚鐘脑钧欖粝。图 4.3 Spring在web.xml内配置18偽澀锟攢鴛擋緬铹鈞錠。图 4.4 web端类图21緦徑铫膾龋轿级镗挢廟。图 4.5 药物查询方式选择页面21騅憑钶銘侥张礫阵轸蔼。图 4.6 病症查询药物搜索页面22疠骐錾农剎貯狱颢幗騮。图 4.7 药物详细信息页面22镞锊过润启婭澗骆讕瀘。图 4.8 已选药物弹出层23榿贰轲誊壟该槛鲻垲赛。图 4.9 药物影响信息页面23邁茑赚陉宾呗擷鹪讼凑。图 4.10 EJB端Logic Service类图24嵝硖贪塒廩袞悯倉華糲。图 4.11 EJB端底层药物查找service类图25该栎谖碼戆沖巋鳧薩锭。图 4.12 EJB端药物影响ServiceBean类图25劇妆诨貰攖苹埘呂仑庙。图 4.13 EJB端药物影响DTO类图26臠龍讹驄桠业變墊罗蘄。图 4.14药物相关数据库图26鰻順褛悦漚縫冁屜鸭骞。图 4.15 通过病症查找药物涉及表28穑釓虚绺滟鳗絲懷紓泺。图 5.1 DynamicInsert代码图30隶誆荧鉴獫纲鴣攣駘賽。图 5.2 DynamicInsertEntityListener代码图30浹繢腻叢着駕骠構砀湊。图 5.3 Entity使用DynamicInsert代码图31鈀燭罚櫝箋礱颼畢韫粝。表目录表 3.1通用名药物信息结构12惬執缉蘿绅颀阳灣熗鍵。表 3.2品牌名药物信息结构12贞廈给鏌綞牵鎮獵鎦龐。浙江大学硕士学位论文第1章 绪论第1章 绪论1.1 课题背景随着京东商城和天猫的介入推动,医药B2C的交易规模及消费者需求将逐年增加。同时随着消费者对网购信任度的增加,市场参与者增多从而扩大医药B2C市场投入,医药B2C的市场比重和交易规模会大为提高。预计2013年B2C行业规模还将保持300%的增速,全年可以实现50个亿的销售。中国网上药店理事会更是预测到2015年中国药品B2C行业规模可以达到150亿元。嚌鲭级厨胀鑲铟礦毁蕲。在网上购药这个市场越来越大的同时,消费者在网上因为无法找到需要的药物和不知道同时吃多种药物会有什么反应而需要咨询网上在线药师的情景也越来越多。随着在线咨询越来越频繁,网上药店需要大量的在线药师回答那些重复的问题。所以,目前急需一种系统。该系统可以帮助消费者查找到什么药适用于自己这种病,想要查找的药的有哪些剂型、剂量,同时吃多种药物的时候是否会有药物影响、药物食物反应和用药重复。薊镔竖牍熒浹醬籬铃騫。基于以上需求现状,现在要开发一个具有网上药物查询和药物影响查询功能的系统,用于帮助消费者通过药物搜索查找到适合于自己病症的药物,并在购买多种药物的时候提供药物影响查询服务。齡践砚语蜗铸转絹攤濼。1.2 国内外发展现状2012年01月,国内网上药店数量仅为57家,与美国的千家网上药店数量相比,数量上实在太少。而截至2013年10月15日,从国家食品药品监督管理总局(SFDA)查询到的网上药店数目已达181家。绅薮疮颧訝标販繯轅赛。众多传统零售药店和主流电商目前都纷纷进军抢占网上药店的高地。当价格不足以在消费者心中留下深刻印象时,物流、购物及产品分类成了天平上的一颗重要砝码。以药房网为例,为体现保障客户用药安全,通过整合国家食品药品监督管理局(简称SFDA)和国家食品药品监督管理局药品审评中心(简称CDE)的官方数据,将所有配伍禁忌药品在“安全用药警示系统”中进行标识。在消费者没有勾选多人服用的情况下将有配伍禁忌的药品加入同一购物车,安全用药警示系统会提醒“不能同时服用”1。饪箩狞屬诺釙诬苧径凛。和国内相比,国外网上购药要更加严格。通过对药物影响的严重程度分级,用户可以更安全地选择需要的药物。除此之外,国外已有许多药物影响网站(例如)供用户查询所购买的药物是否会发生不同严重程度的药物不良反应,而不仅仅是完全禁忌的配伍禁忌。烴毙潜籬賢擔視蠶贲粵。1.3 本文研究内容和目标本文先是分析了EJB、JPA和JSF所具有的优秀特性,决定将其整合起来来形成一个基于JPA+EJB+JSF的经典Java EE架构。然后通过药物影响搜索系统的需求分析和系统设计,引出了整个系统的web流程图以及药物查询和药物影响查询的流程图和时序图。在讲述网上安全用药查询系统的具体实现时给出了EJB和web端的相关类图设计,以及JSF的配置过程和JSF通过Spring整合EJB的详细阐述。鋝岂涛軌跃轮莳講嫗键。最后是介绍了EJB和WEB的开发中碰到的问题和解决方法:插入数据的时候某些字段需要采用数据库默认值,通过自定义注释来控制JPA在create sql的时候不将该字段纳入。撷伪氢鱧轍幂聹諛詼庞。EJB端进行JUnitTest时,由于数据库测试数据不稳定和返回数据时间过长原因,换用内存数据库。为了控制插入数据的主键和真实数据库一致从而减少迁移成本,采用既可以由数据库生成,又可以直接指定的主键生成方式。踪飯梦掺钓貞绫賁发蘄。web端进行本地部署测试时,开发在本地部署时需要依赖大量的EJB,部署时间和查询数据库时间过长。通过mockito来减少web对某些返回值比较确定的service的依赖,从而简化开发本地的web部署。婭鑠机职銦夾簣軒蚀骞。通过以上一系列的过程,成功实现了基于JPA+EJB+JSF的网上安全用药查询系统,达成了客户的需求。1.4 论文结构论文共包含六章。第一部分:绪论,详细阐述了课题背景和必要性,国内外发展现状和论文的架构。第二部分:国内相关系统的功能和本系统实现采用的相关技术综述,主要介绍了目前网上安全用药系统的功能需求和非功能需求,继而提到所用到技术。譽諶掺铒锭试监鄺儕泻。第三部分:系统的需求分析和功能设计。针对网上安全用药查询系统的需求,给出了详细的流程图和时序图。第四部分:网上安全用药查询系统的实现方法。在展示网上安全用药查询系统使用流程后,系统地介绍了网上安全用药查询系统各个页面的详细功能及实现。俦聹执償閏号燴鈿膽賾。第五部分:针对网上安全用药查询系统在实现过程中遇到的问题给出相应的解决方法。第六部分:总结与展望,对网上安全用药查询系统进行了总结并对功能上的拓展方向进行了展望。3浙江大学硕士学位论文第2章 相关技术综述第2章 相关技术综述2.1 国内相关系统目前,中国国内医院已有很多采用药物查询系统帮助医生开药,少部分医院已经开始采用ADR监测系统来预防在处方阶段发生不良药物影响。但是这些系统只用于医院,并没有对外开放。这使得老百姓难以安心地自主用药。缜電怅淺靓蠐浅錒鵬凜。药物查询方面,国内医院系统从普通的快速查询和高级查询两方面入手。在使用快速查询功能时,用户可以按照药物分类、药物通用名、英文名、品牌名等进行快速查找。在使用高级查询功能时,用户则可以添加更加专业的病症名、疾病症状、剂型、药动学等方面信息来准确查找符合要求的药物。通过点击搜索出来的药物连接可以得到药物的药物名、化学结构、适用病症、用法用量、注意事项、相关文献等详细信息。骥擯帜褸饜兗椏長绛粤。药物不良反应查询功能多见于医院ADR(药物不良反应)监测系统,用于提示医生所开药物间可能发生药物不良影响。药物不良反应除了和药物配方有关外,还和药物的施药途径、剂型、剂量有关。施药途径决定了人体吸收药物的方式,如肌肉吸收、肠胃吸收、表皮吸收。剂型则会影响药剂的吸收速度。剂量对某些药物是否会发生反应产生一定影响。医生通过改变施药途径、剂型、剂量来保证病人安全用药。癱噴导閽骋艳捣靨骢鍵。医院所使用的药物不良反应监测系统通过记录病人的所用药品明细记录来判断是否突然出现了和病人原有病症无关的用药异常,或者药物组合中含有国家药物不良反应中心指出的药物不良反应因果关系。这类系统操作复杂,并不适用于客户只需要简单方便地检测是否发生药物影响的需求。除此之外,由于这些系统只在医院内部使用,在B/S结构和web端大批量用户访问上普遍存在着缺陷。鑣鸽夺圆鯢齙慫餞離龐。2.2 本系统差异针对网上用户不具备医学相关方面知识的特点,本系统在药物搜索、病症搜索、药物和药物影响检测方面做出了一定的简化修改。榄阈团皱鹏緦寿驏頦蕴。在进行搜索药物时,系统通过用户搜索药物字段是否和dispensable表内的descsearch和descaltsearch字段相似来判断这个dispensable药物是否是用户想要搜索的药物。descsearch和descaltsearch字段一般存放这药物的商品名和药物的学名,去除了复杂的通过剂型、药动学等药物方面的专业搜索。在检测药物和药物间反应时,出于用户方便和减轻数据库压力方面考虑,只是判断带有施药途径的药物(主键rtgenid)和带有施药途径的药物之间是否会发生药物影响,去除了复杂的剂型、剂量等考虑。在通过病症名来搜索正确病症,从而得到可以治疗该病症的药物相关信息时,本系统出于用户很多时候不能够正确输入病症,所以建立了一个medcondsearchfml表,专门存放了用户容易搜索的病症名。之后,系统再根据medcondsearchfml表查找真正的病症名表(medcond表)从而找到对应的正确临床病症名。在药物和药物不良反应检查上,现有的网上购药网站只是整合了国家食品药品监督管理局(简称SFDA)和国家食品药品监督管理局药品审评中心(简称CDE)的官方数据,将所有配伍禁忌药品在“安全用药警示系统”中进行标识,缺少对药物严重程度的标识。美国食品药品管理局将用药安全程度分为五级。在使用西药时,医生都会参照用药的安全程度来考虑产生的后果是否可以接受,然后决定是否这样用药。在提供药物和药物不良反应检测的同时,本系统还提供药物和食物、用药重复的检测,使用户能够更安全得使用药物。逊输吴贝义鲽國鳩犹騸。2.3 经典Java EE本项目旨在通过分析设计一种更科学且更简便有效的搜索方法,并在最后监测药物影响的时候为网上用户提供更加详细的已选药物间不良反应、饮食禁忌、用药重复检测。大量的网上用户访问促使我们决定使用经典Java EE架构进行构建。幘觇匮骇儺红卤齡镰瀉。2.3.1 经典Java EE组件经典Java EE应用大致包括以下组件:(1)控制器组件:Java EE的MVC框架提供了一个前端核心控制器,拦截用户请求,并将请求转发给用户实现的控制器组件。用户实现的控制器组件处理调用业务逻辑方法,处理用户请求。誦终决懷区馱倆侧澩赜。(2)业务逻辑组件:业务逻辑组件负责实现系统的业务逻辑,一般由Session Bean实现。一次用户操作一般对应一个业务逻辑方法。一个业务逻辑方法是一个整体的,因此需要对业务逻辑方法增加事务性。业务逻辑方法应当仅负责实现业务逻辑,不进行数据库访问。医涤侣綃噲睞齒办銩凛。(3)EAO组件:实体访问对象(Entity Access Object),通常采用Session Bean来实现。相当于轻量级Java EE的DAO对象,提供对Entity对象的添、读、修、删操作。舻当为遙头韪鳍哕晕糞。(4)Entity对象:系统的对象模型抽象。领域对象的状态一般都必须保存在数据库里面。因此,每个Entity都映射到一个或多个数据库表。鸪凑鸛齏嶇烛罵奖选锯。(5)表现层组件:收集用户输入数据或向客户显示系统状态。表现层组件可以是某种表现层技术,普通的应用程序,或者是小型智能设备。筧驪鴨栌怀鏇颐嵘悅废。2.3.2 EJB技术Enterprise Java Bean简称EJB,有时也称为企业Bean或企业级Bean。作为一种可重用的分布式对象计算技术,EJB可用于部署开发分布式的、多层结构的、面向对象的Java应用系统的跨平台组件体系结构2。EJB组件在使设计开发系统级应用更简单的同时还使得系统具有良好的移植性、扩充性和维护性3。EJB运行在EJB容器中时,EJB容器会提供包括持久化、数据缓存、声明性安全、负载均衡、错误修复及事务性处理的系统级服务4。韋鋯鯖荣擬滄閡悬贖蘊。Enterprise Bean又可分为三种:会话Bean、实体Bean、消息驱动Bean。Session Bean(会话Bean):是应用的业务逻辑层的Faade。Session Bean比Spring容器中的POJO Bean的功能更加强大,它支持如下功能:涛貶騸锬晋铩锩揿宪骟。(1)并发和线程安全(2)开发者无需理会多客户端并发的线程安全问题,只要像开发普通Java类一样开发EJB3就可,EJB容器会为之提供多线程并发功能和保证线程安全。钿蘇饌華檻杩鐵样说泻。(3)事务和安全管理EJB容器可以以声明式的方式来管理其内的Session Bean的事务和安全。EJB3的Session Bean分为有状态会话Bean(Stateful Session Bean)和无状态会话Bean(Stateless Session Bean)两类。Stateful Session Bean需要EJB容器更高的系统开销来维护客户端状态,因此性能较Stateless Session Bean低。戧礱風熗浇鄖适泞嚀贗。2.3.3 事务和JTA事务控制作为J2EE应用中的一环,保证一系列数据库操作不发生错误,从而保证应用业务逻辑成功执行和底层数据库完整。購櫛頁詩燦戶踐澜襯鳳。事务有四个特性:原子性、一致性、隔离性和持续性。JTA事务由Java EE事务管理器负责控制,可以保证多个数据库更新的一致性,通过JTA即可实现全局事务控制。嗫奐闃頜瑷踯谫瓒兽粪。开发者可以通过使用JTA,用一种与事务管理器无关的方式来start、commit或roll back事务。Java EE应用服务器通过Java Transaction Service(简称JTS,Java事务服务)来实现Java EE事务管理器。应用程序不用直接使用JTS方法,只需面向JTA方法就可由JTA来调用底层JTS进行事务处理。虚龉鐮宠確嵝誄祷舻鋸。2.3.4 EJB的事务管理EJB有两种事务管理方式,这两种事务管理方式通常都建立在JTA基础之上。一种是通过容器管理事务(CMT)以声明式方式来管理事务;另一种则在EJB内部使用事务管理代码由开发者自己管理事务(Bean管理事务,简称BMT)。與顶鍔笋类謾蝾纪黾廢。容器管理事务(CMT):EJB默认使用容器管理事务。当使用CMT事务管理策略时,容器将接管EJB的事务管理,为我们完成事务的start、commit和roll back。容器总是在业务方法的开始、结束处标记事务边界,也就是说,容器将在调用方法之前开始JTA事务,然后根据方法的调用情况来决定提交或回滚事务。結释鏈跄絞塒繭绽綹蕴。当使用CMT事务管理策略时,开发者无需为事务控制编写任何代码,只需通过Annotation或XML配置文件告诉容器如何处理事务即可。餑诎鉈鲻缥评缯肃鮮驃。当使用容器管理事务时,业务方法不应该调用任何可能与容器所设置事务注解冲突的方法。默认事务管理类型为CMT。因为BMT在实现事务管理时需要大量的硬编码,导致事务逻辑难以切换,同时Session Bean中业务和事务逻辑也混杂在一起。除此之外,当客户端调用BMT方法时,会暂停当前已有事务,制约了组件的重用。爷缆鉅摯騰厕綁荩笺潑。2.3.5 JPA规范原先,Java EE和Java SE应用的对象持久化比较麻烦,同时ORM技术非常多,如果换了一种实现就必须去重新学习,然后重新编写代码。因而,出于简化和标准化考虑,Sun官方提供了JPA用于提供持久化标准规范5。通过使用JPA,可以使得EAO层更加标准规范,同时也摆脱了原先对各种ORM实现的依赖,从而使得系统更加易于维护和移植。锞炽邐繒萨蝦窦补飙赝。JPA是JSR-220实现的一部分,开发人员为EJB3.0软件专家组6。但它是一种用于Java持久化的轻量级且基于POJO的框架7。除了可以在基于EJB的Java EE应用中使用外,JPA同时也完全可以在普通Java SE中使用。因为是基于POJO的框架,所以JPA非常优雅;更为可贵的是它非常简单,所以易于学习和掌握8。JPA大致包括以下三种组件:曠戗輔鑽襉倆瘋诌琿凤。1.ORM映射元数据ORM映射元数据有些地方又称为实体,只是通过XML映射文件或Annotation建立了和底层数据表之间对应关系的POJO。轉厍蹺佥诎脚濒谘閥糞。2. Entity Manager实体因为是普通的POJO,没有持久化能力。因而JPA提供了Entity Manager来对Entity进行操作。除此之外,实体管理器还可以通过与持久化上下文(persistence context)进行交互来转换实体不同状态9。嬷鯀賊沣謁麩溝赉涞锯。3.JPQL查询通过面向对象的查询语言查询数据来减小程序与SQL的耦合度10。JPA只是制定了一个API,供应商可以做出自己的实现,而且开发人员也可以对某些API进行自定义11。按照Sun的预想,开发者可以随意地选择切换JPA实现。讯鎬謾蝈贺綜枢辄锁廪。2.4 JSF应用框架介绍Java Server Faces简称JSF,是一种SUN公司在Java EE规范中设计的一种搭建Java Web应用程序的MVC框架。兒躉讀闶軒鲧擬钇標藪。JSF主要有如下五大优势:1.可以通过拖放组件方式快速开发页面。2.将页面上的UI组件的值绑定到服务器端的数据模型。3.可以使用服务器端业务代码来响应客户端事件。4. UI组件具有高度的重用和扩展特性,适合构造用户界面。5.恢复UI状态和跨请求保存。借助于这几大优势,成功封装了请求-响应模型,允许开发者采用面向对象的事件通信模型进行RAD方式开发Web应用,避免了以往基于请求、响应和标记来考虑问题的弊端12。通过JSF,用户可以在页面中使用web组件、捕获用户行为产生的事件、进行验证和页面导航等,实现用户界面到业务逻辑层的直接映射,省去了大部分需要开发者处理的HTTP细节13。由于JSF是一个开放架构,开发人员可以通过自己创建或者继承已有组件的方式来开发自己的组件,因而具有很强的灵活性和可扩展性14。繅藺詞嗇适篮异铜鑑骠。2.5 Mockito介绍随着快速应用开发模式(RAD)和程序规模越来越大,项目越来越需要借助自动软件测试来解决测试繁重、测试效率低等问题。由于java单元测试框架Junit难以构造对象、方法,于是又引入Mock Object来解决这个问题。但JMock和easyMock这两种框架的实现都局限于用Mock技术模拟被测试方法依赖的外部对象,mocking是由期望-运行-验证库决定15。Mockito提供了一种更简单,更直观的方法:mock在执行后的交互。使用mockito可以专心验证想要验证的东西,而不是像在使用期望-运行-验证库时被迫经常处理无关交互。没有期望-运行-验证同时也意味着Mockito在mock时通常不需要昂贵的启动前期准备。他们的目标是透明的,从而使开发人员将精力集中于测试选定的行为而不是注意力被别的吸走。Mockito拥有简洁的API,几乎不需要花时间去启动模拟行为。只有一种方法创建模拟。Mockito的语法和jMock与EasyMock类似,因此可以放心重构。不同的地方在于通过在执行后校验什么已经被调用,消除了对期望行为的需求。消除了因在执行前需要记录期望行为导致的丑陋初始化代码。鮒簡觸癘鈄餒嬋锵户泼。2.6 本章小结本章主要阐述了含有药物影响搜索功能的系统的功能特点,并分析了本项目将会使用到的主要技术,以及这些技术所具有的特性和优点。眯毆蠐謝银癩唠阁跷贗。10浙江大学硕士学位论文第3章 系统的需求分析及设计第3章 系统的需求分析及设计3.1 需求分析客户要求设计一个网上安全用药查询系统,可以自动帮助用户查看详细的药物影响。首先是分析设计一种更科学且更简便有效的搜索方法,通过药品的学名或者品牌名进行搜索。点击进入查看详细信息的时候可以查看这种药物有哪几种药物形式和药物剂量组合。闵屢螢馳鑷隽劍颂崗鳳。最后检测药物影响的时候提供比用药配伍禁忌更加详细的已选药物间不良反应、饮食禁忌、用药重复等检测。举个例子来说,消费者在网上买了多种药物,但是他不知道详细的药物影响或者只知道自己购买的这种组合不属于国家药物配伍禁忌里面的组合,至于所购买的药物间是否有药物重复,药物食物反应和轻微的药物间反应则需要消费者自己研究复杂的药物说明书。檁傷葦开阈灯伞馑諧粮。传统情况下消费者可能会由于麻烦而不去看药物说明书,或者由于药物说明书的复杂性而没有看出来自己同时购买的药物不宜同时使用。以2005年举办的“百姓安全用药调查”结果来看,我国不合理用药的人占总用药人数的12%-32%,情况非常严重16。鄭饩腸绊頎鎦鹧鲕嘤錳。有了药物查询软件后,消费者可以轻松地根据药物名称和药物吸收途径、剂型、剂量准确地搜索到自己准备购买的药物。系统通过药物的吸收途径给出哪几种药物间会发生什么级别的药物影响,是否有用药重复,以及是否有药物和食物反应。弃铀縫迁馀氣鰷鸾觐廩。具体操作流程如图3.1所示,图 3.1整体web流程图调谇續鹨髏铖馒喪劉薮。3.2 药物信息结构设计通过仔细分析用药现状,考虑到药品具有的剂量大小、药品形式、吸收方式。同时市场上流通的药品使用的多是其商业名而非学术名,将药品的信息结构设计图如图3.2所示,厲耸紐楊鳝晋頇兗蓽驃。图 3.2 药物信息结构设计苧瑷籮藶黃邏闩巹东澤。以下是通用名药的信息结构定义:表 3.1通用名药物信息结构 鴿摄禱鋅儀憚銼嚕缗赞。通用名药概念详细信息例子Ingredient成分名华法林钠GenericDrug药名华法林钠RoutedGeneric药名 + 施药途径华法林钠口服RoutedDoseFormGeneric药名+施药途径+剂型华法林钠口服片DispensableGeneric药名+施药途径+剂型+剂量华法林钠口服片10毫克品牌名药和通用名药对应,但是使用的是品牌名。以下是品牌名药的信息结构:表 3.2品牌名药物信息结构 箪啬癲剀净赶钩嬙鳄凫。品牌名药概念详细信息例子DrugName品牌名香豆素RoutedDrug品牌名 + 施药途径香豆素口服RoutedDoseFormDrug品牌名+施药途径+剂型香豆素口服片DispensableDrug品牌名+施药途径+剂型+剂量香豆素口服片10毫克3.3 整体架构和流程序列图3.3.1 整体架构系统整体基本上是用经典Java EE架构。Java EE架构和轻量级Java EE应用的分层架构基本一致,只是业务逻辑层和DAO层换成了由Session Bean,DAO层换成了EAO层,还有Domain Object层换成了由JPA的Entity充当的Entity层。web端JSF和Spring结合则通过使用Spring的ContextLoaderListener和DelegatingVariableResolver来实现通过配置文件将对象依赖注入到JSF管理的bean。顽鷙瑪滨廈岘轆庫糞糧。EJB、JSF、JPA整合架构图如3.3所示,图 3.3 系统整体架构图漬閫熾诀团諳赓戰餛锰。3.3.2 相关流程图和序列图用户进入药物影响搜索系统后,可以根据病症名查找到相似病症名,然后通过搜索出来的准确临床病症名来查找治疗药物。用户也可以直接通过输入药物名来进行搜索。后台会返回所有以用户输入的药名开头并且没有超过废弃时间的药物名。药物查询流程图如图3.4所示,鐸輜澠顶嫻塊謂斕痹廪。图 3.4 药物查询流程图抢觀淚婭师讴论櫚阵蘚。通过病症名查询药物时需要先在左侧显示搜索出来的病症列表供用户选择。由于病症Condition是另外一个EJB项目中的类。为了避免无谓地引入EJB,通过XStream转化Condition为xml进行传输。其时序图如图3.5所示,贼組櫻種愨单蝕渾潷骡。图 3.5 根据病症名查询药物序列图圓漣檸賡捣蕷舻燁錘泽。除了通过病症名查询药物,用户也可以通过药物名查询药物。药物名查询的序列图如图3.6所示,图 3.6 根据药物名查询药物序列图蟄彎擼鯁棖佇緡癟椠贊。用户在点击查看药物详细信息后,可以将选择的药物加入到药橱。通过页面目前选择的语言id和点击的药物id得到药物的用法、副作用、不可和哪些药物同时使用、预防措施、过量和漏服处理、储存方式、备注等药物详细信息。药物影响查询流程图如图3.7所示,义淨擁扪殴胁纸窺钣鳧。图 3.7 药物影响查询流程图绥骅懸缙澀鷂禍紳撻粮。用户在药物影响查询弹出层对已选药物做出增删操作后,通过JSF的ManagedBean(DrugInteractionMB)来调用DrugCabinetService查找药物和药物影响、用药重复及药物食物反应信息。序列图如图3.8所示,馒锁開钥焖緒珏編軻錙。图 3.8 药物影响查询序列图獄质嶇僅痺鲒潰脫帧開。3.4 本章小结首先,本章对药物影响查询网站的需求进行了细致的分析,给出了客户想要的web流程图。然后整体架构将JPA、EJB3、JSF较好地衔接了起来,发挥了各自的优势。最后给出了功能模块的流程图和序列图,并在图中给出了其功能具体实现所调用的主要接口。鍥苋娛殫秽笾殇蕢谬藓。17浙江大学硕士学位论文第4章 网上药物影响查询网站的实现第4章 网上药物影响查询网站的实现4.1 web端实现4.1.1 JSF开发环境配置首先,引入需要的jar包。由于JSF是建立在Servlet基础上的,所以在引入jsf的同时还需要引入servlet的jar包。对一个项目来说,它是依赖的jar包非常重要,既不能少,也不能够版本不正确。早期很多公司都是不得不将其提交到SVN中17。Maven是基于项目对象模型(POM,Project Object Model),通过描述信息管理项目构建,报告和文档的软件项目管理工具18。pom.xml配置如图4.1所示,杂砖墳雖紜飯曇覡墾騾。图 4.1 pom配置图轼栀嗶鑊绷瘍懔諍訝澤。FacesServlet在web.xml内的配置如图4.2所示,图 4.2 FacesServlet在web.xml内配置尋头厭呛羈阴帥讕匦赞。每个Java EE应用服务器都包含EJB容器和Web容器,使得EJB和Web都可以部在同一个应用服务器上19。JSF的托管Bean处于应用服务器的管理之下,因而服务器可以很容易地将业务逻辑组件注入到JSF的托管Bean中20。在JSF端需要使用EJB端的service。由于J2EE 官方并没有给出一个标准API,我们通过添加Spring启动监视器,然后在Spring配置文件内采用jee:remote-slsb方式远程调用EJB。在此之前需要添加下Spring的支持。Spring在web.xml文件中配置如图4.3所示,訪齙剛玺苏滥夹趕萤凭。图 4.3 Spring在web.xml内配置写韞僂谌虛鍤囈辮褻糝。spring配置文件如下,最后,在JSF托管Bean内只需添加drugSearchLogicService对象、ManagedProperty(#drugSearchLogicService)注释和其get、set方法就可以得到想要的service了。鬮煒鳍輥賠還鲂隊驼骡。4.1.2 JSF Managed Bean实现Managed Bean在这个项目里面主要分为了六个包:(1)com.memberaccess.validation,主要负责验证页面输入内容是否正确,如输入的药物名、病症名是否符合长度规范等。用户自己编写的validator类需要实现JSF的Validator接口。同时FacesValidator注释需要保证里面的值与web页面调用的值一样,不然就会无法查找到。除此之外还要保证在页面调用的唯一标示,否则也会报错。其书写形式有FacesValidator()和FacesValidator(value =)两种。如下是一个简单的validator,毕懍鲅鵑较惻飾顳矯泾。FacesValidator(drugNameValidator)public class DrugNameValidator implements Validator 钆歷驾无醬赔隽驍韉贈。private static final Logger log = LoggerFactory.getLogger(DrugNameValidator.class);徠鲣饮脸铄尝鏍鯢炀憑。priv

温馨提示

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

最新文档

评论

0/150

提交评论