系分論文:XML在網(wǎng)上銀行中的應(yīng)用
2002年3月,我參與了的銀行某網(wǎng)上銀行系統(tǒng)的升級和改造工作。該系統(tǒng)采取總行、分行兩層結(jié)構(gòu),總行網(wǎng)銀中心連接各一級分行,提供信息服務(wù)、客戶服務(wù)、帳務(wù)查詢和實時交易等功能。網(wǎng)銀中心與客戶通過Internet相連,與分行業(yè)務(wù)主機通過城市綜合網(wǎng)相連。網(wǎng)上銀行的客戶使用Browser(瀏覽器)通過Internet連接到網(wǎng)銀中心并且發(fā)起網(wǎng)上交易請求;網(wǎng)銀中心驗證后將交易請求返回;分行業(yè)務(wù)主機完成交易處理,返回處理結(jié)果給網(wǎng)銀中心;網(wǎng)銀中心對交易結(jié)果進行再處理后返回相應(yīng)的信息給客戶。
原有系統(tǒng)無論從業(yè)務(wù)上,還是從技術(shù)上通過運行一段時間,存在這很多問題,客戶和業(yè)務(wù)人員意見也很多,諸如部分時間交易超時,作業(yè)務(wù)比較慢,還有無法滿足客戶的某些個性化的要求,基于ASP+VB的應(yīng)用也不合時宜,這些都是系統(tǒng)需要改造的原因。
新系統(tǒng)整個網(wǎng)上銀行應(yīng)用的開發(fā),全部基于JAVA技術(shù),數(shù)據(jù)的交換采用標(biāo)準的XML協(xié)議,應(yīng)用開發(fā)采用Websphere Studio+Visual Age for Java等工具進行,采用符合國際J2EE標(biāo)準,系統(tǒng)采用了業(yè)界領(lǐng)先的中間件產(chǎn)品(BEA WebLogic)建立網(wǎng)上網(wǎng)上銀行系統(tǒng)的交易平臺,該系統(tǒng)的主控程序應(yīng)用JSP和servlet編寫,很好地發(fā)揮了多線程機制,大大提高了系統(tǒng)的性能;主要業(yè)務(wù)邏輯采用EJB技術(shù)實現(xiàn),模塊化結(jié)構(gòu)利于新業(yè)務(wù)的開發(fā)與布部署;數(shù)據(jù)庫訪問符合JDBC標(biāo)準,利用WebLogic的Jdbc pool提高了數(shù)據(jù)庫訪問的效率。
在這里主要談?wù)刋ML在該項目中的應(yīng)用:
XML 是一種具有描述數(shù)據(jù)功能的語言,它十分適合作為知識表示語言或作為組件及文件格式的表示方法。它還可以讓數(shù)據(jù)在不同的來源中,根據(jù)通用的語法規(guī)則來處理。而Java則是用于Internet、適合于分布式環(huán)境、提供了一個跨平臺的語言。XML和Java相結(jié)合主要原因是基于XML的語法提供了一種靈活的、標(biāo)準的、健壯的Java編程方案。
在該項目中這里,我們統(tǒng)一了XML的報文標(biāo)準,列舉了XML實例,規(guī)定了XML頭部,XML根節(jié)點,XML二級節(jié)點及具體的報文子段。在接口中的XML報文遵循如下約定:XML頭部如實例所示,不得改變;XML根結(jié)點、二級節(jié)點如實例,不得改變;報文必須是包含‘\0’作為結(jié)束符的字符串;接口格式說明中的字段即指實例中具體的報文字段這一級。對于接口文件,規(guī)定所有發(fā)送、接收的文件名均為調(diào)用方確定,均帶文件路徑。
接下來談?wù)勗邢到y(tǒng)存在的問題:
因網(wǎng)上銀行業(yè)務(wù)的特殊性,Web客戶端需要連接多個業(yè)務(wù)種類,多種數(shù)據(jù)庫,跨平臺,跨數(shù)據(jù)庫,環(huán)節(jié)多,這就是原有系統(tǒng)交易緩慢的重要原因之一,而且隨著可提供新業(yè)務(wù)的種類的增多,問題暴露的更加明顯;其次Web客戶端的查詢往往對各個應(yīng)用系統(tǒng)的服務(wù)器的負載產(chǎn)生影響,影響了其他業(yè)務(wù);同樣,對Web客戶無法提供個性化服務(wù),B2B,B2C提供的信息和帳頁千篇一律,根本無法按照其要求定制;客戶端無法進行一些運算,一些簡單的比如”“還款試算”等還要通過后臺應(yīng)用服務(wù)器來進行運算,加重了主機負擔(dān)。
在具體應(yīng)用中,比如查詢某客戶的所有業(yè)務(wù)是困難的,這具體體現(xiàn)在,如果某簽約客戶想查詢或執(zhí)行信用卡的歷史交易,必須向后臺相應(yīng)的業(yè)務(wù)的數(shù)據(jù)庫服務(wù)器提交數(shù)據(jù)查詢請求,而此時的后臺服務(wù)器又往往又是銀行的實時業(yè)務(wù)處理機,在高峰期正忙,并且歷史交易的數(shù)據(jù)往往由于年終轉(zhuǎn)換的原因,存在于其它數(shù)據(jù)表甚至其他數(shù)據(jù)庫和服務(wù)器,都給查詢帶來了困難,只能作到有限的查詢,或提供的數(shù)據(jù)項有限,或甚至根本無法提供,比如有關(guān)儲蓄業(yè)務(wù)的有關(guān)明細帳務(wù)已接近3000萬條,在高峰期間在其中取幾條記錄是困難的。另一方面,由于網(wǎng)上銀行涉及多個對私和對公的業(yè)務(wù),甚至包括資金的清算,一筆交易要跨越多個業(yè)務(wù)的服務(wù)器,這又存在跨不同種類的數(shù)據(jù)庫的問題.
所以,將歷史數(shù)據(jù)分離及整和是必然的,我們也曾考慮過將數(shù)據(jù)進行歸類,建立一個類似"歷史數(shù)據(jù)服務(wù)器"(或是數(shù)據(jù)倉庫)上,但該歷史數(shù)據(jù)仍需建立在某種數(shù)據(jù)庫上如INFORMIX-ONS,僅作到了數(shù)據(jù)的集合,沒有治本,投入大,費時。
所以為了解決原有系統(tǒng)中存在的問題,我們在新系統(tǒng)中我們建立專用的轉(zhuǎn)換服務(wù)器,作為"緩存",目的僅是為了"脫離"原有的依賴,減少聯(lián)機處理,這樣,有關(guān)歷史的交易就不用分別直接連到所需業(yè)務(wù)的數(shù)據(jù)庫或服務(wù)器,我們采用XML格式進行中間的轉(zhuǎn)換。這種所謂的XML數(shù)據(jù)庫其實就是文檔的集合.我們用了一臺IBM PC SERVER 來存儲XML數(shù)據(jù),具體就是用UNIX下的文件系統(tǒng)來存儲和檢索。將部分數(shù)據(jù)轉(zhuǎn)換成XML文件,包括所有以已簽約的客戶的歷史明細帳及全部卡號(未來新開戶時就不用在去信用卡主機進行校驗了),同時XML文件的存儲按文件系統(tǒng),并對B2B 和B2C進行了分類。
這里我們使用了Informix Web DataBlade工具,按照我們自己定義的數(shù)據(jù)結(jié)構(gòu)進行了批量轉(zhuǎn)換,基本與網(wǎng)銀后臺數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)庫表結(jié)構(gòu)相符,這樣做的目的是為了便于更新,且對原有有關(guān)調(diào)用數(shù)據(jù)庫的數(shù)據(jù)邏輯改動不大,將數(shù)據(jù)轉(zhuǎn)換成了XML文件格式,對于其他非Informmix數(shù)據(jù)庫的數(shù)據(jù),我們則采取了先將數(shù)據(jù)倒入導(dǎo)入至Informix數(shù)據(jù)庫,再進行這種轉(zhuǎn)換。 #p#
有關(guān)當(dāng)日的賬務(wù),我們在日終將當(dāng)日發(fā)生的流水帳進轉(zhuǎn)換,存入了數(shù)據(jù)庫,作為了歷史交易的追加。在這里Informix Web DataBlade可以通過一個簡單的SQL接口產(chǎn)生動態(tài)的XML數(shù)據(jù)和文檔,用于日終更新.這樣實際就上在數(shù)據(jù)庫與應(yīng)用服務(wù)器之間采用XML作為信息緩存。
建好了XML數(shù)據(jù)庫,那么又如何來應(yīng)用呢?接下來我們談?wù)勥@方面的問題。
首先讀取XML數(shù)據(jù)。具體的方法為:一個頁面通過服務(wù)器端對象與XML數(shù)據(jù)源相連,將信息轉(zhuǎn)換成數(shù)據(jù)抽象,接著用JSP元素顯示數(shù)據(jù)。這樣我們就使用了XSLT轉(zhuǎn)換程序轉(zhuǎn)換XML,.在這里應(yīng)用到的XSLT技術(shù),XSLT是W3C小組制定的一個轉(zhuǎn)換語言規(guī)范,它可以用來將XML數(shù)據(jù)轉(zhuǎn)換成HTML、PDF或其它XML格式。具體過程就是首先定義了XSLT模板,然后進行轉(zhuǎn)換,除了模板需要定義外,這個解析的過程是還是比較容易的。其實XSLT與XML的關(guān)系,就好象SQL與表格化的數(shù)據(jù)一樣。只是在JSP中,需用scriptlet或自定義標(biāo)簽中編程激活一個XSLT處理器來進行轉(zhuǎn)換。在XML數(shù)據(jù)源上使用一個轉(zhuǎn)換程序,或者是抽取數(shù)據(jù)或者是創(chuàng)建新的格式,這個轉(zhuǎn)換程序可以使用許多不同的機制來實現(xiàn)并且通過自定義標(biāo)簽來訪問它。
接下來XML應(yīng)用就是使同樣的數(shù)據(jù)可以以不同的瀏覽方式出現(xiàn)在瀏覽器中,而這些數(shù)據(jù)并不需要從再次從Web服務(wù)器上下載。其實這類應(yīng)用的就是早期的Web上的另我們頭疼的”動態(tài)表格”。對于B2B的用戶,可根據(jù)企業(yè)要求的,制定不同的往來對帳單,約十多種,以滿足其對帳的需要,對其所屬職工的集體辦理的有關(guān)代發(fā)工資,繳存公積金,還個人貸款的有關(guān)帳務(wù),都有良好的支持,在單位就可了解到,隨時的變動,并可隨時打印,不用再跑銀行進行詢問,取帳頁.將來甚至直接提供信息化較高的企業(yè)XML數(shù)據(jù),這也是未來交換數(shù)據(jù)的標(biāo)準,也是應(yīng)用XML的美好憧憬.對于B2C的個人用戶,可根據(jù)其所開辦的業(yè)務(wù)的不同,來對其提供"個性化"的服務(wù),可提供該人名下的所有帳戶的信息,如存貸款信息,各種繳費的信息,并可根據(jù)其需求方便的進行排序,篩選,組和,打印.甚至可以自己定制格式,改變了以往顯示單一,多業(yè)務(wù)羅列,操作復(fù)雜的狀況。Java提供的JSP為多種基于Web的用戶產(chǎn)生基于XML的標(biāo)記語言的問題,也就是我們要達到的"個性化"界面。
在具體應(yīng)用中,我們是用從JSP頁面產(chǎn)生的XML, XML在Web界面層的應(yīng)用得益于JSP技術(shù)的發(fā)展。同樣,也有兩種方法,一種直接將XML數(shù)據(jù)源集成到JSP的界面中去的方法是,將XML加載到JavaBeans組件中,然后在JSP中直接引用這些JavaBeans組件。***好處是使我們的程序代碼集中在一個地方(對Java技術(shù)而言,一般是指在“類”中),清晰,易于管理和修改。另一種方法是直接將XML數(shù)據(jù)轉(zhuǎn)換成Web顯示內(nèi)容的另一種方法是使用XSL和XSLT,將XML數(shù)據(jù)映射成HTML(或WML等)的邏輯由XSL樣式表(XSL StyleSheet)來定義。樣式表描述了每個特定XML數(shù)據(jù)實體應(yīng)該怎樣轉(zhuǎn)換成界面數(shù)據(jù)實體(如HTML表格、內(nèi)聯(lián)標(biāo)記等), 采用一套自定義的JSP標(biāo)記并引用某個XSLT處理程序,也就是前面提到的模板。
通過比較綜合了這兩種方案方法,我們作出了選擇,選擇了后者,XSLT方案的伸縮性要好一些,而且具有更好的可管理性。在這種情形下,我們的轉(zhuǎn)換邏輯是編寫在一個XSL樣式表中,而不是在Java代碼中。這意味著當(dāng)需要修改界面時,大多數(shù)情況下只是編輯樣式表或者HTML,代碼不受影響,不涉及程序編譯的問題,業(yè)務(wù)人員經(jīng)過簡單的培訓(xùn)就可以修改,這對我們很重要。在網(wǎng)銀項目中由于XML的應(yīng)用,解決了我們許多歷史問題,也使銀行的B2B和B2C業(yè)務(wù)進行了有效的整合,更好的為客戶服務(wù)。
盡管XML是未來網(wǎng)上數(shù)據(jù)格式的標(biāo)準,可在具體應(yīng)用中還存在許多問題:
盡管我們由于網(wǎng)上銀行所要求的數(shù)據(jù)格式不是很多,可建立XSLT的模板并不是一件容易的事,不是很好寫,主要是由于表中嵌套太多,盡管是文本形式,閱讀和修改很實際上是復(fù)雜的。另外,這種基于文件系統(tǒng)的后臺歷史數(shù)據(jù)按XML存儲的方案還有待探討,盡管XML的確與數(shù)據(jù)庫有相似之處,但對于索引、安全機制、數(shù)據(jù)完整性等特性是不具備的。在實際應(yīng)用中,我們目前由于簽約的客戶的數(shù)量不是很多,不足萬人,盡管我們只應(yīng)用了一臺服務(wù)器來存儲數(shù)據(jù),目前還沒有什么問題,但隨著簽約客戶的增多,不知會不會有問題。看來XML還是要發(fā)展,想取代數(shù)據(jù)庫還是需要一段時間的。還有,我們未將XML封裝進JavaBean,卻將部分應(yīng)用邏輯由XSLT來實現(xiàn),這種方法是否合適還有待探討,從某種程度來說是不符合慣例的,不僅僅是Web服務(wù)器負載的問題,它給編程人員和維護人員帶來的問題有些還是不可預(yù)計的。
我想,未來XML會成為數(shù)據(jù)交換的標(biāo)準的,我們也考慮逐步將我們現(xiàn)有的數(shù)據(jù)轉(zhuǎn)換成XML格式。接下來,我們還將在這些數(shù)據(jù)的基礎(chǔ)上,建立一個統(tǒng)一的,用XML實現(xiàn)通用WEB報表的系統(tǒng),在這方面已有了成功的案例?,F(xiàn)在,大部分數(shù)據(jù)庫支持XML格式的數(shù)據(jù)查詢和轉(zhuǎn)換,包括SQL Server 2000,ORACLE,IBM DB2等大型關(guān)系數(shù)據(jù)庫,估計會越來越多,我想以上問題也會很快得到解決的。
【編輯推薦】