徐 雯,高建華
針對 Web應用需求的日益增長,快速開發高質量的Web應用系統,成為業界研究的一大熱點問題。一般,Web應用表現層由JSP、Servlet實現,主要完成與用戶的交互;業務層交給 EJB實現,完成系統核心業務邏輯的處理;數據層由JDBC加DAO對象或是由EJB中的EntityBean實現,負責與各種數據源的交互。由于 EJB提供幾乎所有的企業級服務[1],所以本身啟動慢,部署比較復雜,而且性能比較差。本文采用Spring MVC設計模式和MyBatis框架,提出了 B/S結構與 C/S結構相結合的 Web應用框架,應用于TOPCard信用卡業務系統,說明Spring MVC和MyBatis在Web系統中的應用,該系統在性能差、復雜度高等方面有很大的改進。
本文的章節安排如下:第二部分對Spring MVC模式進行簡述、深入研究MyBatis框架。第三部分以TOPCard信用卡業務系統為例,對一種B/S結構與C/S結構相結合,采用Spring MVC和MyBatis為基礎的Web應用框架進行分析和研究。第四部分得到實驗結果并進行分析。
MVC模式(Model-View-Controller)是軟件工程中的一種軟件架構模式,3個基本部分為Model、View、Controller[2]。Spring是以輕量級的開源框架,它以控制反轉原則和面向方面編程思想為基礎,提供管理業務對象服務[3]。Spring框架提供構建Web應用程序的全功能MVC模塊[4],它是一種高度可配置的MVC框架。Spring MVC實現了MVC的核心概念,它為Controller和處理程序提供了大量與此模式相關的功能,當向MVC添加反轉控制時,它使應用程序高度解耦,提供簡單的配置更改就可以動態地更改組件的靈活性,圖為Spring MVC設計模式結構,如圖1所示:

圖1 Spring MVC設計模式結構
Spring MVC的Web框架是一個請求驅動的Web框架,整個框架由Model,View,Controller 3個部件組成。Spring MVC的重要組成部分是Dispatcherservlet,它的主要任務是將請求分發到相應的處理程序,讓這些業務程序來處理這些請求。以下是TOPCard信用卡業務系統中Dispatcher Servlet的聲明和映射:

Dispatcher Servlet被命名為topcardweb攔截web請求,上述配置將隨web應用啟動而自動加載,采用通配符與URL對應來進行配置,所有以.ctl作為后綴的請求將都會被topcardweb攔截,并將攔截的請求通過控制器映射(Handdler Mapping)發送給相應的Bean進行處理。
MyBatis框架集合多種操作型關系數據的概念和方法,它是一個強大的數據訪問工具和解決的方法[5]。MyBatis框架主要包含DAO組件與SQL Map組件兩大類,MyBatis常用工具有Log管理等,其架構圖,如圖2所示:

圖2 MyBatis架構圖
MyBatis DAO組件的主要目標是抽象化應用程序的數據訪問層和持久層的表示方式和位置,使它遠離應用程序的業務邏輯,其主要功能是幫助開發人員進行基于DAO設計模式設計和開發J2EE應用程序。SQL Map組件是MyBatis Database Layer框架的重要組成部分,它使用簡單的XML配置文件將Java Bean、XML、Map映射成SQL語句,通過SQL語句的執行獲得Java Bean、XML、Map等對象。MyBatis SQL Map能大大減少訪問數據庫的代碼,并且提供了一個簡潔的框架,MyBatis DAO實現圖和SQL Map實現圖見參考文獻[9]。
Log管理是MyBatis不可缺少的部分,它管理4種模式的日志:①Jakarta Commons Logging(JCL)記錄日志信息;②Log4J;③JDK1.4 Logging API;④無日志模式。MyBatis框架使用JCL記錄日志信息,JCL使用獨立于具體實現的方式提供日志服務,可以插入包括Log4J和JDK1.4 Logging API等不同的日志服務實現。為了對日志做一定的封裝,MyBatis采用簡單的工廠模式,其Log類結構,如圖3所示:

圖3 MyBatis平臺的Log類結構圖
LogFactory依賴Log接口,它是日志的工廠類,Log接口能 通 過 NoLoggingImpl、 JakartaCommonsLoggingImpl、Jdk14LoggingImpl、Log4jImpl來實現。
TOPCard信用卡業務系統的拓撲結構,包括信用卡的申請、建賬制卡、授權、清算等核心業務,提供信用卡業務的核心支持。輔助系統通過與核心信用卡系統的協作來完成信用卡的其他業務功能,如圖4所示[8]:

圖4 TOPCard信用卡業務系統的拓撲結構
各個系統的功能如下:
(1)TOPCard信用卡業務系統進行信用卡核心業務的處理,包括申請、建賬制卡、授權、清算等。
(2)TOPCard信用卡業務系統與TOPCard核心業務系統之間通過在線和批量的方式進行交互。在線方式包括ATM、柜面取現等交易。批量方式包括清算、總帳等文件。
(3)卡中心員工、分行柜員,通過直接登錄TOPCard信用卡業務系統的方式進行業務處理。
(4)行內核心系統向 TOPCard信用卡業務系統發出的文件主要有:行內消費預借現金請款文件、柜面還款清算文件、約定還款應答文件。TOPCard信用卡業務系統向行內核心系統返還的文件主要有:會計總賬文件、約定還款請求文件。
(5)國際組織將收到的請款文件,給 TOPCard信用卡業務系統進行入賬,TOPCard信用卡業務系統批量結束后,將當日的爭議退單等信息生成返還文件,傳回給各個國際組織前置機,以便傳回給國際組織。
(6)輔助業務系統,包括影像征審系統、CallCenter、網銀系統、積分系統、防欺詐系統、催收系統、數據集市。
影像征審系統進行申請件的處理、影像的管理以及對持卡人的征審和授信處理,為信用卡系統提供申請信息來源。
CallCenter、網銀系統用TOPCard信用卡業務系統提供的客戶信息、賬戶信息等,為客戶提供全方位的服務。
積分系統,利用TOPCard信用卡業務系統提供的交易數據,為持卡人累計獎勵積分并實現相應的兌換等功能。
防欺詐系統,利用 TOPCard信用卡業務系統提供的交易信息,按照預定的規則給卡中心提供預警信息。
催收系統,處理TOPCard信用卡業務系統中處于拖欠等狀態的客戶,跟蹤對應的客戶的行為。
數據集市,對 TOPCard信用卡業務系統的業務數據進行整合,提供各種分析結果用于產品的風險、效益評估,同時作為市場推廣和營銷的依據。
TOPCard信用卡業務系統,在前臺連接模式和客服和卡中心運營渠道中,客服、卡中心通過瀏覽器訪問Web服務器,Web服務器采用JDBC和TCP/IP兩種方式與信用卡主機通訊。WEB應用采用Spring MVC框架,應用邏輯采用面向服務的設計思想,資源管理層采用MyBatis的工具對數據庫進行訪問。
TOPCard信用卡業務系統采用B/S與C/S混合模式。在客服和卡中心運營渠道以及前臺連接模式中采用 B/S模式,分為 3層結構,具體如下:客服、卡中心、Web服務器、信用卡主機。在聯機渠道中,采用C/S模式,分為三層結構,各層之間采用TCP/IP通訊。具體如下:國際組織、各組織接口機、TOPCard系統;銀聯系統、銀聯前置、TOPCard系統;行內渠道、行內前置、TOPCard系統。
TOPCard信用卡業務系統建立在B/S與C/S三層結構基礎上,這樣的設計方法有利于設計大型的分布式程序。通過把系統的功能分離到多個邏輯層面,將一些敏感的數據放在最下層,即在防火墻后面處于一個非常安全的地方。應用服務技術,可以使應用程序基本上不直接訪問系統和操作系統,這樣就減少了像大多數兩層結構的弱點。TOPCard信用卡業務系統的三層結構。如圖5所示:

圖5 TOPCard信用卡業務系統的三層結構
Spring MVC及MyBatis架構的整合,能將Web系統中的表示層、業務層和邏輯層有效地分開,從而有利于web系統的整體維護和升級[6]。Controller實現了org. springframework.web.servlet.mvc接口,Model主要用來完成對MyBatis數據庫的操作,由Dao,DaoImpl,Service和ServiceImpl相關的接口和類在程序中來實現,View用JSTL和Xml來完成[7],如圖6所示:

圖6 Spring MVC和iBATIS的整合圖
TOPCard信用卡業務系統邏輯結構圖,如圖7所示:

圖7 TOPCard信用卡業務系統邏輯結構圖
Spring作為全局控制存在與整個流程之中。
(1)在展現層中,為用戶接口(展示頁面)提供信息供應,本層采用Spring MVC框架做表現層平臺。首先通過JSP頁面實現前臺交互,負責傳送Request和接收Response,然后Spring MVC根據配置文件將DispatcherServlet接收到的Request委派給相應的Controller處理。
(2)在業務層中,實現具體業務邏輯,為應用展現層提供服務支撐,本層采用Spring框架技術實現。管理服務組件的Spring IOC容器,負責向控制器提供Model組件和該組件的DAO組件完成業務,并提供事務處理、緩沖池等容器組件以提升系統性能和保證數據的完整性。
(3)在數據持久層中,為上層業務服務提供數據訪問支持,本層采用MyBatis技術實現。依賴于MyBatis的對象化映射和數據庫交互,處理DAO組件請求的數據并返回處理結果。
TOPCard信用卡業務系統,用Spring MVC作為MVC開發模式做展現層平臺,利用MyBatis作為O/R Mapping數據持久層框架,Spring作為全局控制存在與整個流程之中,其運行流程,如圖8所示:

圖8 TOPCard信用卡業務系統運行流程圖
為了進行實驗對比分析,本文進行比較的基于EJB的信用卡業務系統其業務層交給 EJB實現,完成系統核心業務邏輯的處理;數據層由EJB中的 Entity Bean實現,提供原始數據面向對象的封裝,借助CMP(容器管理持久性)獲得O/R映射能力,完成與各種數據源的交互。實驗軟件環境參數如下:
信用卡主機、備機:AIX 或 HP-UX或Solaris
數據庫:DB2或Oracal
Web服務器:linux(Redhat ES)、WebSphere
銀聯前置:linux(Redhat ES)或solaris for X86
客服工作站:Windows XP
卡中心工作站:Windows XP
系統性能是一個總體概念,包括了硬件、網絡、數據庫、應用各個方面的配置和數量,同時還必須考慮配置成本,即不能為了保證系統性能而通過任意擴大系統配置的辦法來滿足系統性能。因此構建優秀的應用軟件體系,對發揮系統整體性能就顯得尤為關鍵。
影響信用卡應用系統總體性能的主要是聯機授權模塊、批處理及報表模塊等,這些模塊中的性能薄弱都將導致整個系統的業務無法充分展開,影響到銀行的業務運作。
各個模塊性能瓶頸可能出現的位置是:聯機授權模塊主要存在于通訊能力、數據庫操作以及應用服務器的信息處理能力;批處理及報表模塊的性能瓶頸主要存在于對數據庫的讀寫、文件的寫操作以及服務器的計算能力上。由于聯機授權模塊、批處理及報表模塊是系統中對性能要求最高的部分,如表1所示:

表1 TOPCard與基于EJB信用卡業務系統的性能測試結果
TOPCard信用卡業務系統在預測銀行10年的業務量下的性能測試結果與基于 EJB的信用卡業務系統的比較。假設信用卡帳戶500萬張卡,日均交易20萬筆,200人并發訪問WEB服務。
在性能方面,可以看出基于Spring MVC及IBATIS的TOPCard信用卡業務系統大大優越于基于EJB的信用卡業務系統。
基于EJB的信用卡業務系統為了實現全面且完整的系統應用時,重量級容器 EJB會帶來諸如部署復雜,運行緩慢,內在服務多等負面作用。EJB要求創建多個組件接口并實現多個不必要的回調方法組件接口要求實現 EJBObject或 EJBLocalObject 以及處理許多不必要的異常。基于XML的EJB部署描述符比較復雜并容易出錯。EJB組件并非是真正面向對象的,因為它們在繼承和多態性方面的有使用限制開發人員無法在 EJB 容器外部測試 EJB 模塊,而在容器內部調試EJB非常復雜和耗時。調用 EJB是一項復雜的任務。即使是在應用程序中使用最基本的EJB也需要對JNDI有一個詳細的了解對容器的依賴使得 EJB只能用于服務器組件的開發,無法實現一次編寫。
在復雜度方面,基于EJB的信用卡業務系統的復雜度大于基于Spring MVC及IBATIS的TOPCard信用卡業務系統。
Spring是輕量級的框架,對其他對象沒有侵入性,代碼有很高的復用性,并且是一個免費的開源框架;而 EJB是重量級的框架,難以維護和復用。所以顯而易見,基于Spring MVC及IBATIS的TOPCard信用卡業務系統,能解決基于EJB的信用卡業務系統的代碼復用率低的問題。
本文通過對采用Spring MVC和MyBatis框架為基礎的Web應用框架進行分析和研究,可以發現將Sping MVC應用于TOPCard信用卡業務業務系統的架構中,可以有效的將系統的表示層、業務層、邏輯層分開來,提升系統性能,提高了系統的可維護性和可擴展性;將MyBatis應用到于TOPCard信用卡業務系統中,不僅可以大大提高代碼的復用性,而且能有效隔離數據庫設計和應用中使用的對象模型,這就使得它們兩者之間的相關性能降至最低。將Spring作為全局控制存在與整個流程之中,使得系統復雜度大大降低,提高了代碼復用率。Web應用框架的研究是一個不斷深入、逐步完善的過程,在對Web應用框架不斷推廣試用的基礎上,還將進一步擴展其功能,使其應用領域更加廣泛。
[1]Johnson, Juergen Hoeller. R. Expert One-on-One J2EE Development without EJB[M]. Indiana: Wiley Publishing Inc, 2004.
[2]Ren Yongchang, Xing Tao, Xing Zhaofeng, Zheng Jianchun. Application Research for Integrated SSH Combination Framework to Achieve MVC Mode[C]. International Conference on Computational and Information Sciences,pp.449-502, Sept. 2011.
[3]Shi GAO, XingHeng WANG, Xue DENG. Public Computer Education Management System
[4]based on Java EE Lightweight framework[C]. International Conference on Computer Science and Service System, pp. 1486 - 1489, Jun. 2011.
[5]張宇, 王映輝, 張翔南. 基于Spring的MVC框架設計與實現[J]. 計算機工程, Vol.36, No.4, pp.59-62, Feb.2010.
[6]Clinton Begin, Brandon Goodin and Larry Meadors. iBatis in Action. Manning publications Co. Chero Station,2007.
[7]Harvey M.Deitel, Paul J.Deitel著,[M]劉宗田, 苗沛榮等譯, Java程序設計教程, 機械工業出版社, 2002.
[8]Kumar, B V Sangeetha, S Subbrahmanya S V著[M], 宋梅, 張學平譯, 深入淺出J2EE架構, 清華大學出版社,2006.
[9]TOPCARD信用卡核心系統產品說明書,[K]上海華騰軟件系統有限公司, 2009.
[10]封小鈺, 王飛. 基于iBATIS 數據庫訪問技術的研究與應用.[J]電腦開發與應用,Vol.21, No.6, pp.51-53,Apr.2008.