文献标识码:A
文章编号: 0258-7998(2012)06-0132-03
随着数采监控系统SCADA(Supervisory Control and Data Acquisition)业务集成的深入发展,敏捷、不受限制的采集数据的集成已成为关键的业务需求。企业的发展不仅需要引进一些新的应用数据服务器系统,而且要整合旧的数据应用服务器系统,以实现整个企业之间甚至不同企业之间的采集数据信息的共享和更新。为实现异构协议数据应用服务器之间的信息共享,需对其传输的数据信息进行变换,实现各传输协议之间的集成转换。
解决协议集成转换的典型方法,主要有“ESB服务总线”、“Mule服务总线”、“基于JBI的ServiceMix服务总线”以及“CXF服务总线”[1],但这些方法只支持标准的数据传输协议,不能集成各种异构数据应用服务器自定义的协议,无法满足企业的各种采集数据信息共享与升级的实际需求。有鉴于此,对异构数据自定义协议集成的研究和分析,具有一定的现实意义。
1 系统设计
针对目前市场上协议转换方法的不足,本文构建一个能支持自定义协议集成的系统。该系统通过用户配置其自定义协议,不仅实现接收自定义应用传输协议的数据流并进行解析,而且能发送自定义应用协议的数据给其他异构通信应用服务器。此外,系统能支持用户自定义协议解析规则,具有良好的扩展性,并具有稳定可靠、处理能力强、管理方便等特点。
1.1 系统结构设计
系统可分为应用层、业务层与资源层三个部分。应用层负责对异构数据协议的各种应用管理及动态展示实时数据等应用功能。业务层是整个系统的核心层,不仅负责监听计算机各不同端口,对接收的数据流进行识别、解析以及存储、分发等各种处理,而且为整个系统提供数据支撑,及各种数据的增、删、查、改等数据操作功能;资源层包括本系统所有的数据资源,即数据库、系统临时数据及外部采集系统发送的数据流。系统的结构如图1所示。
1.2 异构数据协议解析规则分析及其管理设计
协议解析规则是在解析协议时对协议数据流的处理手段。综合分析各种标准应用协议及各用户自定义协议,大致有三种不同的协议解析规则:(1)控制规则:协议解析时对整体数据流的处理手段,如协议是否需要回复、校验和及协议序列号等;(2)数据前处理规则:对单个协议数据解析前的处理手段,如解析前对单个数据字节大小端进行的变换;(3)数据解析后处理规则:对已解析出来的单个数据进行处理的规则,如将解析出的数据乘以标定。
规则管理设计原则是用户能方便地加载自己定制的协议解析规则,使得系统具有更强的扩展性。本系统拟采取数据库机制,在系统的应用层增加管理功能实现。
1.3 自定义异构数据协议模型设计
协议格式模型的设计原则是保证协议格式能符合大部分用户的需求,使得系统具有高度的灵活性和广泛的适应性。
异构协议的具体帧格式由用户自由配置。协议格式由包头、命令区、数据区以及包尾组成,格式配置模型如图2所示。
考虑到实际应用中各自定义的数据协议格式因需而异,协议格式框架中的包头、命令区以及包尾是协议的可选部分,在配置时可根据协议具体需求选择。数据区是协议不可缺少的部分,协议的数据流包含的类型有数据类型与非数据类型。数据类型是字节型、短整型、整型、长整型、浮点型及双精度型以及它们各自的数组类型组成;非数据类型为字符串类型。
命令区存放的是协议的控制数据流,解析协议数据流时按命令区类型进行解析。当命令区参数不为空时,将解析结果与参数相比对,相等则调用对应的协议控制规则;当命令区参数为空时,可直接调用对应的协议控制规则进行校验。
数据区存放的是协议的消息数据,其类型为数据类型,用户可对数据在解析前后进行必要的处理。
2 系统实现
系统使用基于J2EE平台设计,从而实现了跨平台、可复用、易维护等特性。系统整体使用了Spring+Hibernate框架进行开发。系统依赖于Spring的IOC功能对各JavaBean进行管理,促进系统功能模块间的松耦合。同时系统使用Spring对数据资源进行事务管理,保证系统数据的完整性和系统性能的高效性[2]。系统采用Hibernate框架,以完全面向对象的思想对数据进行管理与优化,完全隔离了底层数据库机制,使得系统适用于Mysql、Sql Server及Oracle等数据库[3]。
系统包括通信模块、应用管理模块和数据管理模块三个部分。模块之间有连接接口或者由数据池进行控制连接。通信模块与应用管理模块为本系统的核心部分,数据管理模块为其他模块提供数据支撑。
2.1 通信模块
系统采取NIO Socket通信技术以及多线程机制进行实现通信模块,提高了系统的并发处理能力、优化了系统的响应速度。通信模块的组成如图3所示。
2.1.1 数据接收及协议识别、解析模块
协议的识别与解析是系统的核心功能,正确、高效地进行协议的识别与解析是系统运行的保障。在此功能模块中,系统基于Mina通信框架进行扩展、开发。Mina框架是由Java技术开发的一种用于开发高性能和高可用性的网络应用程序的基础框架,该框架具有多协议支持、多端口监听、异步通信等优点[4]。利用Mina框架,不仅可在同一端口监听不同协议的数据流,而且可在多个端口监听获取数据流。模块解析数据时,考虑到网络延迟及TCP/IP的数据采用的是分组传输方式,将上次解码剩余的码流存放起来,与下次同一Session接收的数据流合并进行整合解码。 模块解析数据工作流程如图4所示。
系统根据动态注册的协议判别监听不同的端口,接收各采集系统发送的数据流,利用Mina框架的数据过滤机制和数据缓冲机制,对数据流实现“收”慢—“解析”快的策略。合并数据流之后,模块联合协议端口匹配、特征匹配等多种协议匹配方式对数据进行协议匹配,确保协议匹配的精准性。
2.1.2 对外数据接口模块
系统采用一个线程实现此功能模块。线程在系统启动时初始化运行,用于维护解析成功数据的哈希表并分发数据。当有解析成功的数据放入表中时,此线程从休眠状态被唤醒,取出哈希表中的数据,进行三方面的分发:(1)如果此协议正在被用户查看实时数据,则线程向界面推送协议的实时数据进行显示; (2)发送给数据存储模块,进行协议数据的存储;(3)查询系统与外部数据请求系统进行通信的(协议,Session)哈希表,根据条件将数据发送给对外数据接口模块,使其向外部请求数据系统发送实时数据。如此轮询分发完毕解析成功的数据后,线程进入休眠状态。线程采取“休眠—唤醒”机制,减少了系统占用的内存资源,优化了系统的性能。
2.1.3 对外数据接口功能
外部系统的数据请求分为两种:实时数据请求与历史数据请求。系统与外部系统建立连接,根据外部系统的请求类型进行不同的处理:(1)实时数据请求:维护系统的通信(协议,Session)哈希表,发送所请求协议的实时数据;(2)历史数据请求:根据所请求的协议时间范围查询数据库,返回相应的数据。
2.2 数据管理模块
数据管理模块充分利用Hibernate框架出色的对象/关系数据库映射、灵活的数据库数据池管理、面向对象的HQL语言等优点,为其他模块提供数据存储、数据更新、数据查询等功能。
2.3 应用管理模块
应用管理模块负责系统应用层的功能管理,包括协议编辑管理、协议解析规则管理、协议生命周期管理及实时数据显示四个应用功能模块。协议编辑管理与协议解析规则管理主要以数据管理模块为支撑,而协议生命周期管理和实时数据显示模块是与通信模块进行交互实现。
2.3.1 协议编辑管理功能模块
协议编辑管理功能模块包括对数据协议的增、删、查、改四个应用功能。系统以异构数据协议模型为原型,建立数据协议格式的配置界面。协议的新增、修改与查看功能通过协议格式配置界面进行相应操作。
2.3.2 自定义协议规则管理功能模块
系统将自定义的协议控制规则和数据处理策略存储在数据库中。用户可以采用Java语言开发实现系统定义的规则接口,开发自己的协议规则,将生成的.class文件导入系统数据库。用户也可以通过界面删除相应的协议控制规则或者数据处理策略。
2.3.3 协议生命周期管理功能模块
协议的生命周期是协议在系统中动态注册至撤销的时间周期,其管理功能模块包括协议动态注册与撤消两个功能。此功能模块与通信模块进行交互,利用通信模块中Mina框架的动态多端口监听的特性,向框架实例进行动态注册与撤消,从而维护系统协议哈希表中的协议。
2.3.4 实时数据显示功能
系统利用Java的Swing库为每个注册协议动态生成一个JPanel,通过单例模式管理每个JPanel的句柄。当通信模块分发解析出协议数据时,系统通过句柄调用相应的JPanel并向其增添实时数据。当用户查看相应协议的实时数据时,系统将该协议的JPanel设置为可视状态,从而向用户展示实时接收到的整体数据。
本文设计并实现了一种基于Java语言开发的异构数据协议集成通信系统,介绍了异构数据协议格式模型以及该系统的各功能模块。系统核心部分采用NIO Socket技术以及多线程机制实现,使系统的性能得以极大提高,同时具有良好的灵活性、平台无关性及高扩展性。本系统为采集数据的转换集成提供了一种新的实现途径,具有一定的创新和实用价值。
参考文献
[1] 梁爱虎. SOA思想、技术与系统集成应用详解[M].北京:电子工业出版社,2007.
[2] WALLS C, BREIDENBACH R. Spring in Action[M].America: Manning Publications, 2005.
[3] BAUER C, KING G. Hibernate in action[M]. Ameircn: Manning Publications,2004.
[4] The Apache Software Foundation. Apache Mina[EB/OL].[2011-06-16]. http://mina.apache.org.