1 引言
SOA(Service Oriented Architecture)即而向服务架构,最近几年来越来越热,不断发展。各大厂商在这方面也不断加大投入,推出自己的解决方案和相关产品。ESB(Enterprise Service Bus)企业服务总线就是最近两年一种遵循SOA框架的,解决软件系统集成问题的方案。IBM,BEA, Sonic, INOA等公司都推出了自己的ESB产品和解决方案。
ESB是逻辑上与SOA 所遵循的基本原则保持一致的服务集成基础架构,它提供了服务管理的方法和在分布式异构环境中进行服务交互的功能。可以这样说,ESB是特定环境下(SOA架构中)实施EAI的方式。具有如下特点[4]:
(1)面向服务:分布式的应用由可重用的服务组成 。
(2)面向消息:应用之间通过ESB发送和接受消息 。
(3)事件驱动:应用之间异步产生和接收消息。

图 1 Sun-OpenESB架构图
业务流程是ESB中核心的概念,能被最简单的定义成:为达到某种特定的、可用的管理目标,而需要的一系列步骤和动作。在ESB中,各个组件及服务按照一定的规则和序列组成业务流程,来实现完成用户需求的目的。本文研究了在ESB系统中业务流程的实现方式,并针对SynchroESB定义了业务流程运行和设计的规则,对系统运行提供了支持,同时具有灵活性和可扩展性。
2 业务流程定义和设计
ESB可以看成是一系列服务组件的容器,而这些服务组件是可以动态插入的,即可插入组件(pluggable component)。每个组件提供特定的服务,并通过ESB和别的组件通信。业务流程则通过一定的规则,将这些服务组件关联起来,形成一个服务序列,最终完成用户的需求。
在SynchroESB系统中,组件在运行时被部署到节点服务器(Peer Server,PS)上,并具有用户配置的运行时信息。运行时的组件,我们称它提供的服务叫服务单元(Service Unit,SU),而一个PS上部署的所有的SU称为一个服务组合(Service Assembly,SA)。系统中不同的SU相互通信并完成自己的功能,来共同完成一个业务流程。
因此,业务流程需要包含的信息:PS节点信息(该流程涉及的所有节点名称),SA信息(一个PS上所包含的SU)以及SU信息(提供服务的组件以及用户配置的信息)。
2.1 服务单元(SU)设计
SU包含运行时组件的配置信息和启动参数等。在SynchroESB中,是这些信息以配置文件的形式来描述。下面是一个组件的SU配置信息的样例:

含义如下:
ComponentName:组件名称
Service:组件提供的服务名称
destinationService:目标服务的名称
<bean>…</bean>:组件的功能类及配置信息。
在运行时,PS获得该描述信息后,将动态加载和配置组件并启动相应的服务。
在物理上,SU是以zip的形式存储的,其中包含了组件配置文件,相关文件(如上例的xsl文件)等。
2.2服务组合(SA)设计
SA包含了一个PS上部署的所有组件的信息,及SU的集合。PS是以SA为单位来管理服务单元的,所以SA在流程的运行及控制方面具有重要的作用。SA的信息也是以配置文件的形式来描述的,下面是一个SA的描述信息:


含义如下:
identification:描述了该SA的信息,包括名称,描述等。
service-unit:包含了属于该SA的SU的描述信息,包括SU包名称,以及要部署到的组件的名称。改部分可以是多个。
在物理上,SA也是以zip形式存储的,里面包含了SU包,以及上述的配置文件。
2.3 业务流程设计
业务流程是一个动态的概念,是运行时所有服务的集合。物理上的业务流程设计,除了需要包含相关的SA文件外,还要包含描述服务部署信息的描述文件,它包括PS节点信息,SA信息等。用户通过该描述文件,将SA部署到相关的PS上,运行后实现业务流程。描述文件的实例如下:

含义如下
Processname:包含了该流程的名称及版本信息。
PeerServer:包含了一个节点上的配置信息,有PS名称,部署其上的SA信息,以及SA中的SU信息等。
该项可以是多个,和流程需要的PS的个数相同。
通过对SU,SA及相关描述文件的定义,就完成了对业务流程的定义。可以看出,业务流程采用分层描述的方式,最终完成对流程需要的所有的信息的描述。
3流程状态监控算法
3.1业务流程状态
在SynchroESB系统中,对业务流程的监控,可以通过对流程状态控制来实现的。在系统中,流程有几个状态:
1、待部署:用户设计完流程,并上传到US服务器。
2、停止:用户部署完流程,或执行停止操作后流程的状态。
3、运行:流程运行时的状态。
4、暂停:监控时使用暂停命令或断点中断时的状态。
各个状态是可以相互转换的,其状态转换图如下:

图 2 流程状态图
引发流程状态变化的事件,也是系统中对流程的操作。
其中暂停状态和停止状态的主要区别是:暂停时系统保留流程运行的信息,而停止时不保存信息。
3.2 业务流程的控制
业务流程控制方法,实现是通过控制涉及流程的每个PS来实现。PS上的SA都具有生命周期,并提供了管理接口,可以通过远程方法调用(JMX Over JMS),控制PS上的SA的状态,宏观上就体现为对流程状态的控制。
SA的生命期状态包括:启动(Started),中止(Stopped),关闭(Shutdown)
在图2中线上的事件,都是系统提供的控制操作。其中比较重要的操作如下:
1、上传流程:用户在SPO上设计好流程后,同过JMS消息通信,将流程上传到US的流程仓库中,并将流程的状态设置为待部署。
2、部署流程:用户在SPO中进行部署操作后,US的流程管理模块分析流程描述文件,得到相关的PS和SA的信息,通过远程方法调用,将SA部署到对应PS上去。并设置流程的状态为停止状态。在停止状态时,系统中已经有了该流程的信息,并且可以进行监控。
3、启动,停止流程:如上所述,当SPO执行启动停止流程操作时,通过US调用管理接口,依次停止和流程相关的PS上的SA,并设置流程的状态为运行。停止流程过程和此类似。
4、暂停流程:当用户选则暂停流程时,系统保存了流程运行的状态,以便以后恢复,然后通过US的接口,依次暂停各个PS上的SA,从而达到暂停流程的目的。
3.3业务流程的监视
在工程应用中,需要了解流程运行的情况,可以通过对流程运行的监视来实现。流程运行的监视,设计算法上和流程控制不同,是通过对PS上运行组件的监视,来分析整理出流程的状态。
当SPO启动流程监控后,会触发一个定时器,该定时器按照配置的时间,通过远程方法调用获得该流程涉及的PS上所有的组件状态,然后筛选出所监控流程包含的组件状态,从而获得流程的运行状态。获得状态后,SPO需要从界面上展示出来,处理的方法是使设计器中的相应组件改变颜色。
4 结束语
本文采用分层的思想,介绍了基于ESB的业务流程的设计和实现,首先从概念上定义了业务流程的含义,并介绍了业务流程需要包含的信息。接着分层组成流程的SU和SA的概念,给出了它们的定义和描述。文章还介绍业务流程控制及监视的算法,并给出了流程状态和监控的关系。通过实例验证,文章描述的算法和设计有良好的应用效果。