基于S2SH的协同工作流技术分析与应用框架

2016-01-19 02:31谭恒周凤
科技与创新 2016年1期
关键词:工作流

谭恒 周凤

摘 要:鉴于实际应用需求和工作流管理系统的特点,将角色概念引入工作流模型中,并以Activiti工作流引擎为基础,结合轻量级框架S2SH改进传统工作流模型,分析工作流技术。结果表明,在工作流模型中引入角色动态和静态绑定机制,不仅可以提高系统的安全性,还能实现对系统的安全访问控制。此外,在开发新的流程调度软件时,可以通过对事先定义的业务处理接口编写少量代码,并将其扩展,从而实现对业务过程的控制,为工作流业务的开展提供灵活、可扩展的快速开发平台。另外,还简要介绍了基于角色的工作流模型的应用实例,以期为日后的相关工作提供参考。

关键词:Activiti引擎;工作流;轻量级框架;流程调度软件

中图分类号:TP311.52 文献标识码:A DOI:10.15913/j.cnki.kjycx.2016.01.016

工作流是将一组工作任务结合起来完成某个过程的活动。它能够事先定义触发顺序和触发条件,并通过计算机在一个或多个参与者的控制下按照某种预定规则自动传递文档、信息或者任务。在工作流管理系统中,工作流流程引擎处于核心位置,负责生成流程运行时的各种实例、数据监控和管理流程的运行情况。

在明确了工作流引擎的原理、认识到传统工作流的不足后,在改进、扩展传统工作流模型时,引入了以典型的MVC模式架构为基础的设计理念,提出了基于Java EE的轻量级框架Struts2、Hibernate和工作流框架Activiti技术开发的原型体系结构,即基于S2SH协同工作流技术的应用框架。

该结构可以支持多个体交互,实现多角色、多资源的流程驱动。软件设计人员只需在该应用框架原型的基础上根据实际业务需要扩展应用接口,并在配置文件中定义处理流程的每一个任务结点、流结点和网关等信息。由于工作流引擎提供了流程定义工具可扩展接口,所以,流程定义工具会先解释配置文件中的工作流定义,然后转交给工作流引擎执行,由它维护工作流控制数据和角色模型数据,并完成监听触发事件的任务。当所有触发事件按照流程定义执行完后,便形成了一个完整的应用流程。目前,该应用框架已在多角色资源协同的环境和复杂流程的建模中运行,效果显著。

1 工作流技术与Activiti引擎的基本原理

在开发应用系统的过程中,整个应用系统架构并不是由单一的工作流管理系统组成,涉及到工作流部分的业务组件只是其中的一部分。而对于一个复杂系统的开发,会涉及到许多其他领域的复杂业务,因此,需要将工作流框架与其他框架相结合,开发出一个可扩展的工作流系统。本文用轻量级框架Struts2、Hibernate和以工作流框架Activiti为核心的轻量级流程引擎搭建可扩展型流程调度应用框架,以满足各类基于数据流系统的开发。通过Activiti工作流框架与Struts2、Hibernate的集成,能提高系统的柔性,适应业务流程的变化,实现更好的业务过程控制,提高顾客服务质量,降低系统开发和维护成本。Activiti核心组成部分Activiti引擎中的ProcessEngine是最核心的类,其他的类都是由它而来的。利用ProcessEngine可以获取到RepositoryService、RuntimeService、TaskService、HistoryService等核心组件。各Service的作用分别为:RepositoryService负责管理流程定义;RuntimeService负责执行管理,包括启动、推进、删除流程实例等操作;TaskService负责流程任务管理;HistoryService负责历史管理(执行完的数据管理)。

2 应用框架设计

应用框架以Activiti工作流引擎为核心,在不违背Activiti编程接口和有关约定的前提下,由Spring集中管理流程引擎和其他业务接口。这样做,无需直接在代码中new相关的对象,而是通过Spring容器来组装(控制翻转),从而降低组件之间的耦合性。当系统需要扩展其他子系统时,可以直接复用本应用框架,不需要在基本的功能上投入过多精力。在此过程中,系统开发人员可以专注于其他组件的开发,进而缩短相关基于工作流系统的开发周期,降低工作难度。基于S2SH协同工作流技术的应用框架如图1所示。

2.1 集成框架功能

在系统运行过程中,由Web容器自动完成对Spring容器对象监听器的初始化工作,并加载Struts2的核心过滤器。待初始化工作完成后,它将通过Struts.xml的配置信息URL匹配映射截获所有以.action(或.do,由系统开发人员自定义指定)结尾的URL请求。当客户端由用户提交表单或者一个触发事件向Web应用程序器提交一个请求时,请求的参数会通过HTTP协议提交到Web服务器。Struts的控制器接收到HTTP请求,经过已复写的Struts拦截器(权限验证拦截+Struts默认拦截器)成功过滤后,可以访问ActionServlet开发类中对应的Action方法,然后由Struts.xml中的映射直接调用相应的JSP。

Activiti工作流框架底层是基于Spring和ibatis存在的。虽然Hibernate、ibatis都是当前业界优秀的O/R mapping框架,但是,只需定义好pojo到数据库表的映射关系,就可以通过Hibernate 提供的方法完成持久层操作。这样做,在很大程度上提高了系统的开发效率,所以,可将Hibernate与系统集成起来完成对数据层的操作。由应用架构图可知,Spring容器可以管理系统中所有的业务和组件类。在实际项目开发过程中,通常将核心业务注入到Spring容器,而Activiti工作流引擎则由Spring管理。当Hibernate与Spring 集成应用时,需要在Spring的配置文件中配置Hibernate用到的一系列资源,比如Hibernate的配置、数据源(Data-Source)的配置。将Activiti工作流框架与Struts2、Hibernate有效地整合在一起,采取基于MVC的设计模式后,可以充分发挥各个框架的优势,从而解决单独使用这些框架开发系统时存在的不足。

2.2 基于角色的安全访问控制模型

在设计该框架时,引入了基于角色的安全访问控制,并且系统中各种权限的操作不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合,每种角色都有相应的权限。一旦用户被分配了相应的角色后,该用户就拥有该角色所有的操作权限。这样做的好处是不必在每次创建用户时都分配权限,只需要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多。这样不仅能简化用户的权限管理,还能减少系统的开销。另外,通过权限控制可以防止系统的工作流应用数据被非法用户修改。

此外,对于工作流系统的访问控制机制,应当遵循职责分离的原则,比如在银行业务中,授权付款和实施付款应该分开操作,如果发生权限交叉,则有可能出现欺骗行为。一般职责分离又分为动态分离和静态分离。动态分离的职责是在系统为一个任务选择执行主体时实施互斥规则;静态分离的职责是系统管理员创建用户指定角色时实施互斥规则。

3 应用实例

本文选取了1个典型的工作流内部控制管理系统作为流程调度应用框架的应用实例。在系统流程运转过程中,其常规操作步骤是:①系统完成applicationContext.xml配置文件的加载任务(该配置文件引入了相关的工作流全局配置文件Activiti.cfg.xml配置文件、Hibernate.cfg.xml配置文件和其他业务组件的核心配置文件);②利用applicationContext.xml获取相关工作流的服务接口;③加载工作流文件*.bpmn信息;④由系统管理用户完成工作流的工作部署。工作流部署成功后,用户便可以根据系统分配的角色来完成其权限范围内所对应业务(流程实例)的操作。该工作流内部控制管理系统如图2所示。

由图2可知,整个系统访问都与角色相关,而且角色决定了用户所涉及到的访问权限,通过该控制模型可以让各个用户根据指定角色去完成其职责范围内的任务。

3.1 用户与角色

系统中的用户可以分为系统用户、管理层用户和普通用户。其中涉及到的角色可以分为系统管理员、技术主管和技术人员等。

3.2 权限集合

为了方便权限分配和回收,在用户与权限集合之间引入了角色的概念。在该系统中,通过建立用户表与角色表关联,再由角色与权限表关联。当一个用户被分配了某个角色后,它便具备了相应的访问操作权限。用户、角色和权限对应关系如表1所示。

系统是基于权限分离原则实现角色的安全访问控制和设计的,它有效规避了权限越界操作行为的发生,并具有角色动态和静态绑定机制。这样做,既有效地实现了系统的便捷式安全访问控制,又增强了系统身份鉴别和授权控制方面的安全性。

4 结论

传统的工作流框架只能支持预先定义的、固定的、循环的业务流程类型,不支持在不重启流程实例的情况下动态的、变化的流程类型和复杂委托代理过程等。在项目的实际开发过程中,还有可能会因为工作流技术设计上存在的缺陷缩短系统的生命周期。为了使工作流应用框架在实际项目开发中有更好的通用性和可扩展性,本文采用基于jBPM4的开源工作流框架Activiti和S2SH改进传统工作流模型,并引入了基于角色的概念和角色动态、静态绑定机制来提高系统的安全性,实现对系统的安全访问控制,进而开发出1套适应各类Web工作流项目开发的安全原型。该模型不仅能解决文中提到的问题,还具有MVC设计模式的优点,在很大程度上降低了视图层、业务层和数据层之间的耦合,减少了工作量和程序的繁重程度,进一步提升了系统应用的通用性、可扩展性和可复用性等。

综上所述,本文的创新点是以Activiti引擎为核心,基于角色的安全访问控制和MVC设计模式,改进和扩展了传统的工作流模型,提出了一种基于Java EE的轻量级框架Struts2、Hibernate和由工作流框架Activiti技术开发的原型体系结构。该结构是可以支持多个体交互、多角色、多资源的流程驱动应用框架,它的存在使系统应用具备通用性、可扩展性、可复用性以及系统身份鉴别和授权控制方面的功能。

参考文献

[1]Apache Software Foundation.Apache OFBiz[EB/OL].[2010 -04-01].http://ofbiz.apache.org/.

[2]Activiti.Activiti BPM suite[EB/OL].[2010-06-01].http://www. activiti.org/.

[3]Colosa,Inc.ProcessMaker[EB/OL].[2010-06-01].http://www. processmaker.com/community-support/.

[4]Baeyens T,Faura M V.The process virtual machine[EB/OL].

[2007-05-08].http://docs.jboss.com/jbpm/pvm/article/.

[5]OMG.BPMN v2.0 Beta1[EB/OL].[2009-08-14].http://www. omg.org/cgi-bin/doc?dtc/.

[6]RaviSandhu,Edward Coyne,HalFeinstein,et al.Role-based access control models[J].IEEE Computer,1996,29(2).

[7]Zhong Hua,Feng Yu-lin,Jiang Hong-an.A role hierarchy model for role-based access control and its application[J].Journal of Software,2000,11(6).

[8]ReinhardtA Botha,JanHP Eloff.Separation of duties for access control enforcement inworkflow environments[J].IBM Systems Journal,2001,40(3).

[9]李刚.轻量级Java EE企业应用实战[M].北京:电子工业出版社,2011.

[10]范玉顺.工作流管理技术基础[M].北京:清华大学出版社,2001.

[11]Walls G,Breidenbach R.Spring in Action[M].Commonwealth of Virginia:Manning Publications Co.,2005.

〔编辑:白洁〕

猜你喜欢
工作流
支持节点协同的工作流模型构建方法研究
基于工作流2.0的智慧教室设计与研究
工作流在电力生产管理信息系统中的设计和应用
“奔向共赢、做到最好”行业信息化研究方法论
工作流技术在医疗信息整合工程中的应用分析
基于工作流的水运应急信息管理平台设计 
办公自动化系统中公文管理模块的设计和实现
基于J2EE的电子政务系统研究与应用
基于J2EE的电子政务系统研究与应用
基于目录树的工作流引擎设计与实现