0 引言
由于企业信息化发展的需要。企业的各个部门都建立了自己的管理信息系统,但又由于种种原因这些系统技术和硬件上的差异,使得它们之间无法进行数据和信息的共享,成为一个个“信息孤岛”,这大大阻碍了企业信息化的进程。如何消除这些差异,使得企业内的各个系统,包括平行的和上下层的系统间能够进行信息的交换和数据的共享,进而集成为一个运行有效的大系统成为目前这一领域研究的热门课题。
笔者在对JMS和XML技术的研究学习中,提出了一种把JMS和XML结合起来进行系统集成的方法,并成功地在ERP与MES系统间进行了实践。
1 XML简介
XML(可扩展标记语言),其中的X可以理解为数学中的未知数X,即该语言是可以由用户自定义的,用户可以根据自己的需要定义符合自身需求的数据描述方式,但是描述的方式必须符合XML标准,它不是基于二进制文件的,而只是用于描述数据,且能用通用编辑器来读取的文本。
与HTML(超文本标记语言)相比,用户使用HTML时,必须严格使用由开发商定义好的一系列标准标记符号来描述数据,才能正确显示出信息。由此可见,XML语言具有很大的灵活性和可扩展性,其功能也更强大。实际上,XML语言相当于把HTML语言中由开发商定义好的标准这部分交给用户自行定义,即要在XML语言中加入DTD(文档类型定义),用于为XML文档提供约束,以使文档数据更具完整性和可读性,并能由通用的解析器来解析XML文档。
由于XML语言的灵活性和可扩展性,使得XML可以用于Web中的信息传递,如电子商务中的金融信息的传递,用于企业信息系统之间的集成及数据共享,作为应用程序中的配置文件,存储参数信息等。使用XML的好处:1)方便搜索:使用XML,应用程序可以用一种标准的方式在不同的数据库搜索数据;2)本地的计算和处理:数据发送给用户后,客户可用脚本或其他编程语言处理数据,而不需把数据发回服务器,提高了Web应用的效率;3)数据的多样显示:通过XSL(可扩展样式表语言)可以以不同的方式显示XML文档所描述的数据,并可使用XSLT(可扩展样式表转换语言)把XML文档转换为其他类型的标记语言或者文件格式,如PDF格式;4)粒状的更新:使用XML存储和描述数据时,当数据的一部分发生变化时,不需要重发整个结构化的数据,用户不需要刷新整个页面就可以把更新的部分显示出来。
2 JMS简介
JMS(Java Messaging Service)是Java平台上有关面向消息中间件的技术规范,它提供创建、发送、接收、读取消息的服务。由SUN公司和它的合作伙伴设计的JMS API定义了一组公共的应用程序接口和相应语法,使得Java程序能够和其他消息组件进行通信。
JMS是与厂商无关的应用程序接口,这点上类似于JDBC,通过JDBC能访问不同的数据库系统;同样的,通过JMS也可以访问不同的收发系统,而且在收发信息时是异步方式的,即JMS客户机在发送消息时可以不用等待另一端客户机的响应,发送完毕后接着发送下一条信息。JMS提供了三种消息传递方式:1)PTP(点对点)消息传输,这种方式按异步方式把消息传输到服务器队列中且接收者只能有一个,接收端采用事件侦听机制来异步获取消息;2)Pub/Sub(发布/订阅)消息传输,该方式把消息传输到服务器主题中.同样按异步方式传输,接收者可有多个;3)请求/回答消息传递,这是RPC同步传输的经典模式,不过现在大多数消息代理不支持这种方式。
JMS中发送的消息是一种类型对象,它主要包括消息头和消息体,其中消息头是一个标准的头字段集,它提供给接收者一些信息,如目的地、返回位置、消息类型和消息期限等;消息体则包含了消息发送者要传递的具体内容,这些内容格式可为字节流(ByteMessage)、名称/值映射(MapMessage)、Java对象(ObjectMessage)、消息串(TextMessage可以包括XML内容)。整个过程如图1所示。

图1 JMS工作流程
3 利用JMs创建消息服务,传递XML数据
应用背景:苏州长城公司是一家生产硬盘零部件的公司,公司主要业务是生产PCB板,PCB板生产的具体工艺流程如图2所示。

图2 PCB工艺流程图
公司的ERP系统从战略层面上对企业整个供应链进行控制和管理。最底层则采用以先进控制、操作灵活的过程控制技术(PCS),而在这中间的则是MES(制造执行系统),负责协调高层系统和底层系统,使之高效而密切的配合来进行生产活动的管理。要使各个系统能紧密配合、灵活生产,必须打造一个畅通无阻的信息传输通道。JMS的跨平台性使之完全能胜任这一要求。系统之间的关系如图3所示。

图3 系统结构关系图
在整个过程中,主生产计划、库存信息、料品信息和工艺流程等信息从ERP系统的数据库中取出,然后再通过JMS传输到MES系统的数据库,使得MES系统能根据ERP中制定的计划和实际情况安排生产并监控生产过程,同时来自ERP的信息发生变化时,MES系统也必须实时地更新。实现了ERP和MES系统间数据的一致性,保证了计划和生产的统一。
文中以长城公司ERP采统与MES系统间点对点的消息传递料品信息为例,介绍如何在系统间应用JMS消息传递机制,实现企业内部系统之间消息层的无缝连接。
长城公司在ERP系统中采用了Oracle数据库,而MES则采用MSSQL2000数据库;传统的工作流程是:MES系统在安排生产时,需要先从ERP系统数据库中获取需要料品的库存量及其其他一些参数,ERP系统会定时地把更新后的库存数据传输到MES系统。首先需要先把来自ERP系统数据库数据转换为XML格式以便传输,然后在ERP系统和MES系统两边分别创建JMS消息服务客户端,分别用于发送和接收,最后再把接收到的XML文件用XSLT转换为需要的格式保存到MES数据库中。以下为具体操作步骤。
3.1 从数据库中取出表数据并转换生成为XML文档
从ERP数据库中取出需要的料品库存数据,并按需要的格式生成如下的XML文档:

3.2 建立消息发送服务的步骤
1)使用JNDI来查询和建立连接工厂:QueueConnectionFactory;
2)使用JNDI来查询目的地,即服务提供者的地址(Web Service所在服务器地址);
3)使用队列连接工厂QueueConnectionFactory来建立和启动队列连接QueueConnection;
4)使用队列连接QueueConnection创建队列会话QueueSession;
5)使用C!ueueSession建立队列发送者QueueSender;
6)用要求的消息模式来创建消息;
7)用sender()向主题发送一条或多条消息;
8)关闭Connection,继而关闭Session。
3.3 建立消息接收服务的步骤
1)启动Connection;
2)用队列接收者QueueReceiver.receive()或QueueReeeiver.receiveNoWait()接收消息;
3)可以随意使用MessageListener的实例,再注册到QueueReceiver,然后用MessageListener.onMessage()接收消息;
4)使用要求的Message格式来接收消息;
5)关闭QueueConnection。
整个过程如图4所示。

图4 使用JMS从ERP数据库传递数据到MES数据库
3.4 配置Web服务器
在发送和接受消息前需要配置JMS服务器,在JMS服务器中建立连接工厂sendJMSFactory和队列sendJMSQueue,名称保持与发送端和接收端中定义的名称一致,否则消息无法发送到服务器,最终无法到达接收端。同时还可以在JMS服务器中监视消息的发送和接受情况,保证消息的正常传递。
3.5 创建发送消息客户端


3.6 创建接收消息客户端
……
queueReceiver=QueueSession.createReedver(queue);
……
Message=queueReceiver.receive();
收到消息,使用XSLT转换后存人数据库并更新数据库。
4 结束语
文中提出了基于JMS和XML相结合的方法,利用XML语言的易传输性,将其作为信息传递的载体;利用JMS的跨平台性及其可异步传输的特点构建系统间消息传输的通道,成功解决了ERP系统和MES系统间异构数据库不能进行信息交换和数据共享的问题,消除了存在于企业间的信息孤岛,大大提高了企业的自动化和信息化程度。