畢業(yè)論文錄音錄像管理平臺的設(shè)計與實(shí)現(xiàn)【最終稿】_第1頁
畢業(yè)論文錄音錄像管理平臺的設(shè)計與實(shí)現(xiàn)【最終稿】_第2頁
畢業(yè)論文錄音錄像管理平臺的設(shè)計與實(shí)現(xiàn)【最終稿】_第3頁
畢業(yè)論文錄音錄像管理平臺的設(shè)計與實(shí)現(xiàn)【最終稿】_第4頁
畢業(yè)論文錄音錄像管理平臺的設(shè)計與實(shí)現(xiàn)【最終稿】_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ZHEJIANG University of Water Resources and Electric Power畢業(yè)設(shè)計(論文)題目:錄音錄像管理平臺的設(shè)計與實(shí)現(xiàn) 系(部):信息工程與藝術(shù)設(shè)計學(xué)院專業(yè)班級:軟件技術(shù)12-1姓 名:學(xué) 號:指導(dǎo)教師:指導(dǎo)教師:迄止時間:2014年 11月 14日 2015年 05月30日2015 年 04 月 24 日目 錄引言21. 系統(tǒng)概述21.1 系統(tǒng)功能21.2 系統(tǒng)開發(fā)環(huán)境32. 系統(tǒng)分析(詳見附錄3)33. 數(shù)據(jù)庫設(shè)計53.1 數(shù)據(jù)庫選擇53.2 數(shù)據(jù)庫詳細(xì)設(shè)計53.3 數(shù)據(jù)庫的安全性54. 系統(tǒng)設(shè)計64.1 系統(tǒng)總體設(shè)計64.1.1 系統(tǒng)結(jié)構(gòu)圖1

2、14.1.2 系統(tǒng)模塊124.2 前臺系統(tǒng)實(shí)現(xiàn)124.3 界面展示134.3.1 用戶登陸134.3.2 主界面134.3.3 錄音記錄144.3.4 視頻記錄144.3.5 鈴音配置154.3.6 通話白名單154.3.7 中轉(zhuǎn)站設(shè)置164.3.8 IP 段設(shè)置164.3.9 IP限流設(shè)置164.3.10 話機(jī)升級174.3.11 流量監(jiān)控174.4后臺系統(tǒng)實(shí)現(xiàn)175. 運(yùn)行維護(hù)手冊186. 設(shè)計總結(jié)評價18參考文獻(xiàn)20附錄21附錄1 系統(tǒng)需求21附錄2 影像接口報文21附錄3 設(shè)計文檔21附錄4 運(yùn)維手冊21引言繼上海銀監(jiān)發(fā)布【2013】140號文件后,2014年7月中國銀監(jiān)會北京監(jiān)管局文

3、件,京銀監(jiān)發(fā)【2014】132號關(guān)于印發(fā)商業(yè)銀行產(chǎn)品銷售錄音錄像工作指引的通知,通知要求北京區(qū)域各分支機(jī)構(gòu)進(jìn)一步加強(qiáng)理財產(chǎn)品銷售流程和管理規(guī)范的文件要求,各分支機(jī)構(gòu)在銷售理財產(chǎn)品尤其是高風(fēng)險(如代銷類)產(chǎn)品時必須進(jìn)行風(fēng)險揭示及錄音錄像1. 系統(tǒng)概述1.1 系統(tǒng)功能本系統(tǒng)主要完成以下功能(詳見附件1)Ø 錄音管理(1) 錄音統(tǒng)計(2) 錄音記錄Ø 視頻管理(1)視頻記錄Ø 話機(jī)設(shè)置(1)來電鈴音(2)答錄提示音(3)話機(jī)設(shè)備(4)錄音提示音(5)話機(jī)綁定信息(6)通話配置(7)通話白名單Ø 傳輸配置(1) 中轉(zhuǎn)站設(shè)置(2) IP段設(shè)置(3) IP限流設(shè)置&

4、#216; 系統(tǒng)配置(1) 話機(jī)升級(2) 系統(tǒng)升級(3) 修改密碼Ø 系統(tǒng)監(jiān)控(1) 流量監(jiān)控Ø 影像上傳(1) 上傳影像(2) 定時器Ø 影像調(diào)用(1) esb傳輸(2) extra接口(3) ECM影像平臺Ø 托盤(1) 一鍵安裝(2) 通信協(xié)議(3) 話機(jī)交互(4) USB傳輸(5) http長連接1.2 系統(tǒng)開發(fā)環(huán)境本軟件管理系統(tǒng)采用的開發(fā)環(huán)境與開發(fā)語言為Eclipse/IDEA、vmcssjQuery,后臺語言采用java,托盤采用的DEPHI,使用的數(shù)據(jù)庫為ORACLE/DB2,服務(wù)器為linux/Windows server20081。2

5、. 系統(tǒng)分析(詳見附錄3)我們針對需求畫了一幅設(shè)計分析圖,該圖清晰展現(xiàn)出我們整個平臺的大致結(jié)構(gòu)圖2-1 概要設(shè)計圖圖2-2 去電流程圖圖2-3 來電流程圖3. 數(shù)據(jù)庫設(shè)計3.1 數(shù)據(jù)庫選擇本系統(tǒng)所采用的數(shù)據(jù)庫是ORACLE/DB28,103.2 數(shù)據(jù)庫詳細(xì)設(shè)計數(shù)據(jù)庫設(shè)計文檔請參照附件2的數(shù)據(jù)庫設(shè)計文檔。3.3 數(shù)據(jù)庫的安全性數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫以防止不合法的使用所造成的數(shù)據(jù)泄漏、更改或破壞。在數(shù)據(jù)庫系統(tǒng)中,大量的數(shù)據(jù)集中存放,同時又為許多用戶直接共享,是寶貴的信息資源,因此系統(tǒng)的安全保護(hù)措施就顯得更為重要。鍵全的數(shù)據(jù)庫安全機(jī)制可以防止數(shù)據(jù)庫被惡意的破壞和非法的存取。本系統(tǒng)平臺安全性設(shè)計

6、在數(shù)據(jù)庫設(shè)計上就以體現(xiàn),我們將每個頁面當(dāng)成一個請求,每個菜單按鈕配置在數(shù)據(jù)庫,當(dāng)你登錄時,我們會檢查當(dāng)前用戶的級別,你的級別取決于你能看到多少東西,可以發(fā)起什么請求,可以看到什么頁面,那么,即使你非法登錄進(jìn)我們的系統(tǒng),可是該用戶并非有權(quán)限查看我們的系統(tǒng),那么你看到的也許是一片空白,這算不算是一個驚喜呢,總之,我們對安全性做了一系列的處理,在此不一一贅述8,10。4. 系統(tǒng)設(shè)計對話機(jī)和系統(tǒng)配置后,我們最關(guān)鍵的就是要將得到的錄音錄像記錄上傳到服務(wù)器,并且我們還將真正的影像上傳至影像平臺,我們會實(shí)時的對上傳的影像進(jìn)行監(jiān)控。4.1 系統(tǒng)總體設(shè)計本系統(tǒng)采用的前端框架為velocity/JQuery/CS

7、S/JSONP我們封裝的JS/bootStrap,Velocity是一個基于Java的模板引擎,它可以獨(dú)立產(chǎn)生源代碼、HTML和報告,也可以與其他系統(tǒng)(或應(yīng)用)相結(jié)合提供模板服務(wù)1,4,5,7。之前有考慮過有freemaker,由于freemaker在性能上沒有velocity的好,所以最終還是采用了velocity作為我們系統(tǒng)的前端框架1,6。在開發(fā)前端的時候,我們封裝了一套前端框架,該套框架里JS處在核心地位,我們借助bootStrap框架,對JS進(jìn)行了二度封裝,就像JQuery,Ajax那樣,他的最終都是JS代碼,但是他的功能卻遠(yuǎn)遠(yuǎn)超出了JS,我們在進(jìn)行一系列操作的時候,經(jīng)常會遇到JS跨

8、域問題,JS緩存問題,AJAX請求問題,回調(diào)問題,我們開發(fā)出一套策略,如,JSONP。該策略在你引用JS時可以幫你注冊一個命名空間,以至于不會再出現(xiàn)JS跨域無法調(diào)用,以及調(diào)用多次等煩惱,當(dāng)然還有一系列功能,在此便不再一一贅述1,4,5,6,7。我們的后臺框架用了Spring,Struts2,但是我們與數(shù)據(jù)庫交互的并不是ibatis,我們研究了ibatis的原理后,自己寫了一套類ibatis,在此稱為ibatis like,簡稱為libatis,不管是持久層,還是數(shù)據(jù)層來說,這個框架我們最終目的希望是方便于程序員的,而hibernate注重的是效率,對程序員其實(shí)并沒有太大幫助,我們發(fā)現(xiàn)ibati

9、s其實(shí)對這一方面有了很大的補(bǔ)救,但是我們希望有自己的思想融入,比如link操作,我們很希望查詢語句,或者其他DDL語句而已被在此調(diào)用,就和面向?qū)ο笠粯?,這樣對程序員來說無非是個福音,所以我們對ibatis進(jìn)行了改進(jìn),開發(fā)出了一套libatis。以前遇到的數(shù)據(jù)層框架總是支持某種,或某一種數(shù)據(jù)庫語言,這就使得不同程序員之間寫SQL語句時都要統(tǒng)一某一種數(shù)據(jù)庫語言,比如ORACLE的,MySQL的,甚至DB2的語法不盡相同,但是這讓程序員很是頭疼,在此我們在系統(tǒng)開發(fā)出了這樣一套策略,不管任何程序員,只要你的SQL語句能在任何一個主流的數(shù)據(jù)庫語言上順利執(zhí)行通過,那么任何主流的數(shù)據(jù)庫都支持你的語句,甚至還

10、可以link過來,這就為開發(fā)節(jié)省了許多不必要的麻煩,在之后的更換數(shù)據(jù)庫操作時,只需要把數(shù)據(jù)庫指向和數(shù)據(jù)庫地址更改即可2,9,10。我們系統(tǒng)經(jīng)常會和其他系統(tǒng)對接,例如:CRM系統(tǒng),個貸系統(tǒng)等等。那么我們系統(tǒng)之間是通過什么方式進(jìn)行數(shù)據(jù)交換的呢,很多人會想到數(shù)據(jù)表,對,之前我們是通過中間庫的形式進(jìn)行數(shù)據(jù)交互的,但是我們發(fā)現(xiàn),當(dāng)連續(xù)對接3個系統(tǒng)以上,庫的空間就會很大,造成許多資源浪費(fèi)現(xiàn)象,于是,我們采用了當(dāng)下流行的一種形式,ESB傳輸。在面向SOA的架構(gòu)與應(yīng)用中,服務(wù)是基本的開發(fā)與管理對象。采用面向服務(wù)的架構(gòu)方法,就是為了利用服務(wù)這一企業(yè)IT資產(chǎn),靈活而快速地滿足不斷變化的業(yè)務(wù)需求。為了保證服務(wù)的有效

11、使用,增加服務(wù)的重用度和利用率,就必須建立統(tǒng)一的服務(wù)規(guī)范。服務(wù)規(guī)范包括服務(wù)的定義與確立,服務(wù)的封裝,服務(wù)的開發(fā),服務(wù)的應(yīng)用,服務(wù)的管理等各個環(huán)節(jié)進(jìn)行規(guī)范性約定2。我們針對ESB傳輸寫了一套接口,對方只需調(diào)用我們的webservice即可,我們會返回消息頭以及消息,報文詳見附錄2。我們系統(tǒng)上傳影像時并不是直接上傳到服務(wù)器,而是上傳到影像平臺,我們在ECM模塊里對錄音記錄,錄像記錄等影像記錄封裝成一個實(shí)體,我們上傳時只需將這個實(shí)體內(nèi)的影像進(jìn)行上傳即可。我們將話機(jī)內(nèi)的錄音以及錄制的錄像上傳到服務(wù)器的時候,我們采用了ZMQ技術(shù)3。Dive into A MQ (aka ZeroMQ), the sma

12、rt socket library that gives you fast, easy, message-based concurrency for your applications. With this quick-paced guide, you'll learn hands-on how to use this scalable, lightweight, and highly flexible networking tool for exchanging messages among clusters, the cloud, and other multi-system en

13、vironments. A MQ maintainer Pieter Hintjens takes you on a tour of real-world applications, using extended examples in C to help you work with A MQ's API, sockets, and patterns. Learn how to use specific A MQ programming techniques, build multithreaded applications, and create your own messaging

14、 architectures. You'll discover how A MQ works with several programming languages and most operating systems - with little or no cost. Learn A MQ's main patterns: request-reply, publish-subscribe, and pipeline Work with A MQ sockets and patterns by building several small applications Explore

15、 advanced uses of A MQ's request-reply pattern through working examples Build reliable request-reply patterns that keep working when code or hardware fails Extend A MQ's core pub-sub patterns for performance, reliability, state distribution, and monitoring Learn techniques for building a dis

16、tributed architecture with A MQ Discover what's required to build a general-purpose framework for distributed applications3。當(dāng)然我們還使用了ZMQ中間件技術(shù),我們的托盤在讀取話機(jī)內(nèi)的未上傳錄音時,會調(diào)用服務(wù)端的ZMQ接口進(jìn)行上傳,我們將文件封裝為消息隊列開始上傳,在托盤的日志里將會看到上傳行為的日志,上傳后,在我們的服務(wù)端日志里也能看到上傳信息。我們在本地開發(fā)使用的是tomcat,而在服務(wù)器上部署的是jndi配置,也就是用的是websphere,以下簡稱was,我

17、們在was上部署的上下文根為banger,也就是我們公司的英文縮寫,was是 IBM 的軟件平臺。它包含了編寫、監(jiān)視運(yùn)行全天候的工業(yè)強(qiáng)度應(yīng)變 Web 應(yīng)用程序和跨產(chǎn)品、跨平臺解決方案所需要的整個中間件基礎(chǔ)設(shè)施,如服務(wù)器、服務(wù)和工具。was提供了可靠、健壯和靈活的軟件。我們在解決JS跨域的時候使用了JSONP模式,采用該種模式可有效解決JS跨域問題。JSONP(JSON with Padding)是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題4。在服務(wù)器選擇方面,我們用了服務(wù)器集群模式,在連接方面,我們采用了連接池技術(shù),但是我們并沒有完全采用連接包,我們重寫了某些方面,比

18、如釋放等問題,在普通的連接池上并不是很明顯。我們的定時器采用的quartz,quartz可以有效的觸發(fā)定時任務(wù),通過簡單的配置文件,對時間和定時任務(wù)的配置,quartz就能在配置的時間啟動該任務(wù)。我們有以下模塊:Banger-framework-core:Banger-framework-component:Banger-framework-dao:Banger-framework-sql:Banger-framework-util:Banger-framework-web:Banger-product-core:Banger-product-monitor:Banger-product-pe

19、rmission:Banger-product-permissionIntf:Banger-biz-config:Banger-biz-configIntf:Banger-biz-desktop:Banger-biz-ecm:Banger-biz-ecmIntf:Banger-biz-generate:Banger-biz-system:Banger-biz-systemIntf:Banger-biz-talk:Banger-biz-talkIntf:Banger-biz-video:Banger-biz-videoIntf:Banger-common:Bannger-domain:Bange

20、r-esb:Banger-extra-interface:Banger-jsbc:Banger-tools-setup:Banger-tools-test:Banger-web:所有以banger-framework-開頭的都是我們系統(tǒng)封裝的框架,利用系統(tǒng)模板以及sql操作等等,所有以banger-biz-開頭的都是在頁面里能夠直接展現(xiàn)的模塊,banger-common屬于通用模塊,banger-domain存著我們的業(yè)務(wù)實(shí)體,banger-esb用于esb通信傳輸,banger-extra-interface屬于我們開放的接口,banger-jsbc屬于江蘇銀行的webservice接口,b

21、anger-tools只是針對單元測試而使用的,banger-web里都是前端的封裝。我們每個模塊都會有一個intf,這是用于外界調(diào)用的接口,我們用spring進(jìn)行配置,他們并不能直接訪問我們的類,只能調(diào)用接口,我們在實(shí)現(xiàn)模塊里由action,service,dao以及webservice組成,并且還會有一個sqlMAP,sqlMAP的作用是將sql語句配置為ID,給dao調(diào)用,我們讀取SQLID就能執(zhí)行該條sql語句。我們管理系統(tǒng)日志采用的是log4j技術(shù),它是一個非常強(qiáng)大的日志記錄軟件。我們在讀取xml文件時采用的是dom4j技術(shù),它用來讀取xml非常方便,推薦大家可以去試一試。在項目ja

22、r包管理工具上面,我們采用的是maven幫我們管理著倉庫包,只要理清依賴關(guān)系,用maven真的是一個不錯的選擇,至少我是這么認(rèn)為的,使用maven可以有效的管理jar包,這得歸功于apache這些年所做的一些事,maven就是其中一件,我在此用pom文件將各個項目之間調(diào)用配置好。我們服務(wù)端大致就是開發(fā)了這些,接下來我們可以說說客戶端的托盤都進(jìn)行了哪些開發(fā):首先我們在話機(jī)設(shè)計之初就制定了一套話機(jī)通信協(xié)議,很抱歉,由于專利性,該協(xié)議不予公開,敬請諒解,話機(jī)通過USB與電腦連接,我們針對USB開發(fā)了專門用于話機(jī)與電腦USB口通信的協(xié)議,我們的托盤會自動捕獲話機(jī)的行為,例如撥號,我們的托盤可以直接操作

23、硬件,它采用的是Dephi語言編寫的一套系統(tǒng),目前托盤版本已升級到版本,較過去版本有了明顯的提升,當(dāng)客戶端撥號時,調(diào)用的是我們的一套封裝好的JS,該JS文件可以提供源碼,但不可用于公網(wǎng)傳播,謝謝合作,我們在實(shí)際操作中會用到撥號,接聽,錄像等一些功能,只要觸發(fā)了這些事件,回調(diào)里就會通知托盤,我們在此用了http長連接技術(shù),http是無狀態(tài)的,每次任務(wù)結(jié)束就中斷鏈接,由于通話會隨時發(fā)生,我們必須建立這樣的連接來保持一直進(jìn)行通信,這樣就能確保第一時間對通話做出反應(yīng)。4.1.1 系統(tǒng)結(jié)構(gòu)圖login.vmdeskTop.vm數(shù)據(jù)庫 查詢記錄L 增加記錄 刪除記錄 。托盤圖4-1 系統(tǒng)結(jié)構(gòu)

24、圖從系統(tǒng)的功能分析以及設(shè)計文檔可以畫出系統(tǒng)結(jié)構(gòu)圖,分別從系統(tǒng)的錄音管理,視頻管理,話機(jī)設(shè)置,傳輸配置,系統(tǒng)配置,系統(tǒng)監(jiān)控,上傳影像,影像調(diào)用,托盤等幾個模塊加以描述。4.1.2 系統(tǒng)模塊參照系統(tǒng)功能設(shè)計文檔4.2 前臺系統(tǒng)實(shí)現(xiàn)前臺系統(tǒng)采用了bootStrap,以及jQuery,CSS,Velocity等框架與技術(shù),考慮到銀行機(jī)子受IE6的限制性,我們原本采用html5的念頭也已撤銷,我們對bootstrap進(jìn)行重寫以及改進(jìn),性能和效率以及一些功能的實(shí)現(xiàn)上更高效,我們在處理jQuery對象時并不會用$去取對象,原因很簡單,我們經(jīng)常會和其他系統(tǒng)做對接,很多系統(tǒng)自己封裝了一套jQuery模板,那么我

25、們在用$取jQuery對象時往往會出現(xiàn)沖突,我們自定了一些符號用來請求,我們在處理ajax請求時使用了jsonp技術(shù),因為我們經(jīng)常會跨域進(jìn)行異步提交,舉個簡單的例子,我在主頁面上彈出一個非模態(tài)的窗口,我在非模態(tài)窗口中插入一條數(shù)據(jù),那么在另一個模態(tài)窗口里就會更新當(dāng)前的列表,并且不會刷新多余的空間,那么ajax本身是沒辦法進(jìn)行提交請求了,因為不在同一個模態(tài)窗口中,JS本身做不到請求交互,所以我們引用了jsonp技術(shù),解決了跨域問題,前臺與托盤之間要進(jìn)行實(shí)時通信,我們都知道,http是無狀態(tài)的,什么是無狀態(tài),就是你要主動觸發(fā),它就執(zhí)行,執(zhí)行完就斷開,但是這樣就造成一個困擾,對托盤的回調(diào)不起作用,比如

26、通話來了,托盤在回調(diào)里通知http應(yīng)該響應(yīng),但是http這時是關(guān)閉狀態(tài),它并不知道你請求了它,所以在此我們引入了http長連接技術(shù),這樣http一直都處在連接狀態(tài),能隨時接收回調(diào)函數(shù)里的請求,不過,這其中可能會涉及到安全性的問題,在此,我想說明一下,這個系統(tǒng)運(yùn)行環(huán)境純粹是在內(nèi)網(wǎng)中進(jìn)行的,所以安全性暫時可以不加考慮1,4,5,6,7。我們在前端還需要涉及到播放的功能,那么我們得寫個播放器,用后臺寫有幾個劣勢,第一個,就是加載速度過慢。還有就是當(dāng)多個客戶端同時請求播放時,服務(wù)端是否能接受的了并發(fā)性,這受制于客戶的運(yùn)行環(huán)境,所以我們最終還是采用了前端播放的方式,我用js封裝了一套前端音視頻播放器,內(nèi)

27、核采用mediaPlayer,外皮用js封裝1,5,6。4.3 界面展示4.3.1 用戶登陸圖4-3 用戶登陸圖4.3.2 主界面圖4-4 主界面圖4.3.3 錄音記錄圖4-5 錄音記錄圖4.3.4 視頻記錄圖4-6 視頻記錄圖4.3.5 鈴音配置圖4-7 鈴音配置圖4.3.6 通話白名單圖4-8 通話白名單圖4.3.7 中轉(zhuǎn)站設(shè)置圖4-9 中轉(zhuǎn)站設(shè)置圖4.3.8 IP 段設(shè)置 圖4-10 IP段設(shè)置圖4.3.9 IP限流設(shè)置 圖4-11 IP限流設(shè)置4.3.10 話機(jī)升級圖4-12 話機(jī)升級圖4.3.11 流量監(jiān)控圖4-13 流量監(jiān)控圖4.4后臺系統(tǒng)實(shí)現(xiàn)后臺系統(tǒng)采用Spring+Struts

28、2+ibatis like+DB2/ORACLE等等,后臺又分為設(shè)計與編碼,設(shè)計階段,我們根據(jù)需求說明書(詳見附件1)整理出設(shè)計文檔(詳見附件3),再將表以及索引,存儲過程進(jìn)行建立,我們的模塊是配置級的,也就是代碼分工比較清晰,我們有一個Domain模塊專門用來存放實(shí)體以及注入實(shí)體字段的sqlMap,我們只需注入到pom文件即可,那么我們比較簡單的做法是自己寫一個代碼生成器,將某幾張表映射到該模塊代碼中,包括之后的dao,service我們可以采用這種方式來生成,省去開發(fā)時間,我們會將更多的工作放在action和webservice上,應(yīng)為這個是與業(yè)務(wù)息息相關(guān)的,當(dāng)然最難的工作還是在表的設(shè)計上

29、,我們在滿足范式的同時,又需要進(jìn)行優(yōu)化,表設(shè)計的好,在之后的開發(fā)中編碼量會大大的降低,我們對每一個會被外界(其他系統(tǒng))調(diào)用到的模塊生成一個接口,其他系統(tǒng)只需調(diào)用接口即可,那么我們經(jīng)常會遇到兩個或兩個以上的模塊進(jìn)行一個或多個功能的實(shí)現(xiàn),我們的spring配置文件應(yīng)該寫在哪,很多人一般都會直接寫在某個模塊下,反正最終能調(diào)用到,但是這并不沒有解耦,反而是增加了模塊之間的復(fù)雜關(guān)系,我們一般采用的做法是用IOC反向注入原則,通過反向注入將其他模塊的功能變成一個接口化的調(diào)用,這樣就能大大降低耦合性。我們的dao和service都是單例模式的,初始時只被調(diào)用一次,只有action和webservice不是單

30、例的。Struts2和市面上的基本都相同,只是我們業(yè)務(wù)復(fù)雜性不同,所以我們在攔截器以及項目管理上可能用的較為頻繁。我想重點(diǎn)介紹的是ibatis like + DB2/ORACLE,為什么我要把數(shù)據(jù)庫和ibatis放在一起講呢,可能有人會說ibatis本身就是處理數(shù)據(jù)庫與java交換數(shù)據(jù)的,但是你只說對了一半,至于ibatis like是如何得名,這得益于linux,在早期時候,linux被稱為Unix like,廢話不多說,我們都知道現(xiàn)在ibatis流行程序已經(jīng)遠(yuǎn)遠(yuǎn)大于hibernate,這又是什么原因,hibernate是持久層框架,說白了,它是為用戶做準(zhǔn)備的,而ibatis是訪問層框架,這

31、是為程序員做準(zhǔn)備的,一個方便于用戶,一個方便于程序員,在開發(fā)人員看來,對于現(xiàn)在的設(shè)備,網(wǎng)絡(luò)來說,這是微不足道的,而省去的開發(fā)成本是所有人都期望看到的,我們對ibatis進(jìn)行了一些重寫,重寫后兼容了市面上流行的一些SQL,如oracle,db2,mysql等,只要開發(fā)人員會其中一門SQL,那么你就能進(jìn)行開發(fā),并且不需要兼容性調(diào)試,只要你的sql能在一個sql平臺上運(yùn)行,那么基本所有主流的sql平臺都能執(zhí)行,這是我們封裝這套ibatis的核心技術(shù),還有一些例如link功能,比如,我這條sql想用之前查過的,插入的,更新的一些數(shù)據(jù),可以link過來進(jìn)行復(fù)合查詢8,10。5. 運(yùn)行維護(hù)手冊詳見附錄46

32、. 設(shè)計總結(jié)評價 在做這個項目的時候,當(dāng)中遇到了一些問題,比如oracle在9.6版本之前遇到一個時間處理問題,比如系統(tǒng)時間是2015年5月10號,我們在今天插入了很多數(shù)據(jù),結(jié)果因為某些原因我重啟了服務(wù)器,服務(wù)器的時間被初始化了,那么服務(wù)器的時間成為2011年1月1日08:00:00,oracle在查今天插入的記錄時發(fā)現(xiàn)查詢不到,這是為什么呢,后來經(jīng)過我們的研究發(fā)現(xiàn),原來oracle在9.6版本之前有個查詢條件,即where INSERT_TIME<=LOCAL_TIME,但是我們在查詢的時候加上模式,就查出來了,這又是為什么呢,原來,oracle數(shù)據(jù)庫軟件在查詢的時候一定會拼接上自己的

33、條件,如果是模式,那么就忽略時間,如果沒有模式,那么就會加上時間進(jìn)行處理,至于這個問題我們是怎么解決的呢?俗話說,辦法總比問題多,問題定位到了,就不難了,所以,我們有許許多多的解決辦法,比如,升級數(shù)據(jù)庫版本,但是這種方式并不是所有人員和設(shè)備都希望配合的,但是我們有一個原則,那就是發(fā)現(xiàn)問題決不能以補(bǔ)洞的方式一直讓問題存在,只是去彌補(bǔ)它,所以我們將服務(wù)器的時間改回來,在錯誤的時間里產(chǎn)生的所有記錄時間全部給改回來,從這之后這個問題就不算問題了9。當(dāng)然我們還遇到其他形形色色的問題,比如,boolean isRoot ;isRoot = true/false,這樣的語法在maven2.0之后編譯是穩(wěn)穩(wěn)的

34、通過的,但是在maven2.0的時候竟然神器般的無法通過,我們單純從此類來說,肯定不存在java語法錯誤,但是我們可以想象,maven是怎么管理這些類的,maven是傳遞性的,我們通常會看到很多項目里引入這個jar包,那么如果兩個項目是同時執(zhí)行,isRoot這個方法最初是在一個父類上,其中某個子類繼承了某些方法,有一個類調(diào)用了父類和子類,isRoot就陷入了深淵,我得按照加載順序來判斷isRoot到底是true還是false,答案不得而知,而解決辦法是,寫個setRoot方法即可,子類就等于是說重寫了父類的方法,那么其他類調(diào)用時只會加載子類重寫后的方法,而不會在此去調(diào)用父類的setRoot(),這里也用了java的懶惰加載機(jī)制。窗體頂端:在這里,需要著重說明的是,JVM在加載類時默認(rèn)采用的是雙親委派機(jī)制。通俗的講,就是某個特定的類加載器在接到加載類的請求時,首先將加載任務(wù)委托給父類加載器,依次遞歸,如果父類加載器可以完成類加載任務(wù),就成功返回;只有父類加載器無法完成此加載任務(wù)時,才自己去加載。關(guān)于虛擬機(jī)默認(rèn)的雙親委派機(jī)制,我們可以從系統(tǒng)類加載器和標(biāo)準(zhǔn)擴(kuò)展類加載器為例作簡單分析。窗體底端:在這里,需要著重說明的是,JVM在加載類時默認(rèn)采用的是雙親委派機(jī)制。通俗的講,就是某個特定的類加載器在接到加載類的請求時,首先將加載

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論