版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、碩士學(xué)位論文網(wǎng)上安全用藥查詢系統(tǒng)的設(shè)計與實現(xiàn)摘要藥物影響檢測查詢是在購買多種藥物前的一個必不可少的步驟。網(wǎng)上安全用藥查詢系統(tǒng)比以往客戶向駐店藥師和在線醫(yī)生咨詢上具有更多的優(yōu)勢:方便、回復(fù)快、藥物影響信息詳細。網(wǎng)上安全用藥查詢系統(tǒng)在節(jié)省了雇傭在線醫(yī)生和駐店藥師的費用的同時,也保證了每一個消費者不會購買了會引發(fā)藥物影響的藥物組合。本文根據(jù)客戶對網(wǎng)上安全用藥查詢系統(tǒng)的具體需求,設(shè)計并實現(xiàn)了一個基于經(jīng)典java ee的網(wǎng)上安全用藥查詢系統(tǒng)。本文先是分析了ejb、jpa和jsf所具有的優(yōu)秀特性,決定將其整合起來來形成一個基于jpa+ejb+jsf的經(jīng)典java ee架構(gòu)。之后是從系統(tǒng)的設(shè)計和實現(xiàn)兩個角度
2、進行闡述。設(shè)計部分講述了網(wǎng)上安全用藥查詢系統(tǒng)的需求分析和系統(tǒng)設(shè)計,進而深入到整個系統(tǒng)的web流程圖、關(guān)鍵功能的流程圖和時序圖。實現(xiàn)部分給出了ejb和web端的相關(guān)類圖設(shè)計、相關(guān)namedquery實現(xiàn)、jsf的配置過程、jsf通過spring整合ejb、ejb和web在開發(fā)中碰到的問題和解決辦法。本文基于jpa+ejb+jsf的網(wǎng)上安全用藥查詢系統(tǒng)最終通過了項目組qa的測試和客戶方的驗收,成功實現(xiàn)了客戶的需求。這同時也為本人這次對基于jpa+ejb+jsf的經(jīng)典java ee框架嘗試畫上了完美的句號。關(guān)鍵詞:網(wǎng)上藥店,藥品查詢,藥物影響查詢abstractchecking drug inter
3、actions 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
4、 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 th
5、e 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 s
6、enquence 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
7、 + 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 目錄摘要iabstractii圖目錄iii表目
8、錄iv第1章 緒論11.1 課題背景11.2 國內(nèi)外發(fā)展現(xiàn)狀11.3 本文研究內(nèi)容和目標(biāo)21.4 論文結(jié)構(gòu)2第2章 相關(guān)技術(shù)綜述42.1 國內(nèi)相關(guān)系統(tǒng)42.2 本系統(tǒng)差異42.3 經(jīng)典java ee52.3.1 經(jīng)典java ee組件52.3.2 ejb技術(shù)62.3.3 事務(wù)和jta62.3.4 ejb的事務(wù)管理72.3.5 jpa規(guī)范72.4 jsf應(yīng)用框架介紹82.5 mockito介紹92.6 本章小結(jié)9第3章 系統(tǒng)的需求分析及設(shè)計103.1 需求分析103.2 藥物信息結(jié)構(gòu)設(shè)計113.3 整體架構(gòu)和流程序列圖123.3.1 整體架構(gòu)123.3.2 相關(guān)流程圖和序列圖133.4 本章小結(jié)
9、16第4章 網(wǎng)上藥物影響查詢網(wǎng)站的實現(xiàn)174.1 web端實現(xiàn)174.1.1 jsf開發(fā)環(huán)境配置174.1.2 jsf managed bean實現(xiàn)184.1.3 web端相關(guān)實現(xiàn)類圖204.1.4 系統(tǒng)展示214.2 ejb端接口234.2.1 ejb端包劃分234.2.2 業(yè)務(wù)邏輯層244.3 業(yè)務(wù)邏輯實現(xiàn)264.3.1 藥物名查找藥物264.3.2 病癥名查找藥物274.3.3 藥物影響查詢284.4 本章小結(jié)29第5章 難點和解決方法305.1 控制創(chuàng)建entity時生成的sql含有的列305.2 編寫namedquery315.2.1 在返回搜索到的藥物數(shù)量時始終會拋出異常315.2
10、.2 namedquery在真實環(huán)境下有錯315.3 簡化ejb單元測試315.4 簡化web在本地部署的依賴345.5 網(wǎng)站語言的切換355.6 本章小結(jié)37第6章 總結(jié)與展望386.1 總結(jié)386.2 展望38參考文獻39作者簡歷41致謝42圖目錄圖 3.1整體web流程圖11圖 3.2 藥物信息結(jié)構(gòu)設(shè)計11圖 3.3 系統(tǒng)整體架構(gòu)圖13圖 3.4 藥物查詢流程圖13圖 3.5 根據(jù)病癥名查詢藥物序列圖14圖 3.6 根據(jù)藥物名查詢藥物序列圖14圖 3.7 藥物影響查詢流程圖15圖 3.8 藥物影響查詢序列圖15圖 4.1 pom配置圖17圖 4.2 facesservlet在web.xm
11、l內(nèi)配置17圖 4.3 spring在web.xml內(nèi)配置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藥物相關(guān)數(shù)據(jù)庫圖26圖 4.15 通過病癥查找藥物涉及表28圖 5.1 dynamicinsert代碼圖30圖 5.
12、2 dynamicinsertentitylistener代碼圖30圖 5.3 entity使用dynamicinsert代碼圖31表目錄表 3.1通用名藥物信息結(jié)構(gòu)12表 3.2品牌名藥物信息結(jié)構(gòu)12第1章 緒論1.1 課題背景隨著京東商城和天貓的介入推動,醫(yī)藥b2c的交易規(guī)模及消費者需求將逐年增加。同時隨著消費者對網(wǎng)購信任度的增加,市場參與者增多從而擴大醫(yī)藥b2c市場投入,醫(yī)藥b2c的市場比重和交易規(guī)模會大為提高。預(yù)計2013年b2c行業(yè)規(guī)模還將保持300%的增速,全年可以實現(xiàn)50個億的銷售。中國網(wǎng)上藥店理事會更是預(yù)測到2015年中國藥品b2c行業(yè)規(guī)模可以達到150億元。在網(wǎng)上購藥這個市場
13、越來越大的同時,消費者在網(wǎng)上因為無法找到需要的藥物和不知道同時吃多種藥物會有什么反應(yīng)而需要咨詢網(wǎng)上在線藥師的情景也越來越多。隨著在線咨詢越來越頻繁,網(wǎng)上藥店需要大量的在線藥師回答那些重復(fù)的問題。所以,目前急需一種系統(tǒng)。該系統(tǒng)可以幫助消費者查找到什么藥適用于自己這種病,想要查找的藥的有哪些劑型、劑量,同時吃多種藥物的時候是否會有藥物影響、藥物食物反應(yīng)和用藥重復(fù)。基于以上需求現(xiàn)狀,現(xiàn)在要開發(fā)一個具有網(wǎng)上藥物查詢和藥物影響查詢功能的系統(tǒng),用于幫助消費者通過藥物搜索查找到適合于自己病癥的藥物,并在購買多種藥物的時候提供藥物影響查詢服務(wù)。1.2 國內(nèi)外發(fā)展現(xiàn)狀2012年01月,國內(nèi)網(wǎng)上藥店數(shù)量僅為57家
14、,與美國的千家網(wǎng)上藥店數(shù)量相比,數(shù)量上實在太少。而截至2013年10月15日,從國家食品藥品監(jiān)督管理總局(sfda)查詢到的網(wǎng)上藥店數(shù)目已達181家。眾多傳統(tǒng)零售藥店和主流電商目前都紛紛進軍搶占網(wǎng)上藥店的高地。當(dāng)價格不足以在消費者心中留下深刻印象時,物流、購物及產(chǎn)品分類成了天平上的一顆重要砝碼。以藥房網(wǎng)為例,為體現(xiàn)保障客戶用藥安全,通過整合國家食品藥品監(jiān)督管理局(簡稱sfda)和國家食品藥品監(jiān)督管理局藥品審評中心(簡稱cde)的官方數(shù)據(jù),將所有配伍禁忌藥品在“安全用藥警示系統(tǒng)”中進行標(biāo)識。在消費者沒有勾選多人服用的情況下將有配伍禁忌的藥品加入同一購物車,安全用藥警示系統(tǒng)會提醒“不能同時服用”1
15、。和國內(nèi)相比,國外網(wǎng)上購藥要更加嚴格。通過對藥物影響的嚴重程度分級,用戶可以更安全地選擇需要的藥物。除此之外,國外已有許多藥物影響網(wǎng)站(例如)供用戶查詢所購買的藥物是否會發(fā)生不同嚴重程度的藥物不良反應(yīng),而不僅僅是完全禁忌的配伍禁忌。1.3 本文研究內(nèi)容和目標(biāo)本文先是分析了ejb、jpa和jsf所具有的優(yōu)秀特性,決定將其整合起來來形成一個基于jpa+ejb+jsf的經(jīng)典java ee架構(gòu)。然后通過藥物影響搜索系統(tǒng)的需求分析和系統(tǒng)設(shè)計,引出了整個系統(tǒng)的web流程圖以及藥物查詢和藥物影響查詢的流程圖和時序圖。在講述網(wǎng)上安全用藥查詢系統(tǒng)的具體實現(xiàn)時給出了ejb和web端的相關(guān)類圖設(shè)計,以及jsf的配置
16、過程和jsf通過spring整合ejb的詳細闡述。最后是介紹了ejb和web的開發(fā)中碰到的問題和解決方法:插入數(shù)據(jù)的時候某些字段需要采用數(shù)據(jù)庫默認值,通過自定義注釋來控制jpa在create sql的時候不將該字段納入。ejb端進行junittest時,由于數(shù)據(jù)庫測試數(shù)據(jù)不穩(wěn)定和返回數(shù)據(jù)時間過長原因,換用內(nèi)存數(shù)據(jù)庫。為了控制插入數(shù)據(jù)的主鍵和真實數(shù)據(jù)庫一致從而減少遷移成本,采用既可以由數(shù)據(jù)庫生成,又可以直接指定的主鍵生成方式。web端進行本地部署測試時,開發(fā)在本地部署時需要依賴大量的ejb,部署時間和查詢數(shù)據(jù)庫時間過長。通過mockito來減少web對某些返回值比較確定的service的依賴,從
17、而簡化開發(fā)本地的web部署。通過以上一系列的過程,成功實現(xiàn)了基于jpa+ejb+jsf的網(wǎng)上安全用藥查詢系統(tǒng),達成了客戶的需求。1.4 論文結(jié)構(gòu)論文共包含六章。第一部分:緒論,詳細闡述了課題背景和必要性,國內(nèi)外發(fā)展現(xiàn)狀和論文的架構(gòu)。第二部分:國內(nèi)相關(guān)系統(tǒng)的功能和本系統(tǒng)實現(xiàn)采用的相關(guān)技術(shù)綜述,主要介紹了目前網(wǎng)上安全用藥系統(tǒng)的功能需求和非功能需求,繼而提到所用到技術(shù)。第三部分:系統(tǒng)的需求分析和功能設(shè)計。針對網(wǎng)上安全用藥查詢系統(tǒng)的需求,給出了詳細的流程圖和時序圖。第四部分:網(wǎng)上安全用藥查詢系統(tǒng)的實現(xiàn)方法。在展示網(wǎng)上安全用藥查詢系統(tǒng)使用流程后,系統(tǒng)地介紹了網(wǎng)上安全用藥查詢系統(tǒng)各個頁面的詳細功能及實現(xiàn)。
18、第五部分:針對網(wǎng)上安全用藥查詢系統(tǒng)在實現(xiàn)過程中遇到的問題給出相應(yīng)的解決方法。第六部分:總結(jié)與展望,對網(wǎng)上安全用藥查詢系統(tǒng)進行了總結(jié)并對功能上的拓展方向進行了展望。第2章 相關(guān)技術(shù)綜述2.1 國內(nèi)相關(guān)系統(tǒng)目前,中國國內(nèi)醫(yī)院已有很多采用藥物查詢系統(tǒng)幫助醫(yī)生開藥,少部分醫(yī)院已經(jīng)開始采用adr監(jiān)測系統(tǒng)來預(yù)防在處方階段發(fā)生不良藥物影響。但是這些系統(tǒng)只用于醫(yī)院,并沒有對外開放。這使得老百姓難以安心地自主用藥。藥物查詢方面,國內(nèi)醫(yī)院系統(tǒng)從普通的快速查詢和高級查詢兩方面入手。在使用快速查詢功能時,用戶可以按照藥物分類、藥物通用名、英文名、品牌名等進行快速查找。在使用高級查詢功能時,用戶則可以添加更加專業(yè)的病癥
19、名、疾病癥狀、劑型、藥動學(xué)等方面信息來準(zhǔn)確查找符合要求的藥物。通過點擊搜索出來的藥物連接可以得到藥物的藥物名、化學(xué)結(jié)構(gòu)、適用病癥、用法用量、注意事項、相關(guān)文獻等詳細信息。藥物不良反應(yīng)查詢功能多見于醫(yī)院adr(藥物不良反應(yīng))監(jiān)測系統(tǒng),用于提示醫(yī)生所開藥物間可能發(fā)生藥物不良影響。藥物不良反應(yīng)除了和藥物配方有關(guān)外,還和藥物的施藥途徑、劑型、劑量有關(guān)。施藥途徑?jīng)Q定了人體吸收藥物的方式,如肌肉吸收、腸胃吸收、表皮吸收。劑型則會影響藥劑的吸收速度。劑量對某些藥物是否會發(fā)生反應(yīng)產(chǎn)生一定影響。醫(yī)生通過改變施藥途徑、劑型、劑量來保證病人安全用藥。醫(yī)院所使用的藥物不良反應(yīng)監(jiān)測系統(tǒng)通過記錄病人的所用藥品明細記錄來判
20、斷是否突然出現(xiàn)了和病人原有病癥無關(guān)的用藥異常,或者藥物組合中含有國家藥物不良反應(yīng)中心指出的藥物不良反應(yīng)因果關(guān)系。這類系統(tǒng)操作復(fù)雜,并不適用于客戶只需要簡單方便地檢測是否發(fā)生藥物影響的需求。除此之外,由于這些系統(tǒng)只在醫(yī)院內(nèi)部使用,在b/s結(jié)構(gòu)和web端大批量用戶訪問上普遍存在著缺陷。2.2 本系統(tǒng)差異針對網(wǎng)上用戶不具備醫(yī)學(xué)相關(guān)方面知識的特點,本系統(tǒng)在藥物搜索、病癥搜索、藥物和藥物影響檢測方面做出了一定的簡化修改。在進行搜索藥物時,系統(tǒng)通過用戶搜索藥物字段是否和dispensable表內(nèi)的descsearch和descaltsearch字段相似來判斷這個dispensable藥物是否是用戶想要搜索
21、的藥物。descsearch和descaltsearch字段一般存放這藥物的商品名和藥物的學(xué)名,去除了復(fù)雜的通過劑型、藥動學(xué)等藥物方面的專業(yè)搜索。在檢測藥物和藥物間反應(yīng)時,出于用戶方便和減輕數(shù)據(jù)庫壓力方面考慮,只是判斷帶有施藥途徑的藥物(主鍵rtgenid)和帶有施藥途徑的藥物之間是否會發(fā)生藥物影響,去除了復(fù)雜的劑型、劑量等考慮。在通過病癥名來搜索正確病癥,從而得到可以治療該病癥的藥物相關(guān)信息時,本系統(tǒng)出于用戶很多時候不能夠正確輸入病癥,所以建立了一個medcondsearchfml表,專門存放了用戶容易搜索的病癥名。之后,系統(tǒng)再根據(jù)medcondsearchfml表查找真正的病癥名表(med
22、cond表)從而找到對應(yīng)的正確臨床病癥名。在藥物和藥物不良反應(yīng)檢查上,現(xiàn)有的網(wǎng)上購藥網(wǎng)站只是整合了國家食品藥品監(jiān)督管理局(簡稱sfda)和國家食品藥品監(jiān)督管理局藥品審評中心(簡稱cde)的官方數(shù)據(jù),將所有配伍禁忌藥品在“安全用藥警示系統(tǒng)”中進行標(biāo)識,缺少對藥物嚴重程度的標(biāo)識。美國食品藥品管理局將用藥安全程度分為五級。在使用西藥時,醫(yī)生都會參照用藥的安全程度來考慮產(chǎn)生的后果是否可以接受,然后決定是否這樣用藥。在提供藥物和藥物不良反應(yīng)檢測的同時,本系統(tǒng)還提供藥物和食物、用藥重復(fù)的檢測,使用戶能夠更安全得使用藥物。2.3 經(jīng)典java ee本項目旨在通過分析設(shè)計一種更科學(xué)且更簡便有效的搜索方法,并在
23、最后監(jiān)測藥物影響的時候為網(wǎng)上用戶提供更加詳細的已選藥物間不良反應(yīng)、飲食禁忌、用藥重復(fù)檢測。大量的網(wǎng)上用戶訪問促使我們決定使用經(jīng)典java ee架構(gòu)進行構(gòu)建。2.3.1 經(jīng)典java ee組件經(jīng)典java ee應(yīng)用大致包括以下組件:(1)控制器組件:java ee的mvc框架提供了一個前端核心控制器,攔截用戶請求,并將請求轉(zhuǎn)發(fā)給用戶實現(xiàn)的控制器組件。用戶實現(xiàn)的控制器組件處理調(diào)用業(yè)務(wù)邏輯方法,處理用戶請求。(2)業(yè)務(wù)邏輯組件:業(yè)務(wù)邏輯組件負責(zé)實現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯,一般由session bean實現(xiàn)。一次用戶操作一般對應(yīng)一個業(yè)務(wù)邏輯方法。一個業(yè)務(wù)邏輯方法是一個整體的,因此需要對業(yè)務(wù)邏輯方法增加事務(wù)性。
24、業(yè)務(wù)邏輯方法應(yīng)當(dāng)僅負責(zé)實現(xiàn)業(yè)務(wù)邏輯,不進行數(shù)據(jù)庫訪問。(3)eao組件:實體訪問對象(entity access object),通常采用session bean來實現(xiàn)。相當(dāng)于輕量級java ee的dao對象,提供對entity對象的添、讀、修、刪操作。(4)entity對象:系統(tǒng)的對象模型抽象。領(lǐng)域?qū)ο蟮臓顟B(tài)一般都必須保存在數(shù)據(jù)庫里面。因此,每個entity都映射到一個或多個數(shù)據(jù)庫表。(5)表現(xiàn)層組件:收集用戶輸入數(shù)據(jù)或向客戶顯示系統(tǒng)狀態(tài)。表現(xiàn)層組件可以是某種表現(xiàn)層技術(shù),普通的應(yīng)用程序,或者是小型智能設(shè)備。2.3.2 ejb技術(shù)enterprise java bean簡稱ejb,有時也稱為企
25、業(yè)bean或企業(yè)級bean。作為一種可重用的分布式對象計算技術(shù),ejb可用于部署開發(fā)分布式的、多層結(jié)構(gòu)的、面向?qū)ο蟮膉ava應(yīng)用系統(tǒng)的跨平臺組件體系結(jié)構(gòu)2。ejb組件在使設(shè)計開發(fā)系統(tǒng)級應(yīng)用更簡單的同時還使得系統(tǒng)具有良好的移植性、擴充性和維護性3。ejb運行在ejb容器中時,ejb容器會提供包括持久化、數(shù)據(jù)緩存、聲明性安全、負載均衡、錯誤修復(fù)及事務(wù)性處理的系統(tǒng)級服務(wù)4。enterprise bean又可分為三種:會話bean、實體bean、消息驅(qū)動bean。session bean(會話bean):是應(yīng)用的業(yè)務(wù)邏輯層的faade。session bean比spring容器中的pojo bean的
26、功能更加強大,它支持如下功能:(1)并發(fā)和線程安全(2)開發(fā)者無需理會多客戶端并發(fā)的線程安全問題,只要像開發(fā)普通java類一樣開發(fā)ejb3就可,ejb容器會為之提供多線程并發(fā)功能和保證線程安全。(3)事務(wù)和安全管理ejb容器可以以聲明式的方式來管理其內(nèi)的session bean的事務(wù)和安全。ejb3的session bean分為有狀態(tài)會話bean(stateful session bean)和無狀態(tài)會話bean(stateless session bean)兩類。stateful session bean需要ejb容器更高的系統(tǒng)開銷來維護客戶端狀態(tài),因此性能較stateless session
27、 bean低。2.3.3 事務(wù)和jta事務(wù)控制作為j2ee應(yīng)用中的一環(huán),保證一系列數(shù)據(jù)庫操作不發(fā)生錯誤,從而保證應(yīng)用業(yè)務(wù)邏輯成功執(zhí)行和底層數(shù)據(jù)庫完整。事務(wù)有四個特性:原子性、一致性、隔離性和持續(xù)性。jta事務(wù)由java ee事務(wù)管理器負責(zé)控制,可以保證多個數(shù)據(jù)庫更新的一致性,通過jta即可實現(xiàn)全局事務(wù)控制。開發(fā)者可以通過使用jta,用一種與事務(wù)管理器無關(guān)的方式來start、commit或roll back事務(wù)。java ee應(yīng)用服務(wù)器通過java transaction service(簡稱jts,java事務(wù)服務(wù))來實現(xiàn)java ee事務(wù)管理器。應(yīng)用程序不用直接使用jts方法,只需面向jta
28、方法就可由jta來調(diào)用底層jts進行事務(wù)處理。2.3.4 ejb的事務(wù)管理ejb有兩種事務(wù)管理方式,這兩種事務(wù)管理方式通常都建立在jta基礎(chǔ)之上。一種是通過容器管理事務(wù)(cmt)以聲明式方式來管理事務(wù);另一種則在ejb內(nèi)部使用事務(wù)管理代碼由開發(fā)者自己管理事務(wù)(bean管理事務(wù),簡稱bmt)。容器管理事務(wù)(cmt):ejb默認使用容器管理事務(wù)。當(dāng)使用cmt事務(wù)管理策略時,容器將接管ejb的事務(wù)管理,為我們完成事務(wù)的start、commit和roll back。容器總是在業(yè)務(wù)方法的開始、結(jié)束處標(biāo)記事務(wù)邊界,也就是說,容器將在調(diào)用方法之前開始jta事務(wù),然后根據(jù)方法的調(diào)用情況來決定提交或回滾事務(wù)。當(dāng)
29、使用cmt事務(wù)管理策略時,開發(fā)者無需為事務(wù)控制編寫任何代碼,只需通過annotation或xml配置文件告訴容器如何處理事務(wù)即可。當(dāng)使用容器管理事務(wù)時,業(yè)務(wù)方法不應(yīng)該調(diào)用任何可能與容器所設(shè)置事務(wù)注解沖突的方法。默認事務(wù)管理類型為cmt。因為bmt在實現(xiàn)事務(wù)管理時需要大量的硬編碼,導(dǎo)致事務(wù)邏輯難以切換,同時session bean中業(yè)務(wù)和事務(wù)邏輯也混雜在一起。除此之外,當(dāng)客戶端調(diào)用bmt方法時,會暫停當(dāng)前已有事務(wù),制約了組件的重用。2.3.5 jpa規(guī)范原先,java ee和java se應(yīng)用的對象持久化比較麻煩,同時orm技術(shù)非常多,如果換了一種實現(xiàn)就必須去重新學(xué)習(xí),然后重新編寫代碼。因而,出
30、于簡化和標(biāo)準(zhǔn)化考慮,sun官方提供了jpa用于提供持久化標(biāo)準(zhǔn)規(guī)范5。通過使用jpa,可以使得eao層更加標(biāo)準(zhǔn)規(guī)范,同時也擺脫了原先對各種orm實現(xiàn)的依賴,從而使得系統(tǒng)更加易于維護和移植。jpa是jsr-220實現(xiàn)的一部分,開發(fā)人員為ejb3.0軟件專家組6。但它是一種用于java持久化的輕量級且基于pojo的框架7。除了可以在基于ejb的java ee應(yīng)用中使用外,jpa同時也完全可以在普通java se中使用。因為是基于pojo的框架,所以jpa非常優(yōu)雅;更為可貴的是它非常簡單,所以易于學(xué)習(xí)和掌握8。jpa大致包括以下三種組件:1.orm映射元數(shù)據(jù)orm映射元數(shù)據(jù)有些地方又稱為實體,只是通過
31、xml映射文件或annotation建立了和底層數(shù)據(jù)表之間對應(yīng)關(guān)系的pojo。2. entity manager實體因為是普通的pojo,沒有持久化能力。因而jpa提供了entity manager來對entity進行操作。除此之外,實體管理器還可以通過與持久化上下文(persistence context)進行交互來轉(zhuǎn)換實體不同狀態(tài)9。3.jpql查詢通過面向?qū)ο蟮牟樵冋Z言查詢數(shù)據(jù)來減小程序與sql的耦合度10。jpa只是制定了一個api,供應(yīng)商可以做出自己的實現(xiàn),而且開發(fā)人員也可以對某些api進行自定義11。按照sun的預(yù)想,開發(fā)者可以隨意地選擇切換jpa實現(xiàn)。2.4 jsf應(yīng)用框架介紹j
32、ava server faces簡稱jsf,是一種sun公司在java ee規(guī)范中設(shè)計的一種搭建java web應(yīng)用程序的mvc框架。jsf主要有如下五大優(yōu)勢:1.可以通過拖放組件方式快速開發(fā)頁面。2.將頁面上的ui組件的值綁定到服務(wù)器端的數(shù)據(jù)模型。3.可以使用服務(wù)器端業(yè)務(wù)代碼來響應(yīng)客戶端事件。4. ui組件具有高度的重用和擴展特性,適合構(gòu)造用戶界面。5.恢復(fù)ui狀態(tài)和跨請求保存。借助于這幾大優(yōu)勢,成功封裝了請求-響應(yīng)模型,允許開發(fā)者采用面向?qū)ο蟮氖录ㄐ拍P瓦M行rad方式開發(fā)web應(yīng)用,避免了以往基于請求、響應(yīng)和標(biāo)記來考慮問題的弊端12。通過jsf,用戶可以在頁面中使用web組件、捕獲用戶行
33、為產(chǎn)生的事件、進行驗證和頁面導(dǎo)航等,實現(xiàn)用戶界面到業(yè)務(wù)邏輯層的直接映射,省去了大部分需要開發(fā)者處理的http細節(jié)13。由于jsf是一個開放架構(gòu),開發(fā)人員可以通過自己創(chuàng)建或者繼承已有組件的方式來開發(fā)自己的組件,因而具有很強的靈活性和可擴展性14。2.5 mockito介紹隨著快速應(yīng)用開發(fā)模式(rad)和程序規(guī)模越來越大,項目越來越需要借助自動軟件測試來解決測試繁重、測試效率低等問題。由于java單元測試框架junit難以構(gòu)造對象、方法,于是又引入mock object來解決這個問題。但jmock和easymock這兩種框架的實現(xiàn)都局限于用mock技術(shù)模擬被測試方法依賴的外部對象,mocking是
34、由期望-運行-驗證庫決定15。mockito提供了一種更簡單,更直觀的方法:mock在執(zhí)行后的交互。使用mockito可以專心驗證想要驗證的東西,而不是像在使用期望-運行-驗證庫時被迫經(jīng)常處理無關(guān)交互。沒有期望-運行-驗證同時也意味著mockito在mock時通常不需要昂貴的啟動前期準(zhǔn)備。他們的目標(biāo)是透明的,從而使開發(fā)人員將精力集中于測試選定的行為而不是注意力被別的吸走。mockito擁有簡潔的api,幾乎不需要花時間去啟動模擬行為。只有一種方法創(chuàng)建模擬。mockito的語法和jmock與easymock類似,因此可以放心重構(gòu)。不同的地方在于通過在執(zhí)行后校驗什么已經(jīng)被調(diào)用,消除了對期望行為的需
35、求。消除了因在執(zhí)行前需要記錄期望行為導(dǎo)致的丑陋初始化代碼。2.6 本章小結(jié)本章主要闡述了含有藥物影響搜索功能的系統(tǒng)的功能特點,并分析了本項目將會使用到的主要技術(shù),以及這些技術(shù)所具有的特性和優(yōu)點。第3章 系統(tǒng)的需求分析及設(shè)計3.1 需求分析客戶要求設(shè)計一個網(wǎng)上安全用藥查詢系統(tǒng),可以自動幫助用戶查看詳細的藥物影響。首先是分析設(shè)計一種更科學(xué)且更簡便有效的搜索方法,通過藥品的學(xué)名或者品牌名進行搜索。點擊進入查看詳細信息的時候可以查看這種藥物有哪幾種藥物形式和藥物劑量組合。最后檢測藥物影響的時候提供比用藥配伍禁忌更加詳細的已選藥物間不良反應(yīng)、飲食禁忌、用藥重復(fù)等檢測。舉個例子來說,消費者在網(wǎng)上買了多種藥
36、物,但是他不知道詳細的藥物影響或者只知道自己購買的這種組合不屬于國家藥物配伍禁忌里面的組合,至于所購買的藥物間是否有藥物重復(fù),藥物食物反應(yīng)和輕微的藥物間反應(yīng)則需要消費者自己研究復(fù)雜的藥物說明書。傳統(tǒng)情況下消費者可能會由于麻煩而不去看藥物說明書,或者由于藥物說明書的復(fù)雜性而沒有看出來自己同時購買的藥物不宜同時使用。以2005年舉辦的“百姓安全用藥調(diào)查”結(jié)果來看,我國不合理用藥的人占總用藥人數(shù)的12%-32%,情況非常嚴重16。有了藥物查詢軟件后,消費者可以輕松地根據(jù)藥物名稱和藥物吸收途徑、劑型、劑量準(zhǔn)確地搜索到自己準(zhǔn)備購買的藥物。系統(tǒng)通過藥物的吸收途徑給出哪幾種藥物間會發(fā)生什么級別的藥物影響,是
37、否有用藥重復(fù),以及是否有藥物和食物反應(yīng)。具體操作流程如圖3.1所示,圖 3.1整體web流程圖3.2 藥物信息結(jié)構(gòu)設(shè)計通過仔細分析用藥現(xiàn)狀,考慮到藥品具有的劑量大小、藥品形式、吸收方式。同時市場上流通的藥品使用的多是其商業(yè)名而非學(xué)術(shù)名,將藥品的信息結(jié)構(gòu)設(shè)計圖如圖3.2所示,圖 3.2 藥物信息結(jié)構(gòu)設(shè)計以下是通用名藥的信息結(jié)構(gòu)定義:表 3.1通用名藥物信息結(jié)構(gòu) 通用名藥概念詳細信息例子ingredient成分名華法林鈉genericdrug藥名華法林鈉routedgeneric藥名 + 施藥途徑華法林鈉口服routeddoseformgeneric藥名+施藥途徑+劑型華法林鈉口服片dispens
38、ablegeneric藥名+施藥途徑+劑型+劑量華法林鈉口服片10毫克品牌名藥和通用名藥對應(yīng),但是使用的是品牌名。以下是品牌名藥的信息結(jié)構(gòu):表 3.2品牌名藥物信息結(jié)構(gòu) 品牌名藥概念詳細信息例子drugname品牌名香豆素routeddrug品牌名 + 施藥途徑香豆素口服routeddoseformdrug品牌名+施藥途徑+劑型香豆素口服片dispensabledrug品牌名+施藥途徑+劑型+劑量香豆素口服片10毫克3.3 整體架構(gòu)和流程序列圖3.3.1 整體架構(gòu)系統(tǒng)整體基本上是用經(jīng)典java ee架構(gòu)。java ee架構(gòu)和輕量級java ee應(yīng)用的分層架構(gòu)基本一致,只是業(yè)務(wù)邏輯層和dao層換
39、成了由session bean,dao層換成了eao層,還有domain object層換成了由jpa的entity充當(dāng)?shù)膃ntity層。web端jsf和spring結(jié)合則通過使用spring的contextloaderlistener和delegatingvariableresolver來實現(xiàn)通過配置文件將對象依賴注入到j(luò)sf管理的bean。ejb、jsf、jpa整合架構(gòu)圖如3.3所示,圖 3.3 系統(tǒng)整體架構(gòu)圖3.3.2 相關(guān)流程圖和序列圖用戶進入藥物影響搜索系統(tǒng)后,可以根據(jù)病癥名查找到相似病癥名,然后通過搜索出來的準(zhǔn)確臨床病癥名來查找治療藥物。用戶也可以直接通過輸入藥物名來進行搜索。后臺
40、會返回所有以用戶輸入的藥名開頭并且沒有超過廢棄時間的藥物名。藥物查詢流程圖如圖3.4所示,圖 3.4 藥物查詢流程圖通過病癥名查詢藥物時需要先在左側(cè)顯示搜索出來的病癥列表供用戶選擇。由于病癥condition是另外一個ejb項目中的類。為了避免無謂地引入ejb,通過xstream轉(zhuǎn)化condition為xml進行傳輸。其時序圖如圖3.5所示,圖 3.5 根據(jù)病癥名查詢藥物序列圖除了通過病癥名查詢藥物,用戶也可以通過藥物名查詢藥物。藥物名查詢的序列圖如圖3.6所示,圖 3.6 根據(jù)藥物名查詢藥物序列圖用戶在點擊查看藥物詳細信息后,可以將選擇的藥物加入到藥櫥。通過頁面目前選擇的語言id和點擊的藥物
41、id得到藥物的用法、副作用、不可和哪些藥物同時使用、預(yù)防措施、過量和漏服處理、儲存方式、備注等藥物詳細信息。藥物影響查詢流程圖如圖3.7所示,圖 3.7 藥物影響查詢流程圖用戶在藥物影響查詢彈出層對已選藥物做出增刪操作后,通過jsf的managedbean(druginteractionmb)來調(diào)用drugcabinetservice查找藥物和藥物影響、用藥重復(fù)及藥物食物反應(yīng)信息。序列圖如圖3.8所示,圖 3.8 藥物影響查詢序列圖3.4 本章小結(jié)首先,本章對藥物影響查詢網(wǎng)站的需求進行了細致的分析,給出了客戶想要的web流程圖。然后整體架構(gòu)將jpa、ejb3、jsf較好地銜接了起來,發(fā)揮了各自
42、的優(yōu)勢。最后給出了功能模塊的流程圖和序列圖,并在圖中給出了其功能具體實現(xiàn)所調(diào)用的主要接口。第4章 網(wǎng)上藥物影響查詢網(wǎng)站的實現(xiàn)4.1 web端實現(xiàn)4.1.1 jsf開發(fā)環(huán)境配置首先,引入需要的jar包。由于jsf是建立在servlet基礎(chǔ)上的,所以在引入jsf的同時還需要引入servlet的jar包。對一個項目來說,它是依賴的jar包非常重要,既不能少,也不能夠版本不正確。早期很多公司都是不得不將其提交到svn中17。maven是基于項目對象模型(pom,project object model),通過描述信息管理項目構(gòu)建,報告和文檔的軟件項目管理工具18。pom.xml配置如圖4.1所示,圖
43、4.1 pom配置圖facesservlet在web.xml內(nèi)的配置如圖4.2所示,圖 4.2 facesservlet在web.xml內(nèi)配置每個java ee應(yīng)用服務(wù)器都包含ejb容器和web容器,使得ejb和web都可以部在同一個應(yīng)用服務(wù)器上19。jsf的托管bean處于應(yīng)用服務(wù)器的管理之下,因而服務(wù)器可以很容易地將業(yè)務(wù)邏輯組件注入到j(luò)sf的托管bean中20。在jsf端需要使用ejb端的service。由于j2ee 官方并沒有給出一個標(biāo)準(zhǔn)api,我們通過添加spring啟動監(jiān)視器,然后在spring配置文件內(nèi)采用jee:remote-slsb方式遠程調(diào)用ejb。在此之前需要添加下spri
44、ng的支持。spring在web.xml文件中配置如圖4.3所示,圖 4.3 spring在web.xml內(nèi)配置spring配置文件如下,最后,在jsf托管bean內(nèi)只需添加drugsearchlogicservice對象、managedproperty(#drugsearchlogicservice)注釋和其get、set方法就可以得到想要的service了。4.1.2 jsf managed bean實現(xiàn)managed bean在這個項目里面主要分為了六個包:(1)com.memberaccess.validation,主要負責(zé)驗證頁面輸入內(nèi)容是否正確,如輸入的藥物名、病癥名是否符合長度規(guī)
45、范等。用戶自己編寫的validator類需要實現(xiàn)jsf的validator接口。同時facesvalidator注釋需要保證里面的值與web頁面調(diào)用的值一樣,不然就會無法查找到。除此之外還要保證在頁面調(diào)用的唯一標(biāo)示,否則也會報錯。其書寫形式有facesvalidator()和facesvalidator(value =)兩種。如下是一個簡單的validator,facesvalidator(drugnamevalidator)public class drugnamevalidator implements validator private static final logger log =
46、 loggerfactory.getlogger(drugnamevalidator.class);private static final string drug_name_required = three_chars_least_drug_search;private static final int limit_length = 3;overridepublic void validate(facescontext facescontext, uicomponent component, object value) (validate() invoked);uiinput
47、 inputdrugname = (uiinput) facescontext.getviewroot().findcomponent(drugsearchform).findcomponent(drugsearchform:drugentry);(drugname: , inputdrugname);string drugname = inputdrugname = null ? : (string) inputdrugname.getsubmittedvalue().trim();(drugname: , drugname);string msg = ;if
48、 (isempty(drugname) | drugname.length() length_condition) stringbuffer buffer = new stringbuffer();fomattedzipcode = buffer.append(fomattedzipcode.substring(index_zero, index_five).append(symbol_hyphen).append(fomattedzipcode.substring(index_five).tostring();log.debug(getasstring() complete);return
49、fomattedzipcode;(3)com.memberaccess.userstate.drugsearch,主要用于放managed bean包。其和寫在頁面上的頁面邏輯部分一起構(gòu)成了基本所有的頁面邏輯。當(dāng)某個公共servicebean被多個managedbean調(diào)用的時候,多將其統(tǒng)一存放于commonbusinesscontrolmb內(nèi)部,這樣便于注入修改,和java中faade的思想一致。managedbean多使用sessionscoped或者是通過customscoped(value=)使用項目內(nèi)部自定義的范圍。除了作用周期標(biāo)簽外,managedbean標(biāo)簽是所有managedb
50、ean必不可少的。(4)com.memberaccess.util,放置用于存放各個項目都會用到的工具,如項目中用到的xproperties文件讀取工具以及用于jsf component的componentutil工具。(5)com.memberaccess.web,用于存放讀取web具體配置屬性相關(guān)的工具類、繼承了jsf的exceptionhandlerfactory的自定義exception-handler-factory、以及web中用到的切面類等和web密切相關(guān)的類。4.1.3 web端相關(guān)實現(xiàn)類圖以下是web端用到的主要類圖及類間關(guān)系。由于病情搜索和藥物搜索都是通過drugsearc
51、hlogicservice進行搜索的,所以就一同寫在了drugsearchmb里面。condition里面裝載了病情的編號,是否有藥物治療或預(yù)防等信息。fdbdrug里面包含了一個藥物的主要id和藥物名稱、劑型、劑量主鍵等信息。memberaccessexceptionhandler繼承exceptionhandlerwrapper,在前臺提示用戶由于后臺哪些錯誤,該如何解決等信息。localizationfilter類用于解決不同語言切換后語言的properties文件切換問題。web端主要類圖如圖4.4所示,圖 4.4 web端類圖4.1.4 系統(tǒng)展示在用戶輸入賬戶信息通過驗證后,就可進入
52、藥物查找頁面。藥物查找可以通過藥物開頭名和癥狀名兩種方式。藥物查詢方式選擇界面如圖4.5所示,圖 4.5 藥物查詢方式選擇頁面通過病癥名和直接通過藥物開頭名查詢在頁面顯示上的區(qū)別并不大,只是通過病癥名查找時是通過一張存儲了用戶經(jīng)常搜索的病癥名對應(yīng)正確病癥名表進行搜索,然后在左側(cè)列出正確病癥名列供用戶選擇。選擇后右側(cè)的搜索出該病癥的治療藥物列表。用戶選擇high cholesterol(高膽固醇)病癥后搜索出的頁面如圖4.6所示,圖 4.6 病癥查詢藥物搜索頁面在將lipitor藥物前面的多選框勾上后,用戶再搜索vfend藥物并點擊右側(cè)藥物名查看藥物詳細信息。用戶可以點擊add drugto drug list to 計算藥物服用時間、服用頻率等信息后統(tǒng)計出的費用。藥物詳細信息頁面提供了藥物的劑型、劑量、藥物圖片、作用、服用方式、副作用、藥物影響、預(yù)警、過量服用后果、錯過服用時的信息、保存以及備注說明等信息。藥物詳細信息頁面如圖4.7所示,圖 4.7 藥物詳細信息頁面點擊“add drug to drug li
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 井下電氣設(shè)備防爆管理制度
- 3《荷花》核心素養(yǎng)分層學(xué)習(xí)任務(wù)單-2022-2023學(xué)年三年級語文下冊新課標(biāo)(部編版)
- 2024年??诳瓦\駕駛從業(yè)資格證考試題庫及答案
- 2024年廣東道路客運資格證考試題
- 2024年云南申請客運從業(yè)資格證考試題和答案
- 2024年??诳瓦\資格證必考題答案
- 2024年云南客運從業(yè)資格證考試題技巧和方法圖片
- 2024年貴陽客運員考試題庫答案解析
- 2024年青島2024年道路旅客運輸從業(yè)資格證模擬試題
- 2024年衡水大客車從業(yè)資格證考試試題
- 工程代收款付款協(xié)議書范文模板
- 全套教學(xué)課件《工程倫理學(xué)》
- 霧化吸入療法的用藥指南2024課件
- 人音版六年級上冊全冊音樂教案(新教材)
- 2024-2030年中國青霉素行業(yè)深度調(diào)研及投資前景預(yù)測研究報告
- 《公共管理學(xué)》第五章-政府作用課件
- 2024年認證行業(yè)法律法規(guī)及認證基礎(chǔ)知識
- 2024年臨時用工管理制度(五篇)
- 《跆拳道》教學(xué)大綱
- 大學(xué)美育 課件 王樹青 第三篇 文藝之美
評論
0/150
提交評論