周文军
河北省交通通信管理局,河北 石家庄 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.