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