基于XML文档技术的数据通讯组件的设计与实现
2017-10-11孙学波杨明威
孙学波,杨明威
(辽宁科技大学 软件学院,辽宁 鞍山 114051)
基于XML文档技术的数据通讯组件的设计与实现
孙学波,杨明威
(辽宁科技大学 软件学院,辽宁 鞍山 114051)
为了解决分布式ERP系统中各结点之间的信息同步、界面实时更新和实时数据交换等技术问题,同时也为了降低软件各组成部分之间的耦合以及提高软件的可复用程度,本文提出了一种基于TCP/IP协议并使用XML文档格式的数据传输技术,并将其封装成一个可复用的软件组件。该组件使用XML文档格式描述数据对象,采用TCP/IP数据传输技术,可应用于分布式ERP系统内部的数据通讯。本文分析了ERP系统在信息实时处理(RIP)和实时信息交换(RIE)等方面的软件需求,详细地给出了这个数据通讯组件的具体设计和实现方案,并介绍了这个组件在鞍钢铁路运输ERP系统中的实际应用情况。
XML;信息实时处理;实时信息交换;数据通讯组件;序列化
目前,企业资源计划系统(Enterprise resource planning,ERP)已经获得了非常广泛的应用。近几年来,ERP系统的形式、内容和应用领域都得到了较大的发展[1-2]。基于组件的ERP系统的分析与设计以及ERP系统的实时性问题也已经成为当前ERP领域的热点问题。
传统的ERP系统主要应用于制造业,目的是为企业提供有效的物资、资金和信息资源的一体化管理的企业信息管理系统。随着信息技术的不断发展,ERP系统的应用范围已经扩大到国内各种类型的企业,如食品生产和物流等企业。同时,ERP系统的目标也从优化企业业务流程转换成提高企业的核心竞争力。这个变化也使得ERP的结构发生了较大的变化。不同行业类型企业的ERP的结构也会表现出较大的差异。
从ERP系统目标的角度来看,实时性必然是ERP系统的本质特征之一。从宏观的角度来看,任何ERP系统都需要对环境变化做出及时有时甚至是实时的响应。从微观的角度来看,系统局部状态的改变往往会引起其相关或相邻部分状态的改变,有时甚至是系统全局状态的变化,这都要求系统做出及时或实时的响应。并且越是局部的变化,对其响应的实时性的要求往往越高,但影响的范围也越小。这个特点也为实时ERP系统提供了实现的可能性。
在数据通讯服务软件领域,各种开发环境都提供了不同层次和形式的通讯服务软件包或通讯服务组件。低层的有封装了各种通讯协议的软件包,高层的有拥有不同目的和特性的各种数据通讯组件。它们拥有各自不同的特点和适用范围。例如,微软公司的MQ(Message Queue)就是一个著名的数据通讯服务组件。其主要特点是异步通讯的方式提供可靠的通信服务。即它关注是通讯的可靠性而不是实时性,因此不适合需要实时响应的通讯需求。再如Microsoft.NET Remoting组件提供了一种允许远程对象之间进行交互的框架,也可以支持数据通讯。但这个组件提供的服务仍然属于比较低层的服务,使用这个组件并不十分适合本文讨论的ERP系统实时性问题[3-5]。
本文从ERP系统的实时数据交换技术问题的角度出发,分析了ERP系统在信息实时处理(RIP)和实时交换(RIE)方面的需求,设计并实现了一个基于XML数据文档的数据通讯组件,并概要地介绍了这个组件在实际的ERP项目中的具体应用。
1 需求分析
现代ERP系统通常是一个分布式计算机网络系统,系统中各个结点之间的信息传递可分为数据信息传递和控制信息传递两种方式,这两种信息传递的实时性要求通常是不同的。其中的控制信息传递的实时性要求往往会更高[6-7]。
ERP系统的大部分功能均集中在信息处理方面,系统的运作通常以人机交互操作方式为主。因此,ERP在数据通讯方面的实时性要求并不太高,不同结点之间的响应时间通常可以确定在秒级。
1.1 通讯类型分析
ERP系统内的实时通讯主要指系统内各部各个结点之间的数据通讯,通讯内容可以是一个简单的消息、一个复杂的实体对象,也可以是一个用户文档。如一个WORD文档或一张图片等。
前者主要用于协调系统中各结点之间的协作关系,用以实现分布式系统的实时更新。例如,一个结点更新了系统状态时,向相关结点发布一个更新消息,收到消息的结点就可以刷新系统状态,以保持系统状态的一致。后者则用于支持各结点用户之间的协作。
1.2 通讯数据类型
从应用角度出发,可以把通讯数据划分成即时消息、用户数据和系统内部控制信息等三类。
(1)即时消息:系统用户之间交换的消息。如通知、公告和用户间的聊天信息等。
(2)用户数据:包括单个记录,表格和数据文档等。
(3)系统内部控制信息:由系统定义的在分布式系统中不同进程间的协作信息,主要用于控制进程间的协作。这类信息通常对用户来说是透明的。
从系统设计或信息结构角度,可以把通讯数据划分为简单对象、复杂对象和文档对象等三种类型。不同类型的通讯可选用不同的对象支持。
(1)简单对象:指应用系统中使用的某个实体对象,其主要特征是其各属性均为简单的数据类型。通常用于传递系统的状态增量信息,也可以表示用户之间传递的简单信息。
(2)复杂对象:由若干个简单对象聚合而成的对象。如商品订单就是由订单明细聚合而成的对象。
(3)文档对象:封装了某个用户文档的数据对象。这种对象由文档的描述信息和文档数据组成。如传递一个word文档,一个图片等。系统不解析此对象的文档内容。
1.3 基本功能需求
从通讯类型分析的角度出发,同时为保证通讯的实时性和可靠性,定义如下五个用例。图1给出了通讯组件的用例模型。
图1 数据通讯组件的用例图Fig.1 Use case diagram of communication diagram
(1)注册(Login)。某个结节启动时向通讯服务器发出注册请求,通讯服务器将该节点的信息加入到在线结点列表,并向注册结点返回当前在线结点列表。同时向所有在线结点发出在线结点列表更新消息。
(2)注销(Logout)。当某个结点关闭时,向通讯服务器发出注销通知消息,通讯服务器将该结点的信息从在线结点列表中删除,并向所有在线结点发出在线结点列表更新消息。
(3)发送对象(Send)。当某个结点的状态发生变化或需要发送用户消息时,结点向通讯服务器发出数据通讯请求,通讯服务器接收到数据后将数据转发给指定的结点。
(4)广播(Broadcast)。当某个结点的状态发生变化需要通知所有其他结点时,结点向通讯服务器发出数据通讯请求,通讯服务器接收到数据后将数据转发给在线结点列表中的所有其它结点。
(5)接收(Receive)。通讯服务器向客户结点发出数据通讯请求,客户结点接收到通讯请求后,将数据提交给特定的数据接收模块解析并实例化相应的数据对象,系统将根据接受到的数据对象的具体内容作进出相应的处理。
1.4 通讯组件的非功能需求
本通讯构件的非功能需求主要体现在时间性和互操作性两个方面。
本组件的时间性取决于由系统的体系结构,能够满足除过程控制等领域之外的实时信息处理等方面的需求。互操作性则指系统与外界或系统与系统之间的相互作用能力。
本组件将使用环境无关的通讯协议(TCP/IP)和基于文本的XML文档技术加以实现,以尽可能提高系统通讯的时间性和互操作性[7-9]。
2 数据通讯组件的结构设计
2.1 数据对象的XML文档表示
为提高系统的互操作性,本组件将通讯数据转换成一个XML文档。根据通讯数据类型的划分和组件的功能需求,本组件定义了实体XML、聚合XML和文档XML等多种XML文档格式,以满足系统的通讯需求[10-18]。
2.1.1 简单对象的XML文档结构 实体XML用于表示应用系统中的简单实体对象。其结构定义如图2所示。
图2 实体XML文档结构图Fig.2 Document structure for entity object
例如,一本书的信息可以描述成如下的形式。
<?xml version=/"1.0/"encoding=/"utf-8/"?>
<Book catology=/”Entity/”>
<ISBN>0764544020</ISBN>
<Title>Beginning Access 2002 VBA</Title>
<Date>2000-04-01</Date>
<Author>Dave Sussman</Author>
</Book>
其中,Entity ID为实体对象的标识符,在本文档中被作为文档标识符。catology=/”Entity/”表示本文档为一个实体型文档。
2.1.2 聚合对象的XML文档表示 本文中,聚合XML文档用于表示一个聚合对象,聚合XML文档由这个实体集对象自身的属性值和聚合对象组成。文档格式定义如图3所示。
其中,EntitySet ID为实体集对象的标识符,在本文档中被作为文档标识符。AttributeName和AttributeValue分别为实体集对象的属性名和属性值。EntityID为聚集中每个实体对象的标识符。
2.1.3 文档对象的XML表示 文档对象的本质就是一个预定义的简单对象,其中的文档的描述信息将包括文档名(Document Name)、文档类型(Document Type)和文档长度(Document Length)组成。文档内容则被定义成一个二进制数组。
图3 聚合对象的XML文档结构图Fig.3 Document structure for aggregation object
例如,一个名为“MyDocument.doc”的Word文档将被转换成如下的XML文档。
此时,文档对象的XML文档定义如下所示。
<DocID catology=/”User Document/”>
<Doc Name> MyDocument</Doc Name>
<Doc Type> DOC </Doc Type>
<Doc Length> Length of MyDocument.DOC </Doc Length>
<DocContent >ContentofMyDocument.DOC </Doc Content>
<DocID>
2.2 体系结构设计
2.2.1 组件的体系结构 本通讯组件的整体结构被设计成一个三层的体系结构,分为应用界面、数据转换和传输控制三个层次。其底层使用TCP/IP通讯协议。
(1)应用界面层(Application Interface)。客户程序负责组织和管理通讯数据,通过应用界面层提供的外部接口,传输和接收用户的数据对象。
图4 对象通讯组件的体系结构Fig.4 Architecture of component
(2)数据转换层(Data Mapping)。发送数据时,负责将数据对象序列化成相应的XML文档。接收数据时,负责根据接收到的XML文档创建相应的数据对象。
(3)数据传输层(Data Transform)。将XML文档视为二进制流,使用TCP/IP协议实现XML文档二进制流的传输过程。
2.2.2 XML数据接口 为实现数据对象到XML文档的转换,组件对外提供了一个名为IObjectForXML的接口,通过这个接口,客户程序可以定义可序列化成XML文档的数据对象。不同的是,这个接口被定义成一个抽象类。IObjectForXML接口的具体定义如图5所示。
图5 可通讯的数据接口类图Fig.5 Class Diagram for Data Object needs to be transferred
为支持不同的数据通讯类型,组件中还同时定义了可通讯的实体对象类(IEntityForXML)、聚合类(IAggregationForXML)、文档类(IDocument-ForXML)和即时消息类(IMessageForXML)等四个派生类。这些类分别为不同的可通讯数据对象给出了一个更具体的序列化接口。
实体对象类仅包含具有简单数据类型的属性,它需要实现IObjectForXML接口的全部方法。
聚合对象主要由一组可通讯的数据对象构成的集合组成。每个聚合对象类均必须实现IObjectForXML接口。在用户定义的具体派生类中,只需要实现接口的WriteMemberTo和ReadMemberFrom两个方法即可。
与聚合实体对象类相似,复合对象类的定义也要求其数据成员必须是可通讯的。
可通讯的文档对象类定义了一组与文档有关的属性,这些属性给出了文档的元数据描述,其序列化过程与实体类相似,用户可以直接使用,也可以按照模板方法模式[19]继承这个类,以实现个性化的文档通讯过程。
2.2.3 简单工厂接口(ISimpleFactory)设计 简单工厂接口(ISimpleFactory)用于定义在通讯过程中根据接收到的XML数据创建数据对象所需要的操作,这个接口的具体实现必须由用户提供,可以用单件模式[19]实现。
2.2.4 名字空间(Naming Space)设计 名字是指本组件为封装各种数据对象使用的标识符,用于标识XML文档中存储的数据。名字空间则是指组件使用的所有名字构成的集合,称为名字空间。
组件的内部名字空间定义于组件的内部,对用户透明。用户名字空间由用户自行定义,服从于用户系统的命名空间。二者处于系统的不同层次,不存在命名冲突问题。
组件内部名字主要包括“数据对象的分类标识”和“文档类的属性标识”,其具体定义可参见表1和表2。
用户自定义的名字空间,用于标识用户数据对象,它依赖于用户系统的类空间或对象空间,是用户自定义的类和属性标识符等符号构成的集合,主要用于数据文档的序列化过程,是数据对象进行通讯的基础,也是一个应用层的通讯协议。
表1 数据对象的分类标识Tab.1 Classifier for data objects
表2 文档类的属性标识Tab.2 Classifier for attributes of data object
2.3 应用接口设计
组件对外的功能接口集中在组件的应用接口层,它负责组件与其客户程序之间的交互。本组件的应用接口设计如图6所示。
图6 应用接口设计Fig.6 Class diagram for application interface
UserList是当前用户列表。_CurrentUser表示系统当前用户。_pListener侦听线程对象的引用。_MessageQueue实时一个队列,用于缓存通讯过程接收到的数据对象。_DataTransfer:则是一个数据转换器,负责数据格式的转换
组件的主要操作包括LogOn、LogOut、SendTo和BroadCasting等。组件的主要事件则包括Received an Immediate Message和Received an Object等。
2.4 数据映射层的设计
组件定义了DataMapper类以实现数据对象与XML的相互转换功能。具体设计如图7所示。
图7 DataMaper类定义Fig.7 Class diagram for DataMaper
DataMapper类的主要属性包括:一个用于创建数据对象的简单工厂对象(_SimpleFactory)。一个数据转换器(_ DataTransfer)和一个数据侦听线程对象(_DataListener)。
主要操作包括:ConvertObjectToXML(DataO-bject:IObjectForXML,DestHost:String)//将数据对象转换成XML文档,并发送出去。
ParseXMLDocumen(XMLDocument:XMLDocument)//解析接收到的文档,并根据接收到的文档内容创建相应的数据对象。
FiretheEventForDataArrived(Object:IObject-ForXML)//激活接收到数据对象事件。
2.5 数据传输层(Data Transfer)设计
数据传输层主要负责XML文档数据的传输。发送数据时,将接收到的XML文档,打包成流数据,并将流数据发送到指定的主机。接收数据过程则与之相反。
2.5.1 数据传输层的结构 数据传输层由数据发送对象(Data Ttransformer)和数据帧听对象(Data Listener)两个对象组成。数据发送对象随系统运行的需要动态创建并发送数据;数据侦听对象则是一个静态对象,负责监听并接受数据。
2.5.2 数据发送过程 数据发送过程负责发送用户数据,发送之前,数据被打包成数据包格式:文档类型(4个字节)+数据长度(8个字节)+数据内容。
数据发送过程由Datatransfer类的SendData方法实现。其基本步骤如下:
(1)将数据对象DataObject转换成XML文档;
(2)按字节计算XML文档的长度;
(3)建立到通讯服务器的连接,依次将XML文档的标识、长度和内容发送到通讯服务器;
(4)通讯服务器根据通讯的类型,将数据转发到相应的结点;
(5)结束。
2.5.3 数据接收过程 接收数据过程由单独一个线程实现。其执行过程如下:
(1)建立到通讯服务器的连接;
(2)重复下列步骤,直到本线程终止:
①启动侦听程序,等待接收数据;
②开始接收数据流;
③接收并获取XML文档标识和XML文档长度;
④按XML文档长度接收数据,并存放在一个临时文档中;
⑤将接收到的XML文档保存在队列中,通知数据映射层接收到一个XML文档;
(3)关闭连接,结束接收过程。
3 通讯组件的应用实例
在鞍钢铁运公司的铁路运输ERP系统项目[20]中,应用了包括此组件在内的多种组件成功地构建起了一个基于网络的分布式车辆调度平台,解决了项目中的实时信息交换方面的技术难题,如车辆分布信息的实时更新、车辆调度作业技术图表的实时生成自动与刷新、作业区车流统计的自动生成和车辆调度作业命令的实时传递,为项目的成功奠定了坚实的技术基础。
鞍钢铁路运输ERP系统的目标是对该公司的整个运输过程实现有效的控制和管理,提高该公司的运输效率和管理水平,提高企业的经济效益和社会效益。
该公司的铁路运输指挥系统是一个由90多个结点构成的具有层次结构的城域网络系统,其网络结点被划分成总调度室、车站和作业区等三级调度结点。其中的低层结点(作业区调度)负责完成各种具体的车辆调度作业,如装车、卸车、编组、调车和行车等。中层结点(车站调度)负责指挥车站内各作业区之间的车辆调配和运转、还要负责组织完成与其他车站之间的行车作业。中层结点还要监控辖区内各个作业区的工作状态。高层结点(总调度室)不仅要负责指挥、控制和管理辖区内各车站以及各个作业区的各种调度作业和行车作业,还要重点关注主要作业区的车辆分布、车辆调度作业以及车小时统计等具有可视化特征的信息。另外,系统中任何两个结点之间还需要实时传递车辆预报、车辆确报和车流信息。最后,低层结点与机车之间还需要实时地传递各种车辆调度命令信息。这些特点决定了这个运输系统所具有的多样化的实时性要求,同时也决定了该系统结构的复杂性。
为了解决系统的复杂性问题,使用了一种比较新的面向组件的软件体系结构设计。将系统中的车辆分布、车辆调度作业技术图表、列车运行图和数据通讯等主要模块设计成可独立修改和扩充的二进制组件。这个体系结构有效地降低了系统的复杂性。不仅充分地实现了系统的各项需求,同时也为系统带来了更好的可维护性和可重用性。图8描述了这个铁路运输ERP系统的软件体系结构,其中的组件(Data Communication Component)就是本文所描述的数据通讯组件。
在这个体系结构中,数据通讯组件(Data Communication Component)与用户界面层(User Interface Layer)中的车辆分步组件(Traffic Distribution)、调度图表组件(Scheduling Diagram)、班计划(Auxiliary Planning)以及系统维护(System Maintain)等组件之间具有比较密切的依赖关系。当某个组件改变了一个结点的状态,如完成某个车辆调度作业、修改了某项场地信息的修改时,该组件将及时通过数据通讯组件向相关结点发出或广播一个更新消息,这使得收到更新消息的结点可以及时有效更新其相关的状态。从而使系统得以实时地维持在一个统一并且一致的状态。
另外,系统中还包括了其它一些需要使用数据通讯组件的组成部分,如结点之间传递的非结构化的短消息和文档等方面的数据通讯等,这些部分的应用取代了原系统中使用的某些依赖于传统电话的通讯方式。
图8 数据通讯组件的应用实例Fig.8 An implicational example of Data Communication Component
基于XML文档技术的数据通讯组件的应用,实现了铁路运输ERP系统中的非常重要的实时性目标,实现了整个系统中,各结点的车辆分布、车辆调度技术作业图表和列车运行图以及相应的统计图表等信息的整体一致性,使得整个系统可以全天候运行。
目前。这个项目已经得到了成功的实施和应用,并创造取得了巨大的经济效益和社会效益。并分别获得了鞍山钢铁集团、鞍山市和冶金部等部门颁发的多个科技奖项。
4 结论
在基于组件的分布式ERP系统中,基于XML文档技术的数据通讯组件能够比较充分地满足系统运行时所需要的各种数据通讯需求。从而支持分布式系统所需要的信息更新、界面刷新、实时统计以及实时数据交换方面的需求。
在这个基于XML文档技术的数据通讯组件中,一方面,XML文档技术的应用降低了数据通讯双方的数据耦合。使传统的数据通讯方式中存在的数据的类型、传输顺序、数据内容和数据格式方面耦合降低到数据名字空间方面的耦合。另一方面,组件技术的应用,不仅有效地降低了体系结构内部各个组件之间的耦合,即使各组件之间的依赖降低到接口依赖那样最低程度的依赖。而且也可以独立地修改和更新各个组件从而提高软件的可维护性。
实践证明,本文提出的组件可以有效地解决项目开发中与实时性方面有关的技术难题,更可以有效地降低软件的开发和维护成本,更适用于具有一定规模、结点较多且结点之间又有较多交互的分布式ERP系统。
[1]朱宗乾,刘庆.ERP实施领域研究热点国内外比较研究[J].情报杂志,2015(3):125-131.
[2]李岩,陶树平.ERP系统架构的设计与实现[J].计算机工程,2003,29(12):153-155.
[3]许丹奇,徐艳玲.利用.NET和MSMQ技术实现分布式应用程序[J].微计算机应用,2007,28(6):593-596.
[4]王正桓,蔡明.MS.NET Remoting的分布式技术应用研究[J].计算机应用与软件,2005,22(3):140-142
[5]卢彬,陈家琪.ERP中基于COM+的三层财务系统的设计与实现[J].仪器仪表学报,2006,27(z3):2506-2507.
[6]顾洪军,张佐,吴秋峰,等.网络控制系统的实时特性分析及数据传输技术[J].计算机工程与应用,2001,37(6):38-40.
[7]陈少波,桂卫华.基于Internet网过程控制远程监控系统实时性研究[J].信息技术,2008,32(3):31-33.
[8]李伟平,范玉顺.工作流技术在ERP系统中的应用[J].高技术通讯,2004,14(8):56-61.
[9]宋利康,崔德刚,周儒荣,等.企业模型与ERP系统间映射技术[J].航空学报,2007,28(6):1513-1520.
[10]魏代森,李学庆,张家重,等.协同制造环境下ERP软件演化及其实现[J].计算机集成制造系统,2016,22(6):1558-1569.
[11]陈伯成,叶伟雄,孙静,等.企业资源规划ERP软件简化的流程集成模型[J].清华大学学报:自然科学版,2003,43(6):721-724.
[12]黄双喜,范玉顺.基于工作流的ERP系统开发与实施[J].计算机集成制造系统,2004,10(2):139-143.
[13]孔令波,唐世渭,杨冬青,等.XML数据的查询技术[J].软件学报,2007,18(6):1400-1418.
[14]陈君鹏,廖湖声,苏航,等.面向XQuery语言的XML树模式识别方法[J].计算机研究与发展,2013,50(z1):12-22.
[15]李发金,廖湖声,高红雨,等.XML查询中具有位置谓词的树模式匹配方法[J].计算机研究与发展,2013,50(z1):1-11.
[16]蔡文青,李凡长.基于JMS和XML的数据交换模型设计[J].计算机工程与设计,2007,28(14):3529-3531.
[17]梅宏,陈锋,冯耀东,等.ABC:基于体系结构、面向构件的软件开发方法[J].软件学报,2003,14(4):721-732.
[18]张世琨,张文娟,常欣,等.基于软件体系结构的可复用构件制作和组装[J].软件学报,2001,12(9):1351-1359.
[19]GAMMA E,HELM R,JOHNSON R,et al.Design patterns:elements of reusable object-oriented software[M].Addision-Wesley,1995:144,360.
[20]孙学波,李昕妍.分布式铁路车辆分布组件的设计与实现[J].计算机工程与设计,2014,35(1):163-170.
[][]
Data communication component based on XML document techniques
SUN Xuebo,YANG Mingwei
(School of Computer Software,University of Science and Technology Liaoning,Anshan 114051,China)
A new data transmission technique based on TCP/IP protocol and using the XML document format was proposed and packaged to be a reusable software components,in order to solve the technological problems such as information synchronization,real-time update interface and real-time data exchange between different nodes within a distributed ERP system,and also in order to reduce the coupling between various components of software and also to enhance the reuse of the software.The data communication component is able to be used for data communication within the distribute ERP system,based on XML XML document technology and TCP/IP technique.The basic requirements about real-time information processing(RIP),real-time information exchange(RIE)and other aspects within the ERP system were analyzed in this paper.The concrete design data communication component based on XML were introduced in detail,and the practical applicational situation of this component in the ANSHAN Iron&STEEL Corporation’s Railway Transportation ERP system was introduced briefly.
XML;real-time information process;real-time information exchange;component for data communication;serialization
April 3,2017)
TP311.5
A
1674-1048(2017)03-0217-09
10.13988/j.ustl.2017.03.012
2017-04-03。
2012年鞍山市科技基金项目。
孙学波(1964—),男,辽宁鞍山人,教授。