• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于CXF的信息匯集通用系統(tǒng)設(shè)計與實現(xiàn)

      2017-12-02 09:02:53葛從兵李榮輝陳劍
      軟件導(dǎo)刊 2017年11期

      葛從兵 李榮輝 陳劍

      摘要:為將大壩監(jiān)測信息從分散在各地的監(jiān)測數(shù)據(jù)庫匯集至中心數(shù)據(jù)庫,采用CXF框架,設(shè)計并實現(xiàn)了信息匯集通用系統(tǒng)。通過簡單配置,即可將監(jiān)測信息匯集至中心數(shù)據(jù)庫,方便水庫主管部門對監(jiān)測信息進行處理、分析,以保障大壩安全運行。

      關(guān)鍵詞關(guān)鍵詞:CXF;Spring;信息匯集;ETL;XML

      DOIDOI:10.11907/rjdk.171720

      中圖分類號:TP319

      文獻標識碼:A文章編號文章編號:16727800(2017)011010404

      0引言

      水庫是調(diào)控水資源時空分布、優(yōu)化水資源配置及防洪減災(zāi)的重要工程。水庫在發(fā)揮效益的同時,也存在一定風險,一旦失事,后果不堪設(shè)想。為及時發(fā)現(xiàn)大壩安全隱患,越來越多的水庫建立了大壩安全監(jiān)測信息系統(tǒng)。但由于水庫基層管理單位缺乏技術(shù)人員,對監(jiān)測信息進行處理、分析能力有限,需將監(jiān)測信息匯集至技術(shù)力量雄厚的水庫主管部門,由專家依據(jù)監(jiān)測信息,對大壩安全狀況進行評估,指導(dǎo)基層單位日常安全管理工作。大壩安全監(jiān)測信息系統(tǒng)由不同承建商在不同時期建設(shè),數(shù)據(jù)存儲差異大,若針對每個監(jiān)測信息系統(tǒng)開發(fā)信息匯集系統(tǒng),不僅工作量大,而且信息匯集穩(wěn)定性也得不到保證。本文對CXF[1]、Spring[2]、ETL[3]、XML[4]進行研究,設(shè)計并實現(xiàn)基于CXF的信息匯集通用系統(tǒng)。

      1系統(tǒng)設(shè)計

      1.1系統(tǒng)功能與結(jié)構(gòu)

      信息匯集通用系統(tǒng)將監(jiān)測信息從分散在各地的大壩安全監(jiān)測數(shù)據(jù)庫匯集至水庫主管部門的中心數(shù)據(jù)庫。信息匯集通用系統(tǒng)主要功能有:①從不同類型的大壩安全監(jiān)測數(shù)據(jù)庫中提取監(jiān)測信息;②將原監(jiān)測信息轉(zhuǎn)為與中心數(shù)據(jù)庫表結(jié)構(gòu)一致的監(jiān)測信息;③將監(jiān)測信息加載至中心數(shù)據(jù)庫;④定時自動地將實時監(jiān)測信息匯集至中心數(shù)據(jù)庫;⑤人工將某時段歷史監(jiān)測信息匯集至中心數(shù)據(jù)庫。

      信息匯集通用系統(tǒng)由一個服務(wù)端和多個客戶端組成。服務(wù)端位于水庫主管部門,負責接收監(jiān)測信息,并將其加載至中心數(shù)據(jù)庫??蛻舳朔植荚诟魉畮?,從大壩安全監(jiān)測數(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é)議,通過流進行數(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)測信息結(jié)構(gòu)復(fù)雜,采集頻率低(1次/日),故信息匯集采用WebService。

      WebService服務(wù)端實現(xiàn)服務(wù)接口,發(fā)布XML格式的WSDL服務(wù)描述文件供客戶端調(diào)用。客戶端調(diào)用服務(wù)接口時,將生成SOAP請求,并將SOAP請求嵌入到HTTP POST,發(fā)送至服務(wù)端的Web服務(wù)器。Web服務(wù)器將SOAP請求轉(zhuǎn)發(fā)給WebService處理器。WebService處理器解析SOAP請求,調(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有多種實現(xiàn)方式,如CXF、Xfire、Axis2、Axis1、JAXWS等,本系統(tǒng)采用CXF+Spring構(gòu)建WebService。

      Apache CXF是一個開源Services框架,它繼承了Celtix和XFire,利用Frontend編程API開發(fā)Services。這些Services支持SOAP、XML/HTTP、RESTful HTTP、CORBA等協(xié)議,可在HTTP、JMS、JBI等傳輸協(xié)議上運行。CXF可根據(jù)實際需要,采用代碼優(yōu)先(Code First)或WSDL優(yōu)先(WSDL First)實現(xiàn)WebService發(fā)布和使用。CXF簡化了WebService創(chuàng)建,可與Spring 無縫集成。

      Spring是一個分層的JavaSE/EE fullstack輕量級開源框架,由核心容器、Spring上下文、Spring AOP、Spring DAO、Spring ORM、Spring Web、Spring MVC等7個模塊組成,核心容器定義了創(chuàng)建、配置和管理bean的方式,其它模塊建立在核心容器之上。每個模塊既可以單獨運行,又可以與其它模塊聯(lián)合運行。Spring提供了依賴注入(DI)與控制反轉(zhuǎn)(IoC)以及面向切面編程(AOP)。

      1.4ETL

      ETL(ExtractTransformLoad)是數(shù)據(jù)從源端經(jīng)過提取、轉(zhuǎn)換、加載到達目的端的過程。本系統(tǒng)的信息匯集是一個ETL過程:信息提取、信息轉(zhuǎn)換、信息加載。

      從水庫現(xiàn)場大壩安全監(jiān)測數(shù)據(jù)庫的相關(guān)表中提取所需信息。信息提取需要知道大壩安全監(jiān)測數(shù)據(jù)庫管理系統(tǒng)及表結(jié)構(gòu)。信息轉(zhuǎn)換是將提取的信息轉(zhuǎn)換為符合中心數(shù)據(jù)庫要求的信息,包括信息拆分、信息重組、數(shù)據(jù)類型及長度變換等。信息轉(zhuǎn)換需要知道大壩安全監(jiān)測數(shù)據(jù)庫與中心數(shù)據(jù)庫表結(jié)構(gòu)之間的對應(yīng)關(guān)系。信息加載是指將轉(zhuǎn)換后的信息插入至中心數(shù)據(jù)庫相關(guān)表。

      信息提取和信息轉(zhuǎn)換在客戶端完成??蛻舳擞肧elect語句從大壩安全監(jiān)測數(shù)據(jù)庫提取信息,生成與中心數(shù)據(jù)庫相關(guān)表一致的JSON字符串。信息轉(zhuǎn)換可在Select語句里或/和生成JSON字符串時完成。信息加載由服務(wù)端完成。WebService接收JSON字符串,用Insert語句將監(jiān)測信息加載至中心數(shù)據(jù)庫。在加載信息前,為避免數(shù)據(jù)重復(fù),違反主鍵約束,先用Delete語句刪除這一時段的監(jiān)測信息。endprint

      2系統(tǒng)實現(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ù)端實現(xiàn)WebService,采用CXF+Spring+MyBatis框架,由持久層、DAO層、服務(wù)層、Web服務(wù)層組成。持久層由實體類組成,每個實體類對應(yīng)于中心數(shù)據(jù)庫中一個監(jiān)測數(shù)據(jù)表,其屬性與字段對應(yīng),并實現(xiàn)屬性get/set方法。DAO層由DAO類和MyBatis映射配置文件組成,DAO類定義數(shù)據(jù)插入和刪除方法,映射配置文件包含插入語句映射和刪除語句映射。服務(wù)層由服務(wù)接口和實現(xiàn)類組成,服務(wù)接口定義插入和刪除方法。類實現(xiàn)這些方法,主要是調(diào)用DAO類的插入和刪除方法。Web服務(wù)層由Web服務(wù)接口和實現(xiàn)類組成,Web服務(wù)接口Upload定義DeleteMeasureData和UploadMeasureData方法。根據(jù)參數(shù),先調(diào)用相應(yīng)服務(wù)接口的刪除方法,刪除相應(yīng)表中同一時段監(jiān)測信息,然后將客戶端發(fā)送的JSON數(shù)據(jù)轉(zhuǎn)換為實體對象,調(diào)用相應(yīng)服務(wù)接口插入方法,將實體對象中監(jiān)測信息插入至數(shù)據(jù)庫相應(yīng)表。

      采用CXF實現(xiàn)WebService,需在Web部署文件中增加CXF servlet:

      Apache CXF Endpoint

      cxf

      cxf

      org.apache.cxf.transport.servlet.CXFServlet

      1

      cxf

      /webservice/*

      同時,還需配置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服務(wù),見圖3。

      圖3Web服務(wù)及其方法

      2.2客戶端

      客戶端采用C/S模式,從水庫現(xiàn)場大壩安全監(jiān)測數(shù)據(jù)庫提取信息,發(fā)送至水庫主管部門的中心數(shù)據(jù)庫。

      為了連接不同類型數(shù)據(jù)庫并進行相應(yīng)數(shù)據(jù)轉(zhuǎn)換,通過配置文件控制信息匯集過程:

      InformationCollection元素表示一個信息匯集過程,包含匯集過程所有SQL語句。SourceConnection元素為大壩安全監(jiān)測數(shù)據(jù)庫的連接字符串。Delete中Table為要刪除數(shù)據(jù)的表名。Insert中Table為要插入數(shù)據(jù)的表名;FieldNum為從SelectSQL傳遞至JSonString的字段數(shù);SelectSQL為從數(shù)據(jù)庫中提取信息的SQL語句,其Where子句中,開始時間和結(jié)束時間采用保留字符串“STTM”和“ENTM”;JSonString為采用JSON格式的監(jiān)測信息字符串,其中保留字符串“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)測數(shù)據(jù)庫中滲流壓力監(jiān)測表結(jié)構(gòu)為圖4,則信息匯集配置如下:

      圖4滲流壓力監(jiān)測表結(jié)構(gòu)

      Provider=SQLOLEDB;Data Source=(local); Initial Catalog=dsmis;

      User ID=sa;Password=sa

      egs_sppr_r

      egs_sppr_r

      6

      <![CDATA[select left(hycncd,11),'1'+right(hycncd,2),mpcd,msdt,tm,wl from

      mi_sppr_m WHERE msdt>='STTM' and msdt<='ENTM' and wl is not null and tm is not null]] >

      <![CDATA[{'rscd':'FIELD0','hycncd':'FIELD1','mpcd':'FIELD2','mstm':'FIELD3',

      'tm':'FIELD4','spprwl':'FIELD5'}]] >

      3結(jié)語

      本文采用CXF+Spring+MyBatis框架開發(fā)信息匯集通用系統(tǒng)服務(wù)端,為客戶端提供WebService,將客戶端發(fā)送的監(jiān)測信息加載至中心數(shù)據(jù)庫。采用C#開發(fā)信息匯集通用系統(tǒng)客戶端,通過XML配置文件,控制監(jiān)測信息的提取、轉(zhuǎn)換、傳送過程。信息匯集通用系統(tǒng)客戶端能夠與不同的大壩安全監(jiān)測數(shù)據(jù)庫連接,使系統(tǒng)具有通用性,降低了信息匯集工作難度,節(jié)省了時間和成本。信息匯集通用系統(tǒng)可定時自動匯集實時監(jiān)測信息,也可人工匯集某時段歷史監(jiān)測信息。基于CXF的信息匯集通用系統(tǒng)已用于廣西壯族自治區(qū)大壩安全監(jiān)測信息匯集工作,效果良好。

      參考文獻參考文獻:

      [1]任鋼.基于Apache CXF構(gòu)建SOA應(yīng)用[M].北京:電子工業(yè)出版社,2013:5065.

      [2]賈蓓,鎮(zhèn)明敏,杜磊,等.Java Web整合開發(fā)實戰(zhàn)[M].北京:清華大學出版社,2013:456531.

      [3]ANHAI DOAN,ALON HALEVY,ZACHARY IVES.數(shù)據(jù)集成原理[M].孟小峰,馬如霞,馬友忠,譯.北京:機械工業(yè)出版社,2014:201203.

      [4]JOE FAWCETT,LIAM R E QUIN,DANNY AYERS.XML入門經(jīng)典[M].第5版.劉云鵬,王超,譯.北京:清華大學出版社,2013:3233.

      責任編輯(責任編輯:杜能鋼)endprint

      湖南省| 工布江达县| 桑日县| 洛浦县| 融水| 长垣县| 泾川县| 瑞安市| 崇文区| 阳朔县| 靖江市| 新蔡县| 木里| 浦县| 环江| 叶城县| 敦煌市| 威宁| 新兴县| 卢湾区| 贺兰县| 沽源县| 武汉市| 垣曲县| 平江县| 晋州市| 呼伦贝尔市| 射阳县| 龙门县| 淮滨县| 南召县| 宝清县| 荃湾区| 宁国市| 石屏县| 浦东新区| 大同县| 临猗县| 建水县| 大悟县| 乐昌市|