周文軍
河北省交通通信管理局,河北 石家莊 050031
近年來(lái)隨著信息化建設(shè)的不斷推進(jìn),我國(guó)企業(yè)信息化和電子政務(wù)建設(shè)已經(jīng)進(jìn)入了一個(gè)新階段。在信息化建設(shè)過(guò)程中,各個(gè)企業(yè)和各個(gè)部門(mén)都出現(xiàn)了多個(gè)獨(dú)立系統(tǒng)并存的現(xiàn)象,這些系統(tǒng)出自不同的開(kāi)發(fā)商,不同的技術(shù)架構(gòu),就必然造成數(shù)據(jù)不能交換,不能共享,即所謂的‘信息孤島’問(wèn)題。另外,隨著我國(guó)電子政務(wù)各項(xiàng)工作的深入推進(jìn),以及網(wǎng)上企業(yè)年檢、銀稅共享工程等一批信息化應(yīng)用工程的建設(shè),許多政府部門(mén)需要共享機(jī)關(guān)、企業(yè)、事業(yè)和社團(tuán)等多種基礎(chǔ)信息。目前整體的IT戰(zhàn)略價(jià)值很難體現(xiàn),信息交換與共享勢(shì)在必行。
面對(duì)信息化過(guò)程中所遇見(jiàn)的這些困惑和需求,目前通常的做法是正面回避數(shù)據(jù)交換問(wèn)題,而是在架構(gòu)和平臺(tái)層面,通過(guò)XML技術(shù)和Web service技術(shù)[1,2,3]進(jìn)行數(shù)據(jù)、應(yīng)用、業(yè)務(wù)和流程層面的整合,實(shí)現(xiàn)應(yīng)用系統(tǒng)間的集成性、共享性、互操作性。面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architecture, SOA)作為開(kāi)放的Internet時(shí)代IT 體系結(jié)構(gòu)新樣式,雖然支持將業(yè)務(wù)作為鏈接服務(wù)或可重復(fù)業(yè)務(wù)任務(wù)進(jìn)行集成、跨網(wǎng)絡(luò)訪問(wèn)[3],但松耦合在帶來(lái)應(yīng)變敏捷性的同時(shí),也給業(yè)務(wù)建模和服務(wù)劃分帶來(lái)難題,并且對(duì)集成遺留系統(tǒng)的工作始終是一個(gè)挑戰(zhàn)。
文獻(xiàn)[2]通過(guò)建立交換中心來(lái)管理交換節(jié)點(diǎn)的服務(wù)注冊(cè)和異構(gòu)數(shù)據(jù)映射,帶來(lái)了實(shí)現(xiàn)和管理的復(fù)雜化。文獻(xiàn)[4]通過(guò)郵件方式交換數(shù)據(jù),但只是完成信息的整體添加。
在電子政務(wù)系統(tǒng)中,人們期望不同數(shù)據(jù)交換節(jié)點(diǎn)間以對(duì)等的方式進(jìn)行;在接口中定義每個(gè)節(jié)點(diǎn)的標(biāo)準(zhǔn)數(shù)據(jù)交換平臺(tái)的功能和邏輯表現(xiàn),雙方在對(duì)應(yīng)的協(xié)議層次上進(jìn)行對(duì)話。數(shù)據(jù)交換平臺(tái)把本屬各部門(mén)的異構(gòu)數(shù)據(jù)聯(lián)結(jié)起來(lái),在統(tǒng)一的接口的基礎(chǔ)之上,為每個(gè)單位的應(yīng)用系統(tǒng)提供了全局的、透明的數(shù)據(jù)交換和共享。
本文通過(guò)參照網(wǎng)絡(luò)信息交換的原理探討建立一種基于Socket(套接字)的通用數(shù)據(jù)交換系統(tǒng)(Universal Data Exchange System)UDE,旨在達(dá)到像網(wǎng)絡(luò)互聯(lián)那樣實(shí)現(xiàn)應(yīng)用系統(tǒng)間數(shù)據(jù)共享、互操作的目的。該模型支持在各種技術(shù)環(huán)境中實(shí)現(xiàn)系統(tǒng)之間的消息交換,并能在不同的編程語(yǔ)言和操作系統(tǒng)中應(yīng)用;對(duì)新業(yè)務(wù)需求的變化具有可擴(kuò)充性;設(shè)計(jì)了一個(gè)面向模式的規(guī)則驅(qū)動(dòng)的數(shù)據(jù)交換方法,該方法以關(guān)系模式為交換標(biāo)準(zhǔn),所有XML描述格式都通過(guò)關(guān)系模式這一中間標(biāo)準(zhǔn)完成交換,同時(shí)對(duì)交換雙方數(shù)據(jù)庫(kù)的異構(gòu)性進(jìn)行了技術(shù)性統(tǒng)一。
按照 ISO/OSI參考模型,模型建立在協(xié)議的最高層—應(yīng)用層,采取點(diǎn)對(duì)點(diǎn)對(duì)等通訊模式,由于是構(gòu)筑在星狀體系上的交換模式,所有的交換單體彼此是獨(dú)立的、相互無(wú)關(guān)的。數(shù)據(jù)交換功能的直接體現(xiàn)包括獲取、更新、添加、刪除等內(nèi)容。還包括信息的統(tǒng)一封裝,即信息的打包和應(yīng)用系統(tǒng)的統(tǒng)一編址,對(duì)傳輸?shù)倪^(guò)程進(jìn)行全程監(jiān)控,提供日志、審計(jì)、會(huì)話管理、傳輸優(yōu)先級(jí)設(shè)定、流量負(fù)荷分析等。在實(shí)際應(yīng)用中采用如圖1所示的連接方式。
圖1 UDE應(yīng)用示意圖
UDE實(shí)現(xiàn)多線程,負(fù)責(zé)接收和發(fā)送,在完成數(shù)據(jù)的查詢、修改的通信協(xié)議中,消息(Message)是數(shù)據(jù)交換的基本單位,通過(guò)消息傳遞的方式實(shí)現(xiàn)信息交換非常類(lèi)似于網(wǎng)絡(luò)的消息包傳遞方式。接收節(jié)點(diǎn)負(fù)責(zé)將消息解析成SQL語(yǔ)句,直接操作數(shù)據(jù)庫(kù)完成數(shù)據(jù)交換。
UDE工作原理如圖2所示:
2.2.1 Send/Receive module(發(fā)送/接收模塊):
采用TCP/IP通訊協(xié)議,發(fā)送方即提起服務(wù)申請(qǐng)方向接收方發(fā)送消息數(shù)據(jù)包,信息格式為符合特定標(biāo)準(zhǔn)的XML字符串格式。接收方接收并解析協(xié)議包,將解析后的信息組合成操作數(shù)據(jù)庫(kù)的SQL語(yǔ)句,更新數(shù)據(jù)庫(kù)或提取符合條件的數(shù)據(jù)并返回。每次接收完成后回復(fù)發(fā)送端一個(gè)ACK確認(rèn)信息,確認(rèn)信息已經(jīng)發(fā)送成功。
2.2.2 Message Parser/Builder module(消息包轉(zhuǎn)換模塊):
實(shí)現(xiàn)字符串格式數(shù)據(jù)與XML格式之間的相互轉(zhuǎn)換,對(duì)信息格式進(jìn)行檢查驗(yàn)證,保證發(fā)送/接收數(shù)據(jù)的正確完整性。
2.2.3 UDE API module(應(yīng)用接口模塊):
參與數(shù)據(jù)交換的應(yīng)用系統(tǒng)可以調(diào)用接口函數(shù),按照規(guī)定格式填寫(xiě)參數(shù),實(shí)現(xiàn)向其他應(yīng)用系統(tǒng)發(fā)送數(shù)據(jù)。該模塊也可以調(diào)用事件處理程序,接收其他應(yīng)用系統(tǒng)的數(shù)據(jù)消息。
2.2.4 DB Wrapper Adaptor module(數(shù)據(jù)庫(kù)轉(zhuǎn)接模塊):
圖2 UDE結(jié)構(gòu)
支持各種常見(jiàn)數(shù)據(jù)庫(kù)系統(tǒng)。在定義數(shù)據(jù)源連接時(shí),增加一項(xiàng)數(shù)據(jù)庫(kù)操作驅(qū)動(dòng)配置,用于隔離不同數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)驅(qū)動(dòng)的差異,使應(yīng)用系統(tǒng)做到與數(shù)據(jù)庫(kù)無(wú)關(guān)性,可以將應(yīng)用系統(tǒng)方便地移植到任何其它數(shù)據(jù)庫(kù)。
同時(shí)數(shù)據(jù)庫(kù)適配器DBAdapter還負(fù)責(zé):
維護(hù)Connection Wrapper對(duì)象集和映射連接: Connection Wrapper對(duì)象有名稱和打開(kāi)、關(guān)閉連接方法;
準(zhǔn)備Connection: 當(dāng)申請(qǐng)連接的新Connection Wrapper在對(duì)象集中有同名對(duì)象,則直接取該同名對(duì)象映射的已申請(qǐng)過(guò)的連接作為當(dāng)前連接進(jìn)行數(shù)據(jù)庫(kù)操作,否則調(diào)用新Connection Wrapper的方法取到連接作為當(dāng)前連接,并將對(duì)象和連接映射關(guān)系放進(jìn)對(duì)象集。
維護(hù)數(shù)據(jù)庫(kù)操作的事務(wù)完整性:對(duì)每個(gè)Connection Wrapper進(jìn)行提交和回滾,一旦出錯(cuò)自動(dòng)回滾。
釋放所有連接:除了通過(guò)正常方法釋放外,在它被回收時(shí)強(qiáng)制進(jìn)行所有連接的釋放。
2.2.5 Fields Mapping module(關(guān)系模式定義模塊):
采用ORM(Object Relational Mapping,對(duì)象關(guān)系映射)方式,提供數(shù)據(jù)交換雙方數(shù)據(jù)元的翻譯對(duì)照功能,可以進(jìn)行定制設(shè)置來(lái)提高系統(tǒng)的通用性,以系統(tǒng)唯一標(biāo)識(shí)(PROCID)以區(qū)分各系統(tǒng)。目的是在異構(gòu)關(guān)系數(shù)據(jù)庫(kù)之間建立元模型統(tǒng)一數(shù)據(jù)的語(yǔ)義。
2.2.6 SQL Generator module(SQL語(yǔ)句生成模塊):
根據(jù)數(shù)據(jù)庫(kù)適配器DBAdapter和Fields Map,將消息轉(zhuǎn)換成操作數(shù)據(jù)庫(kù)的SQL語(yǔ)句,減少接口API的復(fù)雜度以及對(duì)舊數(shù)據(jù)庫(kù)系統(tǒng)具有良好的兼容性。
在UDE通信協(xié)議中,消息(Message)是數(shù)據(jù)交換的基本單位,通過(guò)消息傳遞的方式實(shí)現(xiàn)信息交換非常類(lèi)似于網(wǎng)絡(luò)的消息包傳遞方式。信息由以下幾部分組成:
(1)信息頭(Message Header):包含包長(zhǎng)度和信息類(lèi)型(Message type)。包長(zhǎng)度用于判斷消息是否接收完畢,在生成消息時(shí)自動(dòng)添加。每種信息類(lèi)型用于定義信息目的和用途,如REQ表示請(qǐng)求,ANS表示返回信息,ACK表示消息應(yīng)答等。
(2)信息體(Message Body):是消息的主要載負(fù),即關(guān)系模式定義,包含操作類(lèi)型、字段類(lèi)型、數(shù)據(jù)狀態(tài)、數(shù)據(jù)等,使開(kāi)發(fā)人員更為方便的定義與實(shí)現(xiàn)查詢工作,例如查詢分頁(yè)功能的自動(dòng)處理機(jī)制,查尋條件的逃逸處理機(jī)制,查尋條件的復(fù)合匹配機(jī)制等。定義如圖3。
圖3 消息體定義
詳細(xì)XML定義示例如下:
operType=[add,updaate,delete,que ry],filteLevel表示該字段是否為過(guò)濾字段以及級(jí)別,如為0則表示為普通數(shù)據(jù),不為條件字段,級(jí)別相同且不為0的表示在形成條件語(yǔ)句時(shí)在一個(gè)括號(hào)內(nèi)。LogicOper為邏輯操作符(and或or),最后一個(gè)則忽略。Join描述多表間的連接關(guān)系。rowsPerPage和curPage實(shí)現(xiàn)分頁(yè)處理。
本文建立的基于消息的通用數(shù)據(jù)交換模型為應(yīng)用系統(tǒng)間數(shù)據(jù)交換提供了理論依據(jù)。據(jù)此,某公司設(shè)計(jì)開(kāi)發(fā)了一套醫(yī)保經(jīng)辦機(jī)構(gòu)與參保單位、定點(diǎn)醫(yī)療機(jī)構(gòu)、定點(diǎn)藥店、財(cái)稅部門(mén)、銀行、商業(yè)保險(xiǎn)公司、學(xué)校、社區(qū)等的數(shù)據(jù)交換平臺(tái),實(shí)現(xiàn)了與各部門(mén)的互聯(lián)。下面僅就銀行代收費(fèi)系統(tǒng)利用UDE數(shù)據(jù)交換模型的實(shí)現(xiàn)加以簡(jiǎn)單介紹。
1)消息傳輸模塊:主要實(shí)現(xiàn)消息的發(fā)送和接收,采用客戶機(jī)/服務(wù)器模式,采用TCP/IP協(xié)議進(jìn)行通信,利用Socket編程實(shí)現(xiàn)網(wǎng)絡(luò)通信。
在客戶端通過(guò)構(gòu)造一個(gè)Socket類(lèi)來(lái)建立與服務(wù)器的數(shù)據(jù)流連接,以服務(wù)器監(jiān)聽(tīng)套接字的IP地址和端口號(hào)為參數(shù),連接套接字建立好后,建立套接字的輸入、輸出流,然后分別用read()和write()函數(shù)從套接字輸入和輸出流中進(jìn)行讀、寫(xiě)數(shù)據(jù),進(jìn)行和服務(wù)器端的雙向通信。
在服務(wù)器端構(gòu)造一個(gè)ServerSocket類(lèi),然后利用accept()方法監(jiān)聽(tīng)服務(wù)器的端口是否有客戶端請(qǐng)求連接,如果有請(qǐng)求并連接成功,則創(chuàng)建套接字的輸入、輸出流,同客戶端進(jìn)行通信。
2)消息構(gòu)造、解析模塊:實(shí)現(xiàn)消息的解析和消息命令碼的執(zhí)行。
由于該系統(tǒng)功能相對(duì)簡(jiǎn)單、交換內(nèi)容較為固定,將請(qǐng)求消息封裝成幾個(gè)操作碼,如identity(getFee(提取該參保人員的應(yīng)繳費(fèi)信息)、feeOK(繳費(fèi)確認(rèn))、feeReturn(取消回退)。其它類(lèi)型消息按照模型格式設(shè)定。
3)數(shù)據(jù)庫(kù)接口:主要實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的查詢以及更新功能,通過(guò)嵌入式的SQL語(yǔ)句實(shí)現(xiàn)。
以下是系統(tǒng)部分關(guān)鍵Delphi示例代碼:
該系統(tǒng)通過(guò)實(shí)現(xiàn)UDE模型,使交換雙方的對(duì)接變得非常簡(jiǎn)單,交換系統(tǒng)不會(huì)過(guò)多地受技術(shù)環(huán)境的限制,如操作系統(tǒng)、應(yīng)用服務(wù)器、組件支持環(huán)境等,能避免動(dòng)態(tài)鏈接庫(kù)的泛濫,較好的保持系統(tǒng)的干凈程度。
本模型將數(shù)據(jù)交換的實(shí)質(zhì)功能——數(shù)據(jù)提取和更新,通過(guò)消息包的形式傳遞服務(wù)請(qǐng)求,最終翻譯成直接操作數(shù)據(jù)庫(kù)的SQL命令,來(lái)屏蔽交換雙方系統(tǒng)技術(shù)環(huán)境的差異,達(dá)到系統(tǒng)間對(duì)接容易、簡(jiǎn)單的目的。通過(guò)數(shù)據(jù)元對(duì)照和數(shù)據(jù)庫(kù)適配器功能,屏蔽數(shù)據(jù)源異構(gòu)性,實(shí)現(xiàn)數(shù)據(jù)表字段語(yǔ)義的一致性處理,達(dá)到系統(tǒng)通用性的效果。當(dāng)雙方需求有變化時(shí),只需要更新雙方的數(shù)據(jù)元對(duì)照信息即可,不會(huì)涉及再開(kāi)發(fā)問(wèn)題,僅僅是雙方授權(quán)的交換內(nèi)容的改變。
該模型能較好的解決應(yīng)用系統(tǒng)間數(shù)據(jù)交換的問(wèn)題,為在實(shí)際應(yīng)用中達(dá)到較好的效果,還要在細(xì)節(jié)問(wèn)題上多考慮,如數(shù)據(jù)壓縮減少網(wǎng)絡(luò)傳輸量,PKI機(jī)制實(shí)現(xiàn)身份認(rèn)證,關(guān)系模式定義隨著與之交換的系統(tǒng)的增多而增多問(wèn)題等。
[1]李冬睿,李梅等.一種電子政務(wù)數(shù)據(jù)交換模型的設(shè)計(jì)[J].微計(jì)算機(jī)信息,2010,2-3:154-155
[2]作者不詳. PowerDX創(chuàng)智數(shù)據(jù)交換平臺(tái)[EB/OL]. [2009-02-18].http://www.powerise.cn/GSCP/DZZW/2009-02/20090218031726Info_326f80ccb 516400a8c05cf174.html
[3]梅立軍,付小龍,劉啟新等. 基于 SOA 的數(shù)據(jù)交換平臺(tái)研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2008, 27(19):69 -71.
[4]崔學(xué)榮,李 娟. 一個(gè)基于Email的數(shù)據(jù)交換模型[J/OL][2010-01-29].電子技術(shù)應(yīng)用http://www.chinaaet.com/article/index.aspx?id=20203.