葛從兵 李榮輝 陳劍
摘要:為將大壩監(jiān)測(cè)信息從分散在各地的監(jiān)測(cè)數(shù)據(jù)庫匯集至中心數(shù)據(jù)庫,采用CXF框架,設(shè)計(jì)并實(shí)現(xiàn)了信息匯集通用系統(tǒng)。通過簡(jiǎn)單配置,即可將監(jiān)測(cè)信息匯集至中心數(shù)據(jù)庫,方便水庫主管部門對(duì)監(jiān)測(cè)信息進(jìn)行處理、分析,以保障大壩安全運(yùn)行。
關(guān)鍵詞關(guān)鍵詞:CXF;Spring;信息匯集;ETL;XML
DOIDOI:10.11907/rjdk.171720
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2017)011010404
0引言
水庫是調(diào)控水資源時(shí)空分布、優(yōu)化水資源配置及防洪減災(zāi)的重要工程。水庫在發(fā)揮效益的同時(shí),也存在一定風(fēng)險(xiǎn),一旦失事,后果不堪設(shè)想。為及時(shí)發(fā)現(xiàn)大壩安全隱患,越來越多的水庫建立了大壩安全監(jiān)測(cè)信息系統(tǒng)。但由于水庫基層管理單位缺乏技術(shù)人員,對(duì)監(jiān)測(cè)信息進(jìn)行處理、分析能力有限,需將監(jiān)測(cè)信息匯集至技術(shù)力量雄厚的水庫主管部門,由專家依據(jù)監(jiān)測(cè)信息,對(duì)大壩安全狀況進(jìn)行評(píng)估,指導(dǎo)基層單位日常安全管理工作。大壩安全監(jiān)測(cè)信息系統(tǒng)由不同承建商在不同時(shí)期建設(shè),數(shù)據(jù)存儲(chǔ)差異大,若針對(duì)每個(gè)監(jiān)測(cè)信息系統(tǒng)開發(fā)信息匯集系統(tǒng),不僅工作量大,而且信息匯集穩(wěn)定性也得不到保證。本文對(duì)CXF[1]、Spring[2]、ETL[3]、XML[4]進(jìn)行研究,設(shè)計(jì)并實(shí)現(xiàn)基于CXF的信息匯集通用系統(tǒng)。
1系統(tǒng)設(shè)計(jì)
1.1系統(tǒng)功能與結(jié)構(gòu)
信息匯集通用系統(tǒng)將監(jiān)測(cè)信息從分散在各地的大壩安全監(jiān)測(cè)數(shù)據(jù)庫匯集至水庫主管部門的中心數(shù)據(jù)庫。信息匯集通用系統(tǒng)主要功能有:①?gòu)牟煌愋偷拇髩伟踩O(jiān)測(cè)數(shù)據(jù)庫中提取監(jiān)測(cè)信息;②將原監(jiān)測(cè)信息轉(zhuǎn)為與中心數(shù)據(jù)庫表結(jié)構(gòu)一致的監(jiān)測(cè)信息;③將監(jiān)測(cè)信息加載至中心數(shù)據(jù)庫;④定時(shí)自動(dòng)地將實(shí)時(shí)監(jiān)測(cè)信息匯集至中心數(shù)據(jù)庫;⑤人工將某時(shí)段歷史監(jiān)測(cè)信息匯集至中心數(shù)據(jù)庫。
信息匯集通用系統(tǒng)由一個(gè)服務(wù)端和多個(gè)客戶端組成。服務(wù)端位于水庫主管部門,負(fù)責(zé)接收監(jiān)測(cè)信息,并將其加載至中心數(shù)據(jù)庫??蛻舳朔植荚诟魉畮?,從大壩安全監(jiān)測(cè)數(shù)據(jù)庫提取信息,轉(zhuǎn)換、發(fā)送至服務(wù)端。信息匯集通用系統(tǒng)結(jié)構(gòu)見圖1。
圖1信息匯集系統(tǒng)結(jié)構(gòu)
1.2數(shù)據(jù)網(wǎng)絡(luò)傳輸
因特網(wǎng)傳輸數(shù)據(jù)可采用Socket、HTTPService、WebService等方式。Socket基于TCP/IP傳輸層協(xié)議,通過流進(jìn)行數(shù)據(jù)傳輸,不支持面向?qū)ο?,適用于傳輸大數(shù)據(jù)量數(shù)據(jù)。Socket數(shù)據(jù)傳輸格式不固定,通信協(xié)議需自定義,要自己解析發(fā)送和接收數(shù)據(jù)。HTTPService基于HTTP協(xié)議,通過GET或POST方法傳輸數(shù)據(jù)。HTTPService傳輸效率較高,但不能跨域訪問。WebService基于SOAP協(xié)議,數(shù)據(jù)格式固定,支持面向?qū)ο螅商幚韽?fù)雜的數(shù)據(jù)類型。由于WebService經(jīng)過兩次序列化,導(dǎo)致傳輸速度慢,適用于傳輸性能要求不高的小數(shù)據(jù)量數(shù)據(jù)。由于大壩安全監(jiān)測(cè)信息結(jié)構(gòu)復(fù)雜,采集頻率低(1次/日),故信息匯集采用WebService。
WebService服務(wù)端實(shí)現(xiàn)服務(wù)接口,發(fā)布XML格式的WSDL服務(wù)描述文件供客戶端調(diào)用??蛻舳苏{(diào)用服務(wù)接口時(shí),將生成SOAP請(qǐng)求,并將SOAP請(qǐng)求嵌入到HTTP POST,發(fā)送至服務(wù)端的Web服務(wù)器。Web服務(wù)器將SOAP請(qǐng)求轉(zhuǎn)發(fā)給WebService處理器。WebService處理器解析SOAP請(qǐng)求,調(diào)用WebService,生成相應(yīng)的SOAP應(yīng)答。Web服務(wù)器收到SOAP應(yīng)答后,采用HTTP應(yīng)答方式將其返回至客戶端。WebService架構(gòu)見圖2。
圖2WebService架構(gòu)
1.3CXF和Spring
.Net和J2EE都可開發(fā)WebService,其中J2EE有多種實(shí)現(xiàn)方式,如CXF、Xfire、Axis2、Axis1、JAXWS等,本系統(tǒng)采用CXF+Spring構(gòu)建WebService。
Apache CXF是一個(gè)開源Services框架,它繼承了Celtix和XFire,利用Frontend編程API開發(fā)Services。這些Services支持SOAP、XML/HTTP、RESTful HTTP、CORBA等協(xié)議,可在HTTP、JMS、JBI等傳輸協(xié)議上運(yùn)行。CXF可根據(jù)實(shí)際需要,采用代碼優(yōu)先(Code First)或WSDL優(yōu)先(WSDL First)實(shí)現(xiàn)WebService發(fā)布和使用。CXF簡(jiǎn)化了WebService創(chuàng)建,可與Spring 無縫集成。
Spring是一個(gè)分層的JavaSE/EE fullstack輕量級(jí)開源框架,由核心容器、Spring上下文、Spring AOP、Spring DAO、Spring ORM、Spring Web、Spring MVC等7個(gè)模塊組成,核心容器定義了創(chuàng)建、配置和管理bean的方式,其它模塊建立在核心容器之上。每個(gè)模塊既可以單獨(dú)運(yùn)行,又可以與其它模塊聯(lián)合運(yùn)行。Spring提供了依賴注入(DI)與控制反轉(zhuǎn)(IoC)以及面向切面編程(AOP)。
1.4ETL
ETL(ExtractTransformLoad)是數(shù)據(jù)從源端經(jīng)過提取、轉(zhuǎn)換、加載到達(dá)目的端的過程。本系統(tǒng)的信息匯集是一個(gè)ETL過程:信息提取、信息轉(zhuǎn)換、信息加載。
從水庫現(xiàn)場(chǎng)大壩安全監(jiān)測(cè)數(shù)據(jù)庫的相關(guān)表中提取所需信息。信息提取需要知道大壩安全監(jiān)測(cè)數(shù)據(jù)庫管理系統(tǒng)及表結(jié)構(gòu)。信息轉(zhuǎn)換是將提取的信息轉(zhuǎn)換為符合中心數(shù)據(jù)庫要求的信息,包括信息拆分、信息重組、數(shù)據(jù)類型及長(zhǎng)度變換等。信息轉(zhuǎn)換需要知道大壩安全監(jiān)測(cè)數(shù)據(jù)庫與中心數(shù)據(jù)庫表結(jié)構(gòu)之間的對(duì)應(yīng)關(guān)系。信息加載是指將轉(zhuǎn)換后的信息插入至中心數(shù)據(jù)庫相關(guān)表。
信息提取和信息轉(zhuǎn)換在客戶端完成??蛻舳擞肧elect語句從大壩安全監(jiān)測(cè)數(shù)據(jù)庫提取信息,生成與中心數(shù)據(jù)庫相關(guān)表一致的JSON字符串。信息轉(zhuǎn)換可在Select語句里或/和生成JSON字符串時(shí)完成。信息加載由服務(wù)端完成。WebService接收J(rèn)SON字符串,用Insert語句將監(jiān)測(cè)信息加載至中心數(shù)據(jù)庫。在加載信息前,為避免數(shù)據(jù)重復(fù),違反主鍵約束,先用Delete語句刪除這一時(shí)段的監(jiān)測(cè)信息。endprint
2系統(tǒng)實(shí)現(xiàn)
信息匯集通用系統(tǒng)由服務(wù)端和客戶端組成。服務(wù)端數(shù)據(jù)庫管理系統(tǒng)采用MySQL,開發(fā)語言為Java,集成開發(fā)環(huán)境為Eclipse;客戶端能連接常用數(shù)據(jù)庫管理系統(tǒng),開發(fā)語言為C#,集成開發(fā)環(huán)境為Microsoft Visual Studio。
2.1服務(wù)端
服務(wù)端實(shí)現(xiàn)WebService,采用CXF+Spring+MyBatis框架,由持久層、DAO層、服務(wù)層、Web服務(wù)層組成。持久層由實(shí)體類組成,每個(gè)實(shí)體類對(duì)應(yīng)于中心數(shù)據(jù)庫中一個(gè)監(jiān)測(cè)數(shù)據(jù)表,其屬性與字段對(duì)應(yīng),并實(shí)現(xiàn)屬性get/set方法。DAO層由DAO類和MyBatis映射配置文件組成,DAO類定義數(shù)據(jù)插入和刪除方法,映射配置文件包含插入語句映射和刪除語句映射。服務(wù)層由服務(wù)接口和實(shí)現(xiàn)類組成,服務(wù)接口定義插入和刪除方法。類實(shí)現(xiàn)這些方法,主要是調(diào)用DAO類的插入和刪除方法。Web服務(wù)層由Web服務(wù)接口和實(shí)現(xiàn)類組成,Web服務(wù)接口Upload定義DeleteMeasureData和UploadMeasureData方法。根據(jù)參數(shù),先調(diào)用相應(yīng)服務(wù)接口的刪除方法,刪除相應(yīng)表中同一時(shí)段監(jiān)測(cè)信息,然后將客戶端發(fā)送的JSON數(shù)據(jù)轉(zhuǎn)換為實(shí)體對(duì)象,調(diào)用相應(yīng)服務(wù)接口插入方法,將實(shí)體對(duì)象中監(jiān)測(cè)信息插入至數(shù)據(jù)庫相應(yīng)表。
采用CXF實(shí)現(xiàn)WebService,需在Web部署文件中增加CXF servlet:
同時(shí),還需配置WebService的端點(diǎn)(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服務(wù),見圖3。
圖3Web服務(wù)及其方法
2.2客戶端
客戶端采用C/S模式,從水庫現(xiàn)場(chǎng)大壩安全監(jiān)測(cè)數(shù)據(jù)庫提取信息,發(fā)送至水庫主管部門的中心數(shù)據(jù)庫。
為了連接不同類型數(shù)據(jù)庫并進(jìn)行相應(yīng)數(shù)據(jù)轉(zhuǎn)換,通過配置文件控制信息匯集過程:
InformationCollection元素表示一個(gè)信息匯集過程,包含匯集過程所有SQL語句。SourceConnection元素為大壩安全監(jiān)測(cè)數(shù)據(jù)庫的連接字符串。Delete中Table為要?jiǎng)h除數(shù)據(jù)的表名。Insert中Table為要插入數(shù)據(jù)的表名;FieldNum為從SelectSQL傳遞至JSonString的字段數(shù);SelectSQL為從數(shù)據(jù)庫中提取信息的SQL語句,其Where子句中,開始時(shí)間和結(jié)束時(shí)間采用保留字符串“STTM”和“ENTM”;JSonString為采用JSON格式的監(jiān)測(cè)信息字符串,其中保留字符串“FIELD0”、“FIELD1”、…為來自SelectSQL第1列、第2列、…的數(shù)據(jù)。endprint
為了保證客戶端通用性,采用OLEDB連接不同類型數(shù)據(jù)庫,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"
例如:中心數(shù)據(jù)庫和大壩安全監(jiān)測(cè)數(shù)據(jù)庫中滲流壓力監(jiān)測(cè)表結(jié)構(gòu)為圖4,則信息匯集配置如下:
圖4滲流壓力監(jiān)測(cè)表結(jié)構(gòu)
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結(jié)語
本文采用CXF+Spring+MyBatis框架開發(fā)信息匯集通用系統(tǒng)服務(wù)端,為客戶端提供WebService,將客戶端發(fā)送的監(jiān)測(cè)信息加載至中心數(shù)據(jù)庫。采用C#開發(fā)信息匯集通用系統(tǒng)客戶端,通過XML配置文件,控制監(jiān)測(cè)信息的提取、轉(zhuǎn)換、傳送過程。信息匯集通用系統(tǒng)客戶端能夠與不同的大壩安全監(jiān)測(cè)數(shù)據(jù)庫連接,使系統(tǒng)具有通用性,降低了信息匯集工作難度,節(jié)省了時(shí)間和成本。信息匯集通用系統(tǒng)可定時(shí)自動(dòng)匯集實(shí)時(shí)監(jiān)測(cè)信息,也可人工匯集某時(shí)段歷史監(jiān)測(cè)信息?;贑XF的信息匯集通用系統(tǒng)已用于廣西壯族自治區(qū)大壩安全監(jiān)測(cè)信息匯集工作,效果良好。
參考文獻(xiàn)參考文獻(xiàn):
[1]任鋼.基于Apache CXF構(gòu)建SOA應(yīng)用[M].北京:電子工業(yè)出版社,2013:5065.
[2]賈蓓,鎮(zhèn)明敏,杜磊,等.Java Web整合開發(fā)實(shí)戰(zhàn)[M].北京:清華大學(xué)出版社,2013:456531.
[3]ANHAI DOAN,ALON HALEVY,ZACHARY IVES.數(shù)據(jù)集成原理[M].孟小峰,馬如霞,馬友忠,譯.北京:機(jī)械工業(yè)出版社,2014:201203.
[4]JOE FAWCETT,LIAM R E QUIN,DANNY AYERS.XML入門經(jīng)典[M].第5版.劉云鵬,王超,譯.北京:清華大學(xué)出版社,2013:3233.
責(zé)任編輯(責(zé)任編輯:杜能鋼)endprint