APP下载

基于CXF的信息汇集通用系统设计与实现

2017-12-02葛从兵李荣辉陈剑

软件导刊 2017年11期

葛从兵 李荣辉 陈剑

摘要:为将大坝监测信息从分散在各地的监测数据库汇集至中心数据库,采用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:

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服务,见图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渗流压力监测表结构

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结语

本文采用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