葛從兵 李榮輝 陳劍


摘要:為將大壩監測信息從分散在各地的監測數據庫匯集至中心數據庫,采用CXF框架,設計并實現了信息匯集通用系統。通過簡單配置,即可將監測信息匯集至中心數據庫,方便水庫主管部門對監測信息進行處理、分析,以保障大壩安全運行。
關鍵詞關鍵詞:CXF;Spring;信息匯集;ETL;XML
DOIDOI:10.11907/rjdk.171720
中圖分類號:TP319
文獻標識碼:A文章編號文章編號:16727800(2017)011010404
0引言
水庫是調控水資源時空分布、優化水資源配置及防洪減災的重要工程。水庫在發揮效益的同時,也存在一定風險,一旦失事,后果不堪設想。為及時發現大壩安全隱患,越來越多的水庫建立了大壩安全監測信息系統。但由于水庫基層管理單位缺乏技術人員,對監測信息進行處理、分析能力有限,需將監測信息匯集至技術力量雄厚的水庫主管部門,由專家依據監測信息,對大壩安全狀況進行評估,指導基層單位日常安全管理工作。大壩安全監測信息系統由不同承建商在不同時期建設,數據存儲差異大,若針對每個監測信息系統開發信息匯集系統,不僅工作量大,而且信息匯集穩定性也得不到保證。本文對CXF[1]、Spring[2]、ETL[3]、XML[4]進行研究,設計并實現基于CXF的信息匯集通用系統。
1系統設計
1.1系統功能與結構
信息匯集通用系統將監測信息從分散在各地的大壩安全監測數據庫匯集至水庫主管部門的中心數據庫。信息匯集通用系統主要功能有:①從不同類型的大壩安全監測數據庫中提取監測信息;②將原監測信息轉為與中心數據庫表結構一致的監測信息;③將監測信息加載至中心數據庫;④定時自動地將實時監測信息匯集至中心數據庫;⑤人工將某時段歷史監測信息匯集至中心數據庫。
信息匯集通用系統由一個服務端和多個客戶端組成。服務端位于水庫主管部門,負責接收監測信息,并將其加載至中心數據庫。客戶端分布在各水庫,從大壩安全監測數據庫提取信息,轉換、發送至服務端。信息匯集通用系統結構見圖1。
圖1信息匯集系統結構
1.2數據網絡傳輸
因特網傳輸數據可采用Socket、HTTPService、WebService等方式。Socket基于TCP/IP傳輸層協議,通過流進行數據傳輸,不支持面向對象,適用于傳輸大數據量數據。Socket數據傳輸格式不固定,通信協議需自定義,要自己解析發送和接收數據。HTTPService基于HTTP協議,通過GET或POST方法傳輸數據。HTTPService傳輸效率較高,但不能跨域訪問。WebService基于SOAP協議,數據格式固定,支持面向對象,可處理復雜的數據類型。由于WebService經過兩次序列化,導致傳輸速度慢,適用于傳輸性能要求不高的小數據量數據。由于大壩安全監測信息結構復雜,采集頻率低(1次/日),故信息匯集采用WebService。
WebService服務端實現服務接口,發布XML格式的WSDL服務描述文件供客戶端調用。客戶端調用服務接口時,將生成SOAP請求,并將SOAP請求嵌入到HTTP POST,發送至服務端的Web服務器。Web服務器將SOAP請求轉發給WebService處理器。WebService處理器解析SOAP請求,調用WebService,生成相應的SOAP應答。Web服務器收到SOAP應答后,采用HTTP應答方式將其返回至客戶端。WebService架構見圖2。
圖2WebService架構
1.3CXF和Spring
.Net和J2EE都可開發WebService,其中J2EE有多種實現方式,如CXF、Xfire、Axis2、Axis1、JAXWS等,本系統采用CXF+Spring構建WebService。
Apache CXF是一個開源Services框架,它繼承了Celtix和XFire,利用Frontend編程API開發Services。這些Services支持SOAP、XML/HTTP、RESTful HTTP、CORBA等協議,可在HTTP、JMS、JBI等傳輸協議上運行。CXF可根據實際需要,采用代碼優先(Code First)或WSDL優先(WSDL First)實現WebService發布和使用。CXF簡化了WebService創建,可與Spring 無縫集成。
Spring是一個分層的JavaSE/EE fullstack輕量級開源框架,由核心容器、Spring上下文、Spring AOP、Spring DAO、Spring ORM、Spring Web、Spring MVC等7個模塊組成,核心容器定義了創建、配置和管理bean的方式,其它模塊建立在核心容器之上。每個模塊既可以單獨運行,又可以與其它模塊聯合運行。Spring提供了依賴注入(DI)與控制反轉(IoC)以及面向切面編程(AOP)。
1.4ETL
ETL(ExtractTransformLoad)是數據從源端經過提取、轉換、加載到達目的端的過程。本系統的信息匯集是一個ETL過程:信息提取、信息轉換、信息加載。
從水庫現場大壩安全監測數據庫的相關表中提取所需信息。信息提取需要知道大壩安全監測數據庫管理系統及表結構。信息轉換是將提取的信息轉換為符合中心數據庫要求的信息,包括信息拆分、信息重組、數據類型及長度變換等。信息轉換需要知道大壩安全監測數據庫與中心數據庫表結構之間的對應關系。信息加載是指將轉換后的信息插入至中心數據庫相關表。
信息提取和信息轉換在客戶端完成。客戶端用Select語句從大壩安全監測數據庫提取信息,生成與中心數據庫相關表一致的JSON字符串。信息轉換可在Select語句里或/和生成JSON字符串時完成。信息加載由服務端完成。WebService接收JSON字符串,用Insert語句將監測信息加載至中心數據庫。在加載信息前,為避免數據重復,違反主鍵約束,先用Delete語句刪除這一時段的監測信息。endprint
2系統實現
信息匯集通用系統由服務端和客戶端組成。服務端數據庫管理系統采用MySQL,開發語言為Java,集成開發環境為Eclipse;客戶端能連接常用數據庫管理系統,開發語言為C#,集成開發環境為Microsoft Visual Studio。
2.1服務端
服務端實現WebService,采用CXF+Spring+MyBatis框架,由持久層、DAO層、服務層、Web服務層組成。持久層由實體類組成,每個實體類對應于中心數據庫中一個監測數據表,其屬性與字段對應,并實現屬性get/set方法。DAO層由DAO類和MyBatis映射配置文件組成,DAO類定義數據插入和刪除方法,映射配置文件包含插入語句映射和刪除語句映射。服務層由服務接口和實現類組成,服務接口定義插入和刪除方法。類實現這些方法,主要是調用DAO類的插入和刪除方法。Web服務層由Web服務接口和實現類組成,Web服務接口Upload定義DeleteMeasureData和UploadMeasureData方法。根據參數,先調用相應服務接口的刪除方法,刪除相應表中同一時段監測信息,然后將客戶端發送的JSON數據轉換為實體對象,調用相應服務接口插入方法,將實體對象中監測信息插入至數據庫相應表。
采用CXF實現WebService,需在Web部署文件中增加CXF servlet:
同時,還需配置WebService的端點(endpoint):
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springbeans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> address="/Upload"/>
通過瀏覽器可瀏覽Web服務,見圖3。
圖3Web服務及其方法
2.2客戶端
客戶端采用C/S模式,從水庫現場大壩安全監測數據庫提取信息,發送至水庫主管部門的中心數據庫。
為了連接不同類型數據庫并進行相應數據轉換,通過配置文件控制信息匯集過程:
InformationCollection元素表示一個信息匯集過程,包含匯集過程所有SQL語句。SourceConnection元素為大壩安全監測數據庫的連接字符串。Delete中Table為要刪除數據的表名。Insert中Table為要插入數據的表名;FieldNum為從SelectSQL傳遞至JSonString的字段數;SelectSQL為從數據庫中提取信息的SQL語句,其Where子句中,開始時間和結束時間采用保留字符串“STTM”和“ENTM”;JSonString為采用JSON格式的監測信息字符串,其中保留字符串“FIELD0”、“FIELD1”、…為來自SelectSQL第1列、第2列、…的數據。endprint
為了保證客戶端通用性,采用OLEDB連接不同類型數據庫,SourceConnection元素中典型的連接字符串代碼如下:
(1)Oracle:"Provider=MSDAORA;Data Source=;User ID=myUsername;Password=myPassword"
(2)SQL Server:"Provider=SQLOLEDB;Data Source=(local); Initial Catalog=mydb;User ID=myUsername;Password=myPassword"
(3)MySQL:"Provider=OleMySql.MySqlSource.1;Data Source=(local);Initial Catalog=mydb;User ID=myUsername;Password=myPassword"
(4)Access:"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\bin\\LocalAccess40.mdb"
例如:中心數據庫和大壩安全監測數據庫中滲流壓力監測表結構為圖4,則信息匯集配置如下:
圖4滲流壓力監測表結構
User ID=sa;Password=sa
egs_sppr_r
egs_sppr_r
mi_sppr_m WHERE msdt>='STTM' and msdt<='ENTM' and wl is not null and tm is not null]] >
'tm':'FIELD4','spprwl':'FIELD5'}]] >
3結語
本文采用CXF+Spring+MyBatis框架開發信息匯集通用系統服務端,為客戶端提供WebService,將客戶端發送的監測信息加載至中心數據庫。采用C#開發信息匯集通用系統客戶端,通過XML配置文件,控制監測信息的提取、轉換、傳送過程。信息匯集通用系統客戶端能夠與不同的大壩安全監測數據庫連接,使系統具有通用性,降低了信息匯集工作難度,節省了時間和成本。信息匯集通用系統可定時自動匯集實時監測信息,也可人工匯集某時段歷史監測信息。基于CXF的信息匯集通用系統已用于廣西壯族自治區大壩安全監測信息匯集工作,效果良好。
參考文獻參考文獻:
[1]任鋼.基于Apache CXF構建SOA應用[M].北京:電子工業出版社,2013:5065.
[2]賈蓓,鎮明敏,杜磊,等.Java Web整合開發實戰[M].北京:清華大學出版社,2013:456531.
[3]ANHAI DOAN,ALON HALEVY,ZACHARY IVES.數據集成原理[M].孟小峰,馬如霞,馬友忠,譯.北京:機械工業出版社,2014:201203.
[4]JOE FAWCETT,LIAM R E QUIN,DANNY AYERS.XML入門經典[M].第5版.劉云鵬,王超,譯.北京:清華大學出版社,2013:3233.
責任編輯(責任編輯:杜能鋼)endprint