周文軍
河北省交通通信管理局,河北 石家莊 050031
近年來隨著信息化建設的不斷推進,我國企業信息化和電子政務建設已經進入了一個新階段。在信息化建設過程中,各個企業和各個部門都出現了多個獨立系統并存的現象,這些系統出自不同的開發商,不同的技術架構,就必然造成數據不能交換,不能共享,即所謂的‘信息孤島’問題。另外,隨著我國電子政務各項工作的深入推進,以及網上企業年檢、銀稅共享工程等一批信息化應用工程的建設,許多政府部門需要共享機關、企業、事業和社團等多種基礎信息。目前整體的IT戰略價值很難體現,信息交換與共享勢在必行。
面對信息化過程中所遇見的這些困惑和需求,目前通常的做法是正面回避數據交換問題,而是在架構和平臺層面,通過XML技術和Web service技術[1,2,3]進行數據、應用、業務和流程層面的整合,實現應用系統間的集成性、共享性、互操作性。面向服務的體系結構(Service-Oriented Architecture, SOA)作為開放的Internet時代IT 體系結構新樣式,雖然支持將業務作為鏈接服務或可重復業務任務進行集成、跨網絡訪問[3],但松耦合在帶來應變敏捷性的同時,也給業務建模和服務劃分帶來難題,并且對集成遺留系統的工作始終是一個挑戰。
文獻[2]通過建立交換中心來管理交換節點的服務注冊和異構數據映射,帶來了實現和管理的復雜化。文獻[4]通過郵件方式交換數據,但只是完成信息的整體添加。
在電子政務系統中,人們期望不同數據交換節點間以對等的方式進行;在接口中定義每個節點的標準數據交換平臺的功能和邏輯表現,雙方在對應的協議層次上進行對話。數據交換平臺把本屬各部門的異構數據聯結起來,在統一的接口的基礎之上,為每個單位的應用系統提供了全局的、透明的數據交換和共享。
本文通過參照網絡信息交換的原理探討建立一種基于Socket(套接字)的通用數據交換系統(Universal Data Exchange System)UDE,旨在達到像網絡互聯那樣實現應用系統間數據共享、互操作的目的。該模型支持在各種技術環境中實現系統之間的消息交換,并能在不同的編程語言和操作系統中應用;對新業務需求的變化具有可擴充性;設計了一個面向模式的規則驅動的數據交換方法,該方法以關系模式為交換標準,所有XML描述格式都通過關系模式這一中間標準完成交換,同時對交換雙方數據庫的異構性進行了技術性統一。
按照 ISO/OSI參考模型,模型建立在協議的最高層—應用層,采取點對點對等通訊模式,由于是構筑在星狀體系上的交換模式,所有的交換單體彼此是獨立的、相互無關的。數據交換功能的直接體現包括獲取、更新、添加、刪除等內容。還包括信息的統一封裝,即信息的打包和應用系統的統一編址,對傳輸的過程進行全程監控,提供日志、審計、會話管理、傳輸優先級設定、流量負荷分析等。在實際應用中采用如圖1所示的連接方式。

圖1 UDE應用示意圖
UDE實現多線程,負責接收和發送,在完成數據的查詢、修改的通信協議中,消息(Message)是數據交換的基本單位,通過消息傳遞的方式實現信息交換非常類似于網絡的消息包傳遞方式。接收節點負責將消息解析成SQL語句,直接操作數據庫完成數據交換。
UDE工作原理如圖2所示:
2.2.1 Send/Receive module(發送/接收模塊):
采用TCP/IP通訊協議,發送方即提起服務申請方向接收方發送消息數據包,信息格式為符合特定標準的XML字符串格式。接收方接收并解析協議包,將解析后的信息組合成操作數據庫的SQL語句,更新數據庫或提取符合條件的數據并返回。每次接收完成后回復發送端一個ACK確認信息,確認信息已經發送成功。
2.2.2 Message Parser/Builder module(消息包轉換模塊):
實現字符串格式數據與XML格式之間的相互轉換,對信息格式進行檢查驗證,保證發送/接收數據的正確完整性。
2.2.3 UDE API module(應用接口模塊):
參與數據交換的應用系統可以調用接口函數,按照規定格式填寫參數,實現向其他應用系統發送數據。該模塊也可以調用事件處理程序,接收其他應用系統的數據消息。
2.2.4 DB Wrapper Adaptor module(數據庫轉接模塊):

圖2 UDE結構
支持各種常見數據庫系統。在定義數據源連接時,增加一項數據庫操作驅動配置,用于隔離不同數據庫和數據庫驅動的差異,使應用系統做到與數據庫無關性,可以將應用系統方便地移植到任何其它數據庫。
同時數據庫適配器DBAdapter還負責:
維護Connection Wrapper對象集和映射連接: Connection Wrapper對象有名稱和打開、關閉連接方法;
準備Connection: 當申請連接的新Connection Wrapper在對象集中有同名對象,則直接取該同名對象映射的已申請過的連接作為當前連接進行數據庫操作,否則調用新Connection Wrapper的方法取到連接作為當前連接,并將對象和連接映射關系放進對象集。
維護數據庫操作的事務完整性:對每個Connection Wrapper進行提交和回滾,一旦出錯自動回滾。
釋放所有連接:除了通過正常方法釋放外,在它被回收時強制進行所有連接的釋放。
2.2.5 Fields Mapping module(關系模式定義模塊):
采用ORM(Object Relational Mapping,對象關系映射)方式,提供數據交換雙方數據元的翻譯對照功能,可以進行定制設置來提高系統的通用性,以系統唯一標識(PROCID)以區分各系統。目的是在異構關系數據庫之間建立元模型統一數據的語義。
2.2.6 SQL Generator module(SQL語句生成模塊):
根據數據庫適配器DBAdapter和Fields Map,將消息轉換成操作數據庫的SQL語句,減少接口API的復雜度以及對舊數據庫系統具有良好的兼容性。
在UDE通信協議中,消息(Message)是數據交換的基本單位,通過消息傳遞的方式實現信息交換非常類似于網絡的消息包傳遞方式。信息由以下幾部分組成:
(1)信息頭(Message Header):包含包長度和信息類型(Message type)。包長度用于判斷消息是否接收完畢,在生成消息時自動添加。每種信息類型用于定義信息目的和用途,如REQ表示請求,ANS表示返回信息,ACK表示消息應答等。
(2)信息體(Message Body):是消息的主要載負,即關系模式定義,包含操作類型、字段類型、數據狀態、數據等,使開發人員更為方便的定義與實現查詢工作,例如查詢分頁功能的自動處理機制,查尋條件的逃逸處理機制,查尋條件的復合匹配機制等。定義如圖3。

圖3 消息體定義
詳細XML定義示例如下:

operType=[add,updaate,delete,que ry],filteLevel表示該字段是否為過濾字段以及級別,如為0則表示為普通數據,不為條件字段,級別相同且不為0的表示在形成條件語句時在一個括號內。LogicOper為邏輯操作符(and或or),最后一個則忽略。Join描述多表間的連接關系。rowsPerPage和curPage實現分頁處理。
本文建立的基于消息的通用數據交換模型為應用系統間數據交換提供了理論依據。據此,某公司設計開發了一套醫保經辦機構與參保單位、定點醫療機構、定點藥店、財稅部門、銀行、商業保險公司、學校、社區等的數據交換平臺,實現了與各部門的互聯。下面僅就銀行代收費系統利用UDE數據交換模型的實現加以簡單介紹。
1)消息傳輸模塊:主要實現消息的發送和接收,采用客戶機/服務器模式,采用TCP/IP協議進行通信,利用Socket編程實現網絡通信。
在客戶端通過構造一個Socket類來建立與服務器的數據流連接,以服務器監聽套接字的IP地址和端口號為參數,連接套接字建立好后,建立套接字的輸入、輸出流,然后分別用read()和write()函數從套接字輸入和輸出流中進行讀、寫數據,進行和服務器端的雙向通信。
在服務器端構造一個ServerSocket類,然后利用accept()方法監聽服務器的端口是否有客戶端請求連接,如果有請求并連接成功,則創建套接字的輸入、輸出流,同客戶端進行通信。
2)消息構造、解析模塊:實現消息的解析和消息命令碼的執行。
由于該系統功能相對簡單、交換內容較為固定,將請求消息封裝成幾個操作碼,如identity(getFee(提取該參保人員的應繳費信息)、feeOK(繳費確認)、feeReturn(取消回退)。其它類型消息按照模型格式設定。
3)數據庫接口:主要實現對數據庫的查詢以及更新功能,通過嵌入式的SQL語句實現。
以下是系統部分關鍵Delphi示例代碼:

該系統通過實現UDE模型,使交換雙方的對接變得非常簡單,交換系統不會過多地受技術環境的限制,如操作系統、應用服務器、組件支持環境等,能避免動態鏈接庫的泛濫,較好的保持系統的干凈程度。
本模型將數據交換的實質功能——數據提取和更新,通過消息包的形式傳遞服務請求,最終翻譯成直接操作數據庫的SQL命令,來屏蔽交換雙方系統技術環境的差異,達到系統間對接容易、簡單的目的。通過數據元對照和數據庫適配器功能,屏蔽數據源異構性,實現數據表字段語義的一致性處理,達到系統通用性的效果。當雙方需求有變化時,只需要更新雙方的數據元對照信息即可,不會涉及再開發問題,僅僅是雙方授權的交換內容的改變。
該模型能較好的解決應用系統間數據交換的問題,為在實際應用中達到較好的效果,還要在細節問題上多考慮,如數據壓縮減少網絡傳輸量,PKI機制實現身份認證,關系模式定義隨著與之交換的系統的增多而增多問題等。
[1]李冬睿,李梅等.一種電子政務數據交換模型的設計[J].微計算機信息,2010,2-3:154-155
[2]作者不詳. PowerDX創智數據交換平臺[EB/OL]. [2009-02-18].http://www.powerise.cn/GSCP/DZZW/2009-02/20090218031726Info_326f80ccb 516400a8c05cf174.html
[3]梅立軍,付小龍,劉啟新等. 基于 SOA 的數據交換平臺研究與實現[J]. 計算機工程與設計,2008, 27(19):69 -71.
[4]崔學榮,李 娟. 一個基于Email的數據交換模型[J/OL][2010-01-29].電子技術應用http://www.chinaaet.com/article/index.aspx?id=20203.