基于J2EE平台的产品型工作流中间件架构研究及实现机制
2008-12-22
作者:纪勇,邸晓明,赵大哲
研究背景及范围
目前,工业社会中信息处理的内涵和外延正在快速扩展,由计算机处理已经成为大势所趋。一方面,组织和技术的发展之间相辅相成,从而使得信息和通讯技术的快速发展,直接导致了对组织结构及组织中的工作的巨大冲击;另一方面,由此导致的激烈的市场竞争迫切地要求所有企业采用更加有效率的方法来处理他们的业务过程。这些都为工作流" title="工作流">工作流应用的建立和发展提供了相应的社会需求和必要条件。
在这些新技术中,由面向对象技术发展而来的分布式组件技术逐渐成为主流。而近些年来日渐强大的J2EE平台,正日益成为分布式组件技术的最佳实现载体,其灵活的架构和极佳的分布式计算性能,使得企业应用可以和相关中间件平台有机的结合在一起。在这种趋势下,基于J2EE平台实现的通用工作流中间件平台,无疑会使得用户构造企业流程解决方案时更加快捷和方便。
根据工作流流程本身的特点、系统建模的方式、所使用的底层支撑技术,以及工作流流程的执行方式等的不同,可以将工作流管理系统" title="管理系统">管理系统分为很多种类,这其中比较常用的分类标准是基于工作流应用领域的分类,在这种分类模式下,工作流可以被分为管理型(Administrative)、特殊型(Ad-Hoc)、协作型(Collaborative)和产品型(Production)四种类型,其中:管理型工作流主要面向那些流程比较规范、重复性强的应用场景;特殊型工作流主要应用在因参与者不同或受其他客观条件所导致的单体流程差异较大的应用场景;协作型工作流主要应用在主流的群件平台上,往往需要就某一步骤进行多次循环,直到达成一致意见才能继续流转;产品型工作流是工作流管理系统的最高层次,经常被应用在面向关键业务领域的流程实现上面,它与管理型工作流的最主要区别体现在:产品型工作流具有更好的扩展形、伸缩性、复杂性和高效性等方面。
综上所述,产品型工作流代表了工作流的高级水平(请见图3中左图),而且由于其功能上的相对完善,所以特别适合于封装成中间件的形式,应用在面向关键业务领域的企业流程实现方面。本文所讨论的架构及应用也主要围绕产品型工作流展开,图3中右图的阴影部分为其在商业价值和任务复杂度等指标体系中的准确定位。
在明确了具体的研究目标后,接下来我们将结合对产品型工作流模型的分析过程,来建立起一个合理的产品架构,以便为结合J2EE技术来最终实现工作流中间件做准备。
架构设计
1. 架构设计的原则
在系统的设计与实现过程中始终以保证系统具备如下性能为架构设计的基本原则:
1) 可用性(Availability)是指当系统启动并运行后,能够根据请求回馈正确的反应。
2) 容错性(Fault Detection)是指系统对非正常的输入信息或中间信息主动进行错误规避的能力,在工作流中主要体现在对流程状态的检测、消息队列的检测和错误识别上面。
3) 客户端" title="客户端">客户端的可恢复能力(Client Recovery)是指系统断连接后的恢复能力、消息队列的客户端持久化水平和对消息状态的继承能力。
4) 服务器端的可恢复能力(Server Recovery)是指系统能否有效的保留系统的关键数据和实体对象的关键状态,以及对事务的处理能力上面。
5) 伸缩性(Scalability)是指系统可以满足系统根据业务变化的需要,动态调整系统处理能力的要求。
2. 工作流中间件的架构设计
工作流应用系统" title="应用系统">应用系统通常由三部分组成的:工作流客户端、工作流服务器和介于二者之间的消息传输机制(请见图1)。其中传输层和服务器端又可以进一步进行细分,这种细分的好处就是可以使得工作流应用系统可以适应从2层到n层的多种灵活部署方式。每种部署方式都有各自不同的应用特征和性能指标要求,如何合理划分服务器和消息队列之间、服务器和数据库之间的操作界面并没有唯一确定的答案,完全要看具体的应用特点和应用部署条件。
在上述大的分层原则下,我们进一步对产品型工作流中间件进行了细化(如下图所示),这种细化进一步落实了构成每层功能的若干子功能组件。从大的层次划分上来看:
.Client端借助于相应的消息传递机制(消息中间件或函数调用等),统一通过相应的编程接口(API)来调用Server端的相应服务,同时Client也可以借助于相应的Program Execution Agent来参与完成相应节点的客户端应用程序调用任务;
图1:工作流应用系统的基本架构
Server端由若干个功能完全独立的服务组成,每个服务器都完成有特定的任务,如:Workflow Execution Service用于处理流程实例、驱动节点路由(Activity Navigation);n Program Execution Service用于辅助WES完成与应用程序的交互等。在下面内容中还将继续介绍其具体细节。
.从图2可以看到,WFMS是通过Message Layer来访问CM,而不是直接通过消息传递系统来完成上述任务,这是为了屏蔽不同的消息传递系统实现,从而保证整个WFMS的消息接口保持一致,以保证各个功能模块的功能扩展,增强接口的稳定性。
.从图2可以看到,整个WFMS的可用性(Availability)和可靠性(Reliability)是由RDBMS的可用性和可靠性决定的,一个高效、稳定的DBMS对于整个系统的贡献是十分巨大的。基于RDBMS实现的WFMS一个另外的好处就是:当系统开发时很多预料不到的功能点,可以由用户基于RDBMS结构来直接进行定制,当然其前提是要了解整个WFMS的运行机理,以避免由RDBMS数据操作失误所带来的系统故障。
综上所述,一个工作流中间件的价值主要在于是否有一个强壮、稳定的工作流服务器,也即是我们常说的“工作流引擎”。引擎中的各服务互相配合,协同一致地完成每一项工作任务,各服务之间的动态交互关系请见图3。
图2:工作流中间件的分层架构
.工作流执行服务(Workflow Execution Service)
工作流执行服务是系统的核心部分,主要负责流程实例的运转和对象的状态转换,支持群集运算。
.管理/监控服务(Admin Service)
负责对各服务的监控,管理各服务的状态,可自动对异常状况进行报告。
.定时服务(Scheduling Service)
定时服务根据系统的配置,周期性的启动或调度相应的系统进程来完成某些特殊的任务。如间隔一定的时间,检测流程中是否有已经超时的节点、更新应用服务的注册信息、与业务系统交换数据等等。
图3 各服务之间的动态交互关系
.归档服务(Archive Service)
归档服务是将已完成的流程实例及其日志记录从当前运行库导出的过程。用户也可以选择导出‘某时刻以前启动的所有流程实例’。归档服务通过保证引擎数据库工作在一个健康的记录数内,来保障数据安全和引擎的运行效率。
.网关服务(Gateway Service)
网关服务是对消息传递系统的补充。我们知道,不是所有发生在工作流管理系统和其他外部系统之间的通信都可以借助于消息队列来完成的,对于某些如电子邮件这样的系统间数据,需要有相应的服务来将其“翻译”成工作流管理系统内部可以传递和处理的格式,网关服务就是用来完成这一功能的。
.清理服务(Cleanup Server)
功能与归档服务类似,不同点主要体现在两方面:一方面是处理的结果,归档服务将系统数据导出成持久化文件或转移到别的数据库中,以便进行数据备份和统计,而清理服务只是将一些系统内的无效数据(如一些中间状态结果)直接删除;另一方面,清理服务还要根据一定的规则,对一些被意外遭到破坏的数据进行恢复,以保证WFMS的正常运行。
.日志服务(Log Server)
日志是工作流运行时相关信息的记录,记录信息包括两部分:对象日志和事件日志。
一个基于J2EE技术的产品型工作流实现案例
前面对产品型工作流的架构进行了扼要的分析,从中我们初步了解了类似的工作流产品的基本组成和特点,基于该架构可以有多种技术实现方案,在对包括.Net和J2EE等技术进行综合比对后,我们发现J2EE平台的开发性和规范性更加有利于工作流中间件的实现。下面就结合东软的产品型工作流中间件——NEUSoft UniFlowTM 来具体介绍一下如何有效、合理地利用J2EE的技术优势,来实现完善的产品型工作流中间件。
.数据访问服务(Data Access Service)中广泛使用了基于JDBC的数据库连接池技术:应用请求建立数据库连接是一个比较耗时的工作,为了支持并发用户访问,UniFlow接口采用了基于JDBC的数据库连接池技术。数据库连接池同时建立了多个可供接口使用得数据库连接,当有应用请求数据库连接的时候,可以直接从连接池中取得数据库连接进行使用,以减少应用建立数据库连接的耗时。连接池克服了数据库连接上的瓶颈,使多个请求可以并发访问数据库的资源,充分利用数据库支持多连接的功能,提高了工作流系统" title="工作流系统">工作流系统的运行效率。
.基于Java RMI的负载均衡技术和组件通信技术:由前述可知,一个完整的工作流应用平台是由若干子服务构成的,因而各子服务之间的交互手段就显得比较重要。在本产品中,我们选用Java RMI作为标准通信技术,各组件通过RMI来和中央任务派发服务进行交互,并由该服务完成负载监控、任务分配、多引擎任务调度等复杂功能。Java RMI协议稳定、高效的处理性能保障了上述功能的实现。
.基于Web Service技术的多渠道(Multi-Channel)接入实现:工作流的管理监控工具和办理客户端提供了web办理方式,它使得用户管理工作流系统、办理工作流任务已经不再局限于局域网内部,可以在Internet上的任意一处访问工作流系统。在UniFlow工作流管理系统中,主要重点结合servlet技术、xml技术、soap技术和jsp技术来实现上述功能。
.规则解析技术:在工作流中存在着众多的业务规则,UniFlow在解析这些业务规则时充分利用了Java语言中的正则表达式、脚本框架等技术,保证了规则的动态添加和高效解析,从而实现了基于规则的条件路由、任务办理等功能。
.Java图形技术:工作流的图形化流程定义工具、组织机构定义工具使用了计算机图形学中的一些关键技术,如图形的绘制(主要是二维图形)、图形的布局、分层和规避(避免图形的重叠和线的交叉)等等。所有的工具都可以借助于Java Web Start技术实现基于Internet的自动下载和版本更新。
.中间件技术:作为孤立的工作流中间件,是无法胜任复杂的工作流应用系统的,其必须和包括消息中间件、事务中间件等在内的众多中间件进行交互。J2EE的一个巨大贡献就是,从规范的角度定义了相关中间件的交互接口,如JMS规范、JTA规范、JCA规范等等,这使得工作流中间件只要实现相关的规范接口就可以了,不必为每个中间件供应商进行单独定制。尤其是JMS规范,实现了工作流引擎间以及工作流内部各远程服务间消息传递的透明。
小结
工作流是当前发展比较快的中间件技术,尤其是产品型工作流有着广泛的市场需求,J2EE平台强大功能特性以及标准化的接口,为工作流应用平台的实现提供了巨大的技术便利,通过结合二者的优势而实现出的基于J2EE平台的工作流应用解决方案,可以为包括电子政务、电子商务在内的很多高端工作流应用提供更加便捷的开发、部署和维护手段。本文在重点讨论了产品型工作流中间件系统架构的基础上,分析了如何合理采用J2EE技术来实现该架构模型,并在最后结合一个具体的实现案例来进一步验证了方案的可行性。
随着工作流理论模型的日臻完善,以及J2EE标准的不断升级,结合二者优势的工作流应用平台也会更加显示出其不可替代的优势。