J2EE課程設計《項目開發指導》——第3章 達到高內聚低藕合的架構設計目標(第2部分)_第1頁
J2EE課程設計《項目開發指導》——第3章 達到高內聚低藕合的架構設計目標(第2部分)_第2頁
J2EE課程設計《項目開發指導》——第3章 達到高內聚低藕合的架構設計目標(第2部分)_第3頁
J2EE課程設計《項目開發指導》——第3章 達到高內聚低藕合的架構設計目標(第2部分)_第4頁
J2EE課程設計《項目開發指導》——第3章 達到高內聚低藕合的架構設計目標(第2部分)_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、楊教授工作室 精心創作的優秀程序員 職業提升必讀系列資料第3章達到高內聚低藕合的架構設計目標(第2/3部分)1.1 面向切面的系統架構設計面向切面編程aop(aspect oriented programming)技術可以解決傳統的面向對象編程oop(object oriented programming)中不能夠很好地解決的橫切(crosscut)方面的問題比如在應用系統中所經常需要解決的如事務、安全、日志、緩存和并發訪問中的鎖定等問題都屬于應用系統中的“橫切”關注方面的問題。圖3.13 j2ee系統平臺中推薦的多層體系架構通用的分層圖示對于“aop 和 spring aop技術”等有關的編

2、程實現的細節內容,作者已經在“j2ee項目實訓spring框架技術”一書中的第6章“aop 和 spring aop技術”和第7章“spring aop中的advice通知”作了比較詳細的介紹。作者在此更多地是從軟件系統架構設計的角度介紹如何應用面向切面的主要思想完成系統的架構設計,而不再在代碼實現層次重復地介紹面向切面編程技術。1.1.1 面向切面架構設計是對面向對象架構設計的進一步擴展和完善1、面向對象的架構設計方法更擅長解決“縱向”和“核心和外圍”關系的問題面向對象的架構設計方法基于對象之間存在有一定的相互關系的指導思想,對軟件系統進行各個層次的“封裝”和“隔離”,并產生出各個相關聯的功

3、能模塊。并輔助于消息的交互機制來模擬應用系統所要解決的問題領域中真實的實體的工作狀態。因此,面向對象的架構設計方法在解決應用系統中具有一定關系(如縱向繼承、橫向依賴和關聯、內外組合)的問題時,顯示出了其強大的能力。對此,讀者通過學習本章第一節“面向對象的架構設計”中的有關內容,應該有所體會!2、面向切面架構設計方法擅長解決有“橫跨”關系的問題在軟件系統的體系架構設計中,各個功能模塊之間不僅存在有縱向繼承、橫向依賴和關聯、內外組合等形式的關系,也還可能會出現某個功能模塊“橫跨”或者“散落”在應用系統中多個其他功能模塊的狀況也就是在軟件系統中的多個不同的功能模塊中都“滲透”有某個相同的功能模塊的代

4、碼。比如應用系統中的“安全功能”模塊,不僅需要在各個業務功能模塊(控制和授權)中出現,而且也需要在系統的表示層功能模塊(身份驗證)中出現如果沒有對頁面的url地址進行訪問權限的控制,用戶只要輸入該頁面的url地址就能進入到web應用系統中的任何功能頁面;對于應用系統中的“交易日志”記錄功能模塊,不僅需要在各個業務功能模塊中出現,而且也需要在應用系統的持久層中的功能模塊中出現。請見下圖3.14中的功能需求圖示。圖3.14 某應用系統中的“安全功能”模塊的功能需求圖示對于這些跨越多個系統功能模塊的“共同功能行為”如何實現“封裝”和“隔離”?如果繼續應用面向對象的架構設計方法將不可避免地導致“共同功

5、能行為”的實現代碼重復地出現在應用系統的不同功能模塊中如果應用繼承機制進行功能擴展,當父類的程序代碼發生變化被修改后,所有依賴于該父類的各個子類的程序代碼也都有可能要修改和重新進行功能測試。當然,設計人員可以應用代理模式和java中的反射等技術改善這種重復代碼實現的狀況,但這并不是根本的解決方法,而且代理和反射的技術實現是比較復雜的。此時,設計人員應該應用面向切面的設計思想實現“封裝”和“隔離”共同功能行為的程序模塊。3、面向切面架構設計是對面向對象架構設計的進一步擴展和完善正是由于軟件系統中的各個功能模塊在縱、橫兩個維度上都可能存在一定的關系,因此設計人員在軟件系統的架構設計中不能僅僅將關注

6、點停留在應用系統的縱向和內外的“封裝”和“隔離”方面,也還要關注橫向跨越形式的功能模塊的“封裝”和“隔離”問題的解決方案的設計。因此,設計人員應用面向對象架構設計方法完成系統中的縱向和內外關系的功能模塊的“封裝”和“隔離”設計,同時再應用面向切面架構設計方法完成橫跨形式的功能模塊的“封裝”和“隔離”。從這一角度來看,面向切面架構設計是對面向對象架構設計的進一步擴展和完善、并且兩者是相互配合和相互補充。下圖3.15所示的uml組件圖是對前面的圖3.9組件圖進一步完善后的設計結果的圖示,應用面向切面的設計思想將應用系統中表示層中的“身份驗證”和“頁面緩存”、業務 層中的“控制和授權”、持久層中的數

7、據訪問的“日志記錄”和“事務控制”等功能模塊從原有的應用系統功能模塊中分離出來以形成獨立的功能組件。圖3.15 對前面的圖3.9組件圖進一步完善后的設計結果的圖示1.1.2 面向切面架構設計在j2ee平臺中的具體實現和應用面向切面所倡導的橫向分離解藕的設計思想其實在j2ee技術平臺中早已經被應用了,并且在遵守j2ee規范的容器中也已經具體地實現了。因為,在企業應用系統的開發中,事務機制、安全機制、對象緩存等都是企業應用系統中的通用應用要求,而對這些功能的實現沒有必要由應用系統的開發者重復地進行功能實現。并且對這些功能的設計和開發實現是有一定的技術難度、并需要時間調試和運行經驗的積累。因此,有必

8、要將這些通用的基礎功能服務從具體的應用系統中分離出來,而專門由應用服務器平臺加以實現和提供,并形成了專門的j2ee容器服務的規范。1、面向切面思想在j2ee web 過濾器組件中的應用(1)j2ee web技術中的過濾器(filter)組件web過濾器是一種j2ee web 組件,它攔截用戶通過瀏覽器發出的請求輸入和后臺服務器程序的響應輸出,以便查看、提取或以某種方式操作正在客戶機和服務器之間交換的http請求數據。應用web過濾器技術同樣也能夠達到aop所倡導的分離“技術問題實現”和“業務問題實現”的設計效果。因此,在web 應用系統的開發中可以將日志記錄、安全驗證和會話處理等有關應用系統中

9、的“技術問題實現”的功能代碼放在過濾器組件中,這樣在業務層中將不需要再重復地編程這些功能實現代碼。但web過濾器技術只適用于web表示層中的url地址的攔截,而無法實現對業務層或者持久層等系統底層的組件中的方法進行攔截,因此在應用方面是有一定的限制;而應用aop的某種具體實現如spring aop中的攔截器組件不僅可以實現對url地址的攔截(通過監控控制層如servlet組件或者struts系統中的 action類中的方法),也可以實現對業務層或者持久層等應用系統底層的組件中的方法進行攔截。(2)j2ee web技術中的監聽器(listener)組件在web應用系統的開發中,還可以部署一些特殊

10、的servlet組件類,通過它們從而實現對web應用中的上下文信息、會話信息等的監聽,最終實現在服務器后臺自動地完成某些特定的應用功能。比如,實現servletcontextlistener接口的監聽器組件可以在web應用系統的啟動和關閉時插入附加的功能行為實現,同樣實現httpsessionlistener接口的監聽器組件可以監控用戶的會話狀態,在會話開始或者結束時插入附加的功能行為實現。而這些附加的功能實現代碼并不需要直接包含在各個業務功能處理代碼中,兩者相互分離、并且可以動態地配置改變。2、struts2框架也是基于面向切面原理設計和實現的struts2框架是對open symphony

11、社區開發的webwork框架的升級,而不是對apache struts1.x版架構的struts框架的升級。雖然struts2框架提供了與基于struts1.x版架構的原有struts框架的兼容,但已經不是簡單地對它的升級。因為目前的struts2框架與原先的struts框架有著完全不同的系統架構設計和api類庫。而在struts2框架中大量地應用了攔截器組件技術在系統后臺為應用系統提供許多附加的功能實現,這包括表單屬性注入和驗證、類型轉換和國際化等方面的技術支持。并且也允許開發人員自定義自己特殊功能的攔截器組件,而這些攔截器組件背后的基本思想和技術實現其實就是對面向切面設計思想和原理的具體應

12、用。3、spring框架通過ioc簡化實現aopspring框架完整地提供對aop技術的具體實現,而且是通過spring框架中的控制反轉ioc模式來實現aop技術,當然它也借助了java語言中的動態代理和反射等方面的技術。因此,如果在應用系統的設計中應用了spring框架來創建應用系統中的各個對象實例和管理各個對象之間的關系,則應用系統本身在系統架構設計方面就具有一定的解藕能力,從而也就能夠保證應用系統的架構設計結果是具有良好的可擴展性和可重用性。但開發人員對spring aop技術中的方面(aspect)組件的編程開發則變成對通知組件(在spring中稱為advice)的開發aop攔截器,這

13、些攔截器組件可以在任何對象的方法調用前/后加入開發者自定義的行為;并且在spring aop的實現規范中,為開發人員提供了四種不同形式的通知組件的接口定義。它們分別是methodinterceptor接口(環繞通知advice)、methodbeforeadvice接口(前置通知advice)、throwsadvice接口(異常advice)、afterreturningadvice接口(后置通知advice)和introductioninterceptor接口(引入通知advice)。另外,在spring框架中還通過aop機制為開發人員提供了多種不同形式的通用技術服務功能的支持如聲明方式的事

14、務(transaction)控制、代碼調試(debug)、類加載分析和并發控制、簡單的性能監控等功能支持。4、acegi是基于spring框架的一個開源的安全認證框架對于一個典型的web應用,完善的認證和授權機制是必不可少的,而acegi(acegi security system for spring,基于spring框架實現的安全框架)則為j2ee web應用系統的開發者提供了一個web應用安全的完整解決方案,并提供了一些缺省的實現和允許開發者根據具體的應用需求進行相應的功能擴充。由于acegi是基于spring框架實現的,所以可以和現有的基于spring框架的應用系統相互集成。當然,它也

15、可以和其他j2ee web應用系統進行集成。實現認證和授權最常用的方法是通過j2ee web過濾器(filter)組件,acegi亦是如此、并且也是基于aop的設計思想實現的。讀者可以在/網站中獲得與acegi有關的技術文檔幫助和系統jar包文件,請見下圖3.16所示的acegi官方網站中對acegi的介紹內容。圖3.16 acegi官方網站中對acegi的介紹內容5、面向切面思想在hibernate框架中的應用hibernate框架通過其事件框架允許應用程序在系統的持久層功能實現中能響應特定的內部事件,從而實現某些通用的功能或者對hibernat

16、e框架本身的功能進行擴展。hibernate框架中的事件框架主要是由監聽器和攔截器技術兩個部分所組成。(1)hibernate框架中的攔截器技術hibernate框架中的攔截器機制是對spring框架中所支持的業務層類對象實例管理容器中的通知(advice)形式的攔截器機制的有益補充,使得開發人員可以在更低層次(如系統的持久層中)上應用aop的設計思想。攔截器組件技術為開發人員提供了從會話(session)回調(callback)應用程序(application)的機制,這種回調機制可以允許應用程序在持久化對象實例被“保存”、“更新”、“刪除”或是“加載”操作之前,開發人員能夠檢查并(或)修改

17、持久化對象實例中的有關成員屬性的值。(2)hibernate框架中的監聽器技術在hibernate框架中不僅應用面向切面的設計思想為開發人員提供了攔截器組件技術的支持,也還提供有監聽器技術它可以替代攔截器或者作為攔截器的功能補充來使用。hibernate框架api中的session接口的每個方法都提供有對應的事件比如loadevent和flushevent等。當session接口中的某個數據訪問方法被調用時,hibernate框架中的事件處理機制會生成對應的事件,并激活對應的事件監聽器。因此,在應用系統的持久層開發實現中,可以應用hibernate中的監聽器來生成審計日志審計主要是對數據庫中重

18、要數據的更新歷史進行記錄。盡管數據庫系統中所提供的觸發器技術也可以用于生成審計日志,但是它不支持跨數據庫平臺的功能要求,所以一般采用hibernate框架中的監聽器實現這樣的功能。1.1.3 基于面向切面思想的系統架構設計實現交易日志示例1、面向對象設計中的“開-閉”(ocp,open-close principle)原則隨著軟件系統的規模不斷地增大,從而對軟件系統的維護和修改帶來一定的復雜性,這種困境促使bertrand meyer在1998年提出了“開放封閉”原則。該原則要求軟件系統的開發人員可以在不修改系統中現有的功能代碼的前提下(不必改動源代碼或者二進制代碼、模塊的二進制可執行版本,無

19、論是可鏈接的庫、dll或者java的.jar文件,都無需要改動),而實現對應用系統的軟件功能進行功能擴展。2、基于面向切面思想的系統架構設計實現能夠更好地滿足“開-閉”原則aop的本質其實是實現分散關注的編程方法所謂的分離關注就是要將應用系統中某一通用的需求功能從不相關的各個模塊中分離出來,同時也能夠使得其他的功能模塊共享這個通用的功能實現代碼。由于aop也同樣倡導“封裝”和“分離”,因此基于面向切面思想的系統架構設計實現結果的可擴展性高。基于面向切面思想的系統架構設計實現能夠更好地滿足“開-閉”原則,因為aop技術的具體實現手段是應用攔截器組件、并且各個攔截器組件可以相互串接組合成為更復雜功

20、能的組件。當應用系統的需求發生變化,可以通過替換原有的攔截器組件或者添加新的攔截器組件的方式適應需求的變化。3、在銀行賬戶信息管理系統中基于面向切面思想設計和實現交易日志示例(1)系統需要提供對業務交易日志記錄的功能銀行賬戶是開展各項金融業務的基礎,是一切金融交易的門檻,不論什么樣的金融交易,只要通過銀行,都表現為資金從一個賬戶到另一個賬戶的轉移,都會在賬戶記錄中留下痕跡。讀者對金融行業中的日志記錄的重要性也應該有所了解,通過采用交易日志機制等,加強內部制約和監督、審計,提高了銀行業務數據的安全性。 為了事后的業務審計和跟蹤,有必要對每次的賬戶變化的情況進行詳細的記錄,也就是需要對業務交易的過

21、程和結果進行日志記錄。但對賬戶信息跟蹤的技術實現本質是監控對數據庫系統的訪問,也就是對數據庫表中的記錄的增、刪、改和查等方面的功能操作。(2)業務交易日志記錄的數據格式 為了能夠準確地反映每次的賬戶信息的變化狀況,初步規定業務交易日志記錄的數據格式為下面的各個屬性字段:交易時間、訪問者的ip地址、操作員的工號id、操作結果的狀態(成功或者失敗)、操作動作(增加、修改還是刪除)、交易類型(存錢、取錢還是轉賬)、失敗原因說明、具體交易的各種業務數據。 (3)將業務交易日志記錄的功能單獨設計為一個模塊為了避免在各個業務功能模塊中直接藕合和重復地編程實現業務交易日志記錄的功能代碼,在系統的架構設計方面

22、應用面向切面思想,業務交易日志記錄的功能單獨設計為一個模塊交易日志記錄攔截器組件。當某個業務功能類的具體業務方法執行后,通過aop所倡導的后置形式的交易日志記錄攔截器組件實現在交易操作成功或者失敗時都進行記錄。交易日志的記錄行為主要是依據被攔截的業務對象中的特定的業務處理方法和有關的交易數據。在執行業務對象中的特定業務處理方法體后,識別業務方法的操作結果的狀態(成功或者失敗)。如果交易成功執行后,則記錄交易成功有關的日志信息;如果交易執行過程中拋出異常,則記錄交易失敗有關的日志信息。 1.1.4 基于面向切面思想的系統架構設計實現事務控制示例1、事務控制技術能夠保證數據訪問的一致性在企業應用系

23、統的開發實現中,單用戶操作的應用系統越來越少了,基本上都是多用戶并發操作和并發訪問數據庫表中的數據。在這種情況下,要想保證業務的正常進行,保證數據庫訪問中的各種業務數據的一致性是關鍵。比如在銀行賬戶系統的轉賬功能實現中,如果技術實現不合理將會造成一個儲戶賬號中的資金減少了,而另一個儲戶賬號中的資金卻沒有增加。保證數據庫表中的數據一致性需要對多儲戶并發訪問數據庫進行合理的調度和控制,調度和控制的基本單位是應用事務控制技術。下圖3.17為保證轉賬功能的正確性的事務控制技術的圖示。圖3.17為保證轉賬功能的正確性的事務控制技術的圖示由于事務是儲戶對賬戶數據庫表中的數據訪問操作的序列集,并且事務具有a

24、cid四個方面的特性(分別代表不可分割性atomicity、一致性consistency、隔離性isolation和穩定性durability)。因此,合理地應用事務控制技術能夠保證業務處理過程中的數據一致性和業務邏輯的正確性。2、jdbc api中也提供對事務控制技術的支持與通過某種特定的數據庫系統中的存儲過程實現事務處理控制相比,jdbc事務處理技術可實現應用系統與物理數據庫系統的分離,增強應用系統的獨立性。在基于jdbc的應用開發中,事務的啟動是由jdbc驅動程序自動完成的,而事務的終止則可以是自動完成也可以是由開發人員在代碼中手動實現。事務到底是自動終止還是手動終止這要取決于數據庫連接

25、對象中的自動提交狀態的值是為true還是為false。jdbc中的事務特點主要體現在:打開一個數據庫連接對象(connection)時,缺省是自動提交(auto-commit)模式。也就是說,一條對數據庫的更新sql語句代表一項事務操作,操作成功后,數據庫系統將自動調用commit()來提交,否則將調用rollback()來回滾。因此,為了能將多個sql語句組合成一個事務,需要將自動提交(auto-commit)模式屏蔽掉。但jdbc api只支持本地事務((local transaction))針對單個數據庫為目標的操作,而不支持分布式事務處理的要求此時應該要采用java事務api (jta

26、,java transaction api)。3、基于jdbc api事務控制實現的代碼示例在基于jdbc api的事務控制實現的開發中,可以通過調用connection 類中的setautocommit(false)來禁止自動提交;之后就可以把多個數據庫操作的sql語句作為一個事務,在數據庫訪問操作完成后再調用commit()方法來進行整體的提交,倘若其中一個sql語句操作失敗,都不會執行commit()方法,并且將產生響應的異常;此時就可以在異常捕獲時調用rollback()方法進行回滾恢復修改的數據。下面的【例3-1】所示的程序為一個基于jdbc api事務控制實現的代碼示例,請讀者注意

27、其中以黑體標示的語句。【例3-1】基于jdbc api事務控制實現的代碼示例public boolean insertoneuserinfo(userinfopo oneregisteruserinfo) throws webbbsexceptionstring insertuserinfosql=insert into userinfo values(?,?,?,?,?,?,?,?);string insertusercontactinfosql=insert into usercontactinfo values(?,?);tryconnection conn =drivermanager

28、.getconnection(url,username,userpassword);con.setautocommit(false);preparedstatement pstmt1 = con.preparestatement(insertuserinfosql);/ 參數賦值代碼,在此省略pstmt1.executeupdate();preparedstatement pstmt2= con.preparestatement(insertusercontactinfosql);/ 參數賦值代碼,在此省略pstmt2.executeupdate();mit();catch(sq

29、lexception e)trycon.rollback();catch(sqlexception ex)/ 異常處理代碼,在此省略finallytrycon.setautocommit(true);catch(sqlexception e)/ 異常處理代碼,在此省略return true;基于jdbc api事務控制實現是針對同一個數據庫連接對象完成的,也就只適用對單一數據庫訪問的應用系統中,而不適用于多數據庫訪問的應用系統開發中此時應該要應用分布式事務控制實現技術jta。4、基于jdbc api事務控制實現的代碼所反映出的問題由于需要在多個不同的數據訪問組件提供事務控制,如果采用常規的jd

30、bc事務實現方式將不可避免地會在不同的數據訪問組件中重復地出現【例3-1】中的黑體部分的代碼;而且事務控制的代碼與具體的數據庫表數據訪問的dao代碼相互交合在一起,代碼的維護和修改都是比較困難的。為此,設計人員應該要重構應用系統中的事務控制實現,并分離事務控制實現代碼與具體的數據訪問代碼。5、在賬戶管理系統中基于面向切面思想設計和實現數據訪問中的事務控制spring框架中為應用系統提供了聲明形式和編程形式的事務控制技術的支持,開發者可以應用spring框架中對 aop技術的支持實現事務控制它可以在一個應該具有事務控制的方法調用前開始一個事務,在該方法返回時提交或者回滾事務。當然,如果項目中沒有

31、應用spring框架,其實也可以采用java 語言中的動態代理技術實現分離。所謂的動態代理類是指在程序運行時,運用java 語言中的反射機制動態創建出。但該動態代理類需要實現invocationhandler接口,然后借用jdk反射包中的proxy類為各種接口動態生成相應的代理類。動態代理類的字節碼在程序運行時由java反射機制動態生成,無需程序員手工編寫它的源代碼。動態代理類不僅簡化了編程實現工作,而且也提高了軟件系統的可擴展性,因為java 反射機制可以生成任意類型的動態代理類。但動態代理類必須要實現java.lang.reflect.invocationhandler接口,并在實現的in

32、voke方法中完成其代理功能的實現。1.1.5 基于面向切面思想的系統架構設計實現性能監控示例1、在企業應用系統的后臺管理中提供性能監控功能的必要性對于web應用系統由于涉及高并發訪問等方面問題,因此許多企業應用系統的管理者希望能夠了解web應用系統在實際運行中的性能狀況和用戶對應用系統具體訪問的情況,由此期望能夠在應用系統中提供有性能監控和訪問分析功能。方便系統的管理者查找系統的性能瓶頸和及時對應用系統進行性能調優。其實在操作系統(如windows操作系統)和j2ee應用服務器平臺軟件(如bea公司的weblogic)中都提供有實時監控系統本身性能的工具程序。企業應用系統的開發者只需要開發實

33、現與企業業務管理有關的系統本身的性能監控系統。2、web應用系統中的性能監控工具的主要功能一個企業級的web應用系統,在性能監控和訪問分析方面的功能要求一般包括以下兩個方面的要求。(1)與業務有關的各種性能項目由于不同的企業應用系統的業務類型和關注點是不相同的,因此作者在此也無法進行具體的指導。但一般應該要提供如按業務類型進行性能分析和數據顯示、實時流量監控和流量分布分析、訪問狀況分析等方面的功能。(2)與應用系統程序本身運行過程中有關的各種性能項目開發人員在系統程序的編程開發中進行會出現各種資源未釋放等方面的漏洞,如數據庫連接、文件流對象和應用hibernate框架時的session對象等未

34、釋放,同時也有可能出現過多的對象創建而導致系統程序在高并發訪問的狀況下出現性能低下,嚴重的則會造成應用系統出現運行時錯誤。因此,應用系統中的性能監控工具也應該還要監控這些方面的情況以及時了解系統本身的運行狀況,保證企業應用系統穩定正常地運行而不影響企業的業務工作的開展。3、web應用系統中的性能監控的基本實現原理 性能監控其實也就是監測在高并發訪問的狀況下,應用系統中的特定業務功能處理方法的執行效率或者速度。為此,可以攔截目標方法的執行過程并記錄目標方法執行之前和執行完畢后的時間值,并取其差值將可以得到該目標方法的執行時間。最后根據具體的功能要求,保存所獲得的各個性能數據到數據庫系統中。【例3

35、-2】為部分代碼示例,并注意其中黑體部分的代碼。【例3-2】體現性能監控實現原理的部分代碼示例package filing;import java.util.date;public class serverrunningtimetracker private long startedtime;public serverrunningtimetracker() startedtime=system.currenttimemillis();public long getrunningtime() return system.currenttimemill

36、is()-startedtime;當然,對目標方法的攔截則應該應用面向切面思想設計和實現、并從具體的業務功能類代碼中分離出來。4、在銀行賬戶管理系統中基于面向切面思想設計和實現性能監控功能由于本書所應用的銀行賬戶信息管理系統范例沒有應用spring框架技術,因此在性能監控功能的具體實現方面沒有采用spring框架中的aop技術,而是應用動態代理技術實現。具體實現的核心功能代碼片段請見下面的【例3-3】。【例3-3】應用動態代理技術實現性能監控功能的代碼示例package filing;import java.lang.reflect.*;public

37、 class profilingdynamicproxy implements invocationhandlerprivate object delegate;private long totaltime; public long gettotaltime()return totaltime;/返回所監控的某個業務方法執行中所花費的時間public object bind(object delegate) /delegate為被代理的目標類對象實例this.delegate = delegate; return proxy.newproxyinstance(delegate.getclass

38、().getclassloader(), delegate.getclass().getinterfaces(), this); public object invoke(object proxy, method method, object args) throws throwable object result = null; long startedtime;try startedtime=system.currenttimemillis();result = method.invoke(delegate, args); totaltime=system.currenttimemilli

39、s()-startedtime;catch (exception e) . /異常處理的代碼,在此加以省略 return result; 對于性能監控中的各種數據的顯示功能的實現,在銀行賬戶信息管理系統項目中主要是應用開源的jfreechart圖表框架技術實現,具體的顯示效果請見下圖3.18所示的截圖。圖3.18 對于性能監控中的各種數據的顯示功能的實現注意:開源jfreechart圖表框架具體的應用技術請讀者參考“j2ee項目實訓struts框架技術”一書中的第10章“整合struts和其他框架技術”的有關內容。1.1.6 基于面向切面思想的系統架構設計實現安全功能示例1、對于一個成功的j2ee應用系統來說安全是必不可少的由于web應用系統是基于http協議實現數據的傳遞,而http協議底層的tcp/ip 協議在制訂之初,沒有把安全考慮在內,協議中存在一定的安全問題如數據采用明文傳輸。因此,基于web方

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論