摘 要: 提出了一套基于JavaEE開源服務(wù)器Geronimo通訊前置系統(tǒng)的設(shè)計(jì)方案,以解決銀行異構(gòu)系統(tǒng)間的通訊互聯(lián)問題。該系統(tǒng)具有通訊模式轉(zhuǎn)換、報(bào)文格式轉(zhuǎn)換、工作流和日志記錄等功能,不僅能有效地解決銀行與企業(yè)間數(shù)據(jù)交換時(shí)存在的問題,同時(shí)可以很好地兼容銀行原有的系統(tǒng)架構(gòu)。
關(guān)鍵詞: 銀行; 數(shù)據(jù)交換; 通訊前置; Geronimo
中圖分類號(hào):TP319 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2012)12-36-03
Design of front-end system for banks based on Geronimo
Fan Liang, Ding Yuewei
(University of Shanghai for Science and Technology School of Optical-Electrical and Computer Engineering, Shanghai 200093, China)
Abstract: To solve the problems of interconnection between heterogeneous systems, a design of front-end system based on open source JavaEE server Geronimo is presented. The system contains the functions such as communication mode conversion, message format conversion, and workflow and log record. It can solve the problems above and it is also compatible with the original system architecture of banks.
Key words: bank; data exchange; front-end system; Geronimo
0 引言
隨著金融信息化程度的加深,銀行之間以及與第三方企業(yè)之間的信息交互也越來越頻繁。每個(gè)銀行和企業(yè)都有自己的應(yīng)用系統(tǒng),甚至銀行內(nèi)部會(huì)有幾套不同的應(yīng)用系統(tǒng)。這些系統(tǒng)的通訊方式、通訊協(xié)議和報(bào)文格式各不相同,使得系統(tǒng)間通訊十分復(fù)雜,對(duì)于不同的系統(tǒng)互聯(lián)一般都需要單獨(dú)開發(fā)一套通訊接口,這樣不僅開發(fā)難度高,效率低下,而且由于系統(tǒng)間耦合度極高,容易給日后的維護(hù)帶來極大的不便。為了解決以上的問題,本文提出了一種基于開源組織Apache的JavaEE開源服務(wù)器Geronimo的通訊前置系統(tǒng)。它不僅能整合雜亂無序的通訊需求,而且作為各類應(yīng)用系統(tǒng)間的通訊樞紐,為其形成統(tǒng)一、平滑的通訊連接,提供統(tǒng)一、方便的管理,并且能提供可靠的安全校驗(yàn)機(jī)制,保證數(shù)據(jù)傳輸過程中的安全性。
1 Geronimo簡介
Geronimo是開源組織Apache的一款開源服務(wù)器,支持所有J2EE1.4規(guī)范,并且支持大部分J2EE1.5規(guī)范。Geronimo的核心是一個(gè)輕量級(jí)的Ioc核心,在Geronimo中的模塊以配置文件的形式存在,由這個(gè)Ioc核心負(fù)責(zé)讀取和管理。這個(gè)核心的主要功能是支持依賴管理,配置管理,生命周期管理和倉儲(chǔ)服務(wù)。以這個(gè)核心為基礎(chǔ)集成了各種各樣的容器和模塊,比如Apache的OpenEJB,ActiveMQ和Jetty等,并且可以根據(jù)需求添加或刪除,可擴(kuò)展性非常好。
Geronimo中一個(gè)模塊稱為一個(gè)GBean,由Ioc核心來管理這些GBean的生命周期。通過JDK自帶的Jmx工具不僅可以查看Geronimo服務(wù)器運(yùn)行的狀態(tài),內(nèi)存分配等情況,還可以查看服務(wù)器中已經(jīng)存在的GBean的狀態(tài),屬性等等。
2 通訊前置系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2.1 系統(tǒng)設(shè)計(jì)思想
該平臺(tái)的總體設(shè)計(jì)思想是設(shè)計(jì)出一個(gè)能解決異構(gòu)系統(tǒng)間通訊互聯(lián)的通訊前置系統(tǒng)。在通訊部分,采用TCP/IP協(xié)議來整合來自不同系統(tǒng)間的的通訊需求,實(shí)現(xiàn)通訊協(xié)議的轉(zhuǎn)換。該平臺(tái)的主體基于開源組織Apache的一款服務(wù)器Geronimo,支持功能的模塊化,可擴(kuò)展性強(qiáng),而且由于Java的平臺(tái)無關(guān)性,系統(tǒng)也具有良好的可移植性。
2.2 系統(tǒng)架構(gòu)
通訊前置系統(tǒng)采用C/S架構(gòu),主要包括兩個(gè)部分。一部分是通訊前置服務(wù)器,另一部分是通訊前置業(yè)務(wù)配置工具[1]。
2.2.1 通訊前置服務(wù)器
服務(wù)器是一個(gè)基于Geronimo的JavaEE容器,遵循Jmx標(biāo)準(zhǔn)規(guī)范。系統(tǒng)基于異步核心,使用基于Jms1.0標(biāo)準(zhǔn)規(guī)范的消息服務(wù)。
系統(tǒng)所有服務(wù)都在該容器中。每個(gè)服務(wù)主要包括控制器、監(jiān)聽線程或消息監(jiān)聽器,業(yè)務(wù)處理線程??刂破髯x取配置文件,監(jiān)聽監(jiān)控工具的管理請(qǐng)求,然后按照請(qǐng)求啟動(dòng)或者停止監(jiān)聽線程。監(jiān)聽線程負(fù)責(zé)監(jiān)聽某個(gè)具體的業(yè)務(wù)請(qǐng)求,在收到業(yè)務(wù)請(qǐng)求后,啟動(dòng)業(yè)務(wù)處理線程進(jìn)行處理,消息監(jiān)聽器用于處理消息請(qǐng)求,啟動(dòng)相應(yīng)的業(yè)務(wù)處理器進(jìn)行處理。
2.2.2 業(yè)務(wù)配置工具
業(yè)務(wù)配置工具是基于Eclipse的SWT開發(fā)的圖形化用戶界面,它用來收集用戶的業(yè)務(wù)需求,將其轉(zhuǎn)換為通訊前置服務(wù)器可讀的配置文件,供通訊前置服務(wù)器讀取[2]。配置的主要內(nèi)容是業(yè)務(wù)流程配置,報(bào)文格式配置及資源的配置及業(yè)務(wù)控制、調(diào)試等功能。
2.3 系統(tǒng)功能模塊
通訊前置系統(tǒng)功能模塊主要分為五部分:系統(tǒng)主模塊,通訊模塊,報(bào)文模塊,工作流模塊以及日志模塊。各模塊關(guān)系如圖1所示。
2.3.1 系統(tǒng)主模塊
通訊前置系統(tǒng)里有一系列的接入適配器,每個(gè)接入適配器的都配置了IP和端口。系統(tǒng)主模塊為每個(gè)IP和端口都分配了一個(gè)交易監(jiān)聽線程來監(jiān)聽消息交易請(qǐng)求,一旦接收到請(qǐng)求,就將請(qǐng)求分發(fā)給對(duì)應(yīng)的業(yè)務(wù)處理線程進(jìn)行處理[3]。同時(shí)它還負(fù)責(zé)每個(gè)交易的啟動(dòng),部署,停止和卸載,是整個(gè)通訊前置系統(tǒng)的核心模塊。
2.3.2 通訊模塊
隨著銀行業(yè)務(wù)的拓展,銀行與第三方的通訊模式越來越多樣化,有同步的,有異步的,有長連接,也有短連接,更多的是以上幾種模式兼而有之。通訊模塊負(fù)責(zé)各種通訊模式的相互轉(zhuǎn)換,為銀行和第三方間的信息交互提供了統(tǒng)一、平滑的通訊連接。
2.3.3 報(bào)文模塊
報(bào)文格式的定義有很多,有定長報(bào)文、分隔符報(bào)文,8583報(bào)文,XML報(bào)文等。甚至同一種類型的報(bào)文,比如8583報(bào)文,它們的定義也可以不相同。報(bào)文模塊可以根據(jù)開發(fā)人員配置好的報(bào)文轉(zhuǎn)換規(guī)則,將不同格式的報(bào)文進(jìn)行相互轉(zhuǎn)換,這也為銀行和第三方的通訊提供了可靠的保證。
2.3.4 工作流模塊
工作流模塊主要用于解釋工作流,完成與工作流相關(guān)的各模塊之間的相互調(diào)用。工作流信息通過配置文件的形式存儲(chǔ)。工作流引擎根據(jù)交易代碼調(diào)用配置文件中的相應(yīng)業(yè)務(wù)流程,并按順序調(diào)用相應(yīng)的組件,每個(gè)交易維護(hù)自己的一個(gè)交易上下文,同時(shí),每個(gè)交易會(huì)使用應(yīng)用服務(wù)或系統(tǒng)服務(wù)提供的報(bào)文,適配器,MQ隊(duì)列等資源[4]。
2.3.5 日志模塊
日志模塊負(fù)責(zé)加載日志配置文件并把交易日志記錄到相應(yīng)的文件中去,這樣可以方便開發(fā)人員進(jìn)行錯(cuò)誤的排查。日志模塊采用Log4J技術(shù),通過配置文件可以指定交易日志的級(jí)別,從低到高可分為Debug,Info,Warn,Error,F(xiàn)atal五個(gè)級(jí)別。當(dāng)為一個(gè)交易指定了日志級(jí)別之后,則日志中記錄該級(jí)別以及該級(jí)別以上的日志信息。
2.4 系統(tǒng)流程設(shè)計(jì)
通訊前置啟動(dòng)時(shí)加載應(yīng)用服務(wù)前會(huì)讀取一個(gè)狀態(tài)信息配置文件,配置文件中保存了各應(yīng)用服務(wù)上一次關(guān)閉前置系統(tǒng)時(shí)的狀態(tài),根據(jù)狀態(tài)信息恢復(fù)應(yīng)用的狀態(tài)。另外,在應(yīng)用服務(wù)的啟動(dòng)過程中,必須先啟動(dòng)基本的系統(tǒng)服務(wù),再啟動(dòng)應(yīng)用服務(wù),因?yàn)閼?yīng)用服務(wù)依賴于系統(tǒng)服務(wù),而應(yīng)用服務(wù)之間是相互獨(dú)立的[5]。
應(yīng)用服務(wù)啟動(dòng)過程中,首先讀取應(yīng)用配置信息,然后根據(jù)配置信息中指定的參數(shù)分配相關(guān)資源,并啟動(dòng)監(jiān)聽線程和業(yè)務(wù)處理線程,由監(jiān)聽線程等待客戶端請(qǐng)求,接到請(qǐng)求后轉(zhuǎn)發(fā)給業(yè)務(wù)處理線程,再循環(huán)等待下一個(gè)客戶端請(qǐng)求。
業(yè)務(wù)處理線程處理交易的過程是:業(yè)務(wù)處理線程池接收到交易請(qǐng)求后,調(diào)用一個(gè)空閑線程,讀取交易及相應(yīng)的報(bào)文配制,按照交易流程進(jìn)行相應(yīng)的交易處理,流程處理完畢后釋放相應(yīng)資源,將線程歸還到線程連接池,以處理新的請(qǐng)求。線程連接池采取非阻塞的方式來處理,增加了吞吐量,也降低了交易互鎖的風(fēng)險(xiǎn)[6]。
3 通訊前置系統(tǒng)性能測試
3.1 測試環(huán)境
硬件環(huán)境:服務(wù)器采用的是IBM 9133-55A;CPU為4顆雙核(每顆2097 MHz);物理內(nèi)存為7936MB;調(diào)頁空間為8192MB。
軟件環(huán)境:操作系統(tǒng)采用AIX 6.1;JDK版本為IBM JDK1.6-SR10。
測試工具:Nmon。
3.2 測試目的
⑴ 對(duì)平臺(tái)的處理效率、并發(fā)性能以及可擴(kuò)展性等方面進(jìn)行考察。
⑵ 對(duì)平臺(tái)穩(wěn)定性進(jìn)行測試。
3.3 測試用例與測試數(shù)據(jù)
為了測試多種交易的情況,本文一共模擬了5種交易場景進(jìn)行測試。對(duì)不同的交易場景制定了不同的測試用例進(jìn)行測試。
測試用例1和測試數(shù)據(jù)如表1所示。
3.4 測試結(jié)論
從性能對(duì)比測試結(jié)果看,基于Geronimo的通訊前置系統(tǒng)的TPS能滿足絕大部分銀行交易平臺(tái)的需求。該系統(tǒng)也具有很高的穩(wěn)定性,能長時(shí)間不間斷地穩(wěn)定運(yùn)行。
4 結(jié)束語
隨著商業(yè)銀行的快速發(fā)展和銀行電子化進(jìn)程的加快,商業(yè)銀行迫切需要一個(gè)解決異構(gòu)系統(tǒng)間通訊互聯(lián)問題的通訊前置系統(tǒng),同時(shí),由于銀行業(yè)務(wù)系統(tǒng)的不斷增加,圖形化配置業(yè)務(wù)流程以及加快業(yè)務(wù)系統(tǒng)的開發(fā)進(jìn)度就顯得十分必要。通訊前置系統(tǒng)還提供不同業(yè)務(wù)交易流程的整合功能,保障核心的穩(wěn)定性和可擴(kuò)展性。雖然在控制高并發(fā)方面還有待進(jìn)一步研究,但是基于Geronimo的通訊前置系統(tǒng)已經(jīng)基本滿足了商業(yè)銀行的以上需求,提高了商業(yè)銀行的市場競爭力,為商業(yè)銀行開拓更多元化的金融產(chǎn)品和服務(wù)提供了強(qiáng)有力的技術(shù)保障。
參考文獻(xiàn):
[1] 劉紹球,邱衛(wèi)東,陳克非.商業(yè)銀行綜合前置系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)
算機(jī)工程,2006.32(16):274-276
[2] (美)埃克爾著,陳昊鵬譯.Java編程思想(第4版)[M].機(jī)械工業(yè)出版社,
2007.
[3] Robbins, Steven Robbins. Unix Systems Programming:Communi-
cation, Conncurrency and Threads[M].Pearson,2003.6:23-56
[4] 葛冬霞.消息隊(duì)列中間件及其應(yīng)用[J].高性能技術(shù),2004.169(4):
58-60
[5] 翟裕忠.一個(gè)基于XML的數(shù)據(jù)交換原型系統(tǒng)[J].計(jì)算機(jī)工程,
2000.26(12):212-214
[6] 唐丁波.銀行前置機(jī)系統(tǒng)的設(shè)計(jì)[J].電腦信息與技術(shù),2003.32(6):
32-36