特别响、非常近——BPMN2新规范与Activiti5

合集下载

BPMN工作流的基本概念!详解工作流框架Activiti

BPMN工作流的基本概念!详解工作流框架Activiti

BPMN⼯作流的基本概念!详解⼯作流框架Activiti⼯作流⼯作流简介⼯作流(Workflow): ⼯作流就是通过计算机技术对业务流程进⾏⾃动化管理。

实现多个参与者按照预定的流程去⾃动执⾏业务流程。

定义: 通过计算机对业务流程⾃动化执⾏管理主要解决的是: 使在多个参与者之间按照某种预定义的规则⾃动进⾏传递⽂档,信息或任务的过程.从⽽实现某个预期的业务⽬标,或者促使此⽬标的实现⼯作流管理系统的⽬标:管理⼯作的流程以确保⼯作在正确的时间被期望的⼈员所执⾏在⾃动化进⾏的业务过程中插⼊⼈⼯的执⾏和⼲预⼯作流框架:Activiti,JBPM,OSWorkFlow,WorkFlow⼯作流框架底层需要有数据库提供⽀持⼯作流术语⼯作流引擎ProcessEngine对象: 这是Activiti⼯作的核⼼.负责⽣成流程运⾏时的各种实例及数据,监控和管理流程的运⾏BPM业务流程管理:是⼀种以规范化的构造端到端的卓越业务流程为中⼼,以持续的提⾼组织业务绩效为⽬的的系统化⽅法常见商业管理教育如EMBA,MBA等均将BPM包含在内BPMN业务流程建模与标注:这些图如何组合成⼀个业务流程图(Business Process Diagram)讨论BPMN的各种的⽤途:包括以何种精度来影响⼀个流程图中的模型BPMN作为⼀个标准的价值BPMN未来发展的远景流对象⼀个业务流程图有三个流对象的核⼼元素事件⼀个事件⽤圆圈来描述,表⽰⼀个业务流程期间发⽣的东西事件影响流程的流动.⼀般有⼀个原因(触发器)或⼀个影响(结果)基于它们对流程的影响,有三种事件:开始事件,中间事件,终⽌事件活动⽤圆⾓矩形表⽰,⼀个流程由⼀个活动或多个活动组成条件条件⽤菱形表⽰,⽤于控制序列流的分⽀与合并。

可以作为选择,包括路径的分⽀与合并内部的标记会给出控制流的类型Activiti开源⼯作流框架Activiti简介Activiti是⼀个开源的⼯作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进⾏流程调度Activiti 作为⼀个遵从 Apache 许可的⼯作流和业务流程管理开源平台,其核⼼是基于Java的超快速,超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌⼊性和可扩展性,同时更加强调⾯向业务⼈员Activiti 流程引擎重点关注在系统开发的易⽤性和轻量性上.每⼀项BPM业务功能Activiti流程引擎都以服务的形式提供给开发⼈员.通过使⽤这些服务,开发⼈员能够构建出功能丰富,轻便且⾼效的BPM应⽤程序Activiti服务结构Activiti系统服务结构图核⼼类:ProcessEngine: 流程引擎的抽象,可以通过此类获取需要的所有服务服务类:XxxService: 通过ProcessEngine获取,Activiti将不同⽣命周期的服务封装在不同Service中,包括定义,部署,运⾏.通过服务类可获取相关⽣命周期中的服务信息RepositoryServiceRepository Service提供了对repository的存取服务Activiti中每⼀个不同版本的业务流程的定义都需要使⽤⼀些定义⽂件,部署⽂件和⽀持数据(例如BPMN2.0XML⽂件,表单定义⽂件,流程定义图像⽂件等),这些⽂件都存储在Activiti内建的Repository中RuntimeServiceRuntime Service提供了启动流程,查询流程实例,设置获取流程实例变量等功能.此外它还提供了对流程部署,流程定义和流程实例的存取服务TaskServiceTask Service提供了对⽤户Task和Form相关的操作.它提供了运⾏时任务查询,领取,完成,删除以及变量设置等功能HistoryServiceHistory Service⽤于获取正在运⾏或已经完成的流程实例的信息,与Runtime Service中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化FormService使⽤Form Service可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单Activiti中的流程和状态Task均可以关联业务相关的数据IdentityServiceIdentity Service提供了对Activiti系统中的⽤户和组的管理功能Activiti中内置了⽤户以及组管理的功能,必须使⽤这些⽤户和组的信息才能获取到相应的TaskManagementServiceManagement Service提供了对Activiti流程引擎的管理和维护功能这些功能不在⼯作流驱动的应⽤程序中使⽤,主要⽤于 Activiti 系统的⽇常维护核⼼业务对象:org.activiti.engine.impl.persistence.entity包下的类,包括Task,ProcessInstance,Execution等根据不同职责实现相应接⼝的⽅法(如需要持久化则继承PersistentObject接⼝),与传统的实体类不同Activiti组件Activiti上下⽂组件Context: ⽤来保存⽣命周期⽐较长,全局性的信息,类似Application.主要包括如下三类:CommandContext: 命令上下⽂-保存每个命令必要的资源,如持久化需要的sessionProcessEngineConfigurationImpl: 流程引擎相关配置信息-整个引擎全局的配置信息.如数据源DataSource等.该对象为单例,在流程引擎创建的时候初始化ExecutionContext: 持有ExecutionEntity对象持久化组件:Activiti使⽤mybatis作OR映射,并在此基础上增加设计了⾃⼰的持久化框架在流程引擎创建时初始化,顶层接⼝Session,SessionFactorySession有两个实现类:DbSqlSession: 负责sql表达式的执⾏AbstractManager: 负责对象的持久化操作SessionFactory有两个实现类:DbSqlSessionFactory: 负责DbSqlSession相关操作GenericManagerFactory: 负责AbstractManager相关操作Event-Listener组件:Activiti允许客户代码介⼊流程执⾏,提供了事件监听组件监听的事件类型:TaskListenerJavaDelegateExpressionExecutionListenerProcessEngineConfigurationImpl持有DelegateInterceptor的某个实例,⽅便调⽤handleInvocation Cache组件DbSqlSession中有cache的实现Activiti基于List和Map来做缓存:如查询时先查缓存,没有则直接查询并放⼊缓存异步执⾏组件Activiti可以执⾏任务,JobExecutor为其核⼼类,JobExecutor包含三个主要属性:JobAcquisitionThreadBlockingQueueThreadPoolExecutor⽅法ProcessEngines在引擎启动时调⽤JobExecutor.start,JobAcquisitionThread 线程即开始⼯作,其run⽅法不断循环执⾏AcquiredJobs中的job,执⾏⼀次后线程等待⼀定时间直到超时或者JobExecutor.jobWasAdded⽅法,因为有新任务⽽被调⽤。

基于Activiti5引擎的售后业务信息平台

基于Activiti5引擎的售后业务信息平台

基于Activiti5引擎的售后业务信息平台摘要随着网络信息技术的发展,一些传统的依据工作流技术的产品已经无法满足企业的需要,尤其是对变化的流程类型,同时也缺乏开放性和集成性等问题从而不能很好的适应公司的业务需求。

该系统总体架构采用S2SH框架,引入Activiti5引擎对系统流程进行管理,这样可以减少企业运行成本,提高管理效率,增强各部门协同办公能力。

该系统从实际出发,以公司的售后业务信息系统为例,详细介绍S2SH框架和Activiti5引擎整合的优势以及实现细节。

【关键词】工作流管理系统BPMN2,0 Spring+Strut2+Hibernate;Activiti5随着业务不断扩大和日益激烈的市场竞争,公司对于售后管理部分的服务也越来越重视,为了让公司的售后服务更加管理流程化,便利化,增强用户的满意程度,进一步提升产品的市场竞争力,特开发本系统,实现售后管理业务的规范化、信息化。

本系统包括:安装评估、调试参数设定、安装参数设定、故障登记、故障排查及处理、故障处理回访,还包括故障处理知识库维护、故障问题库维护等业务,售后服务的启动是从设备调试安装开始。

如采用传统开发模式,代码量大、冗余度多,不便于测试、扩展和维护,采用S2SH 框架进行开发,采用MVC设计模式,实现了模型、视图、控制器的分离,层次之间职责明确,让业务逻辑层与持久层也进行独立,倘若对数据进行更改,那么不会对前端造成影响,同样地,也不管前端如何变化,模型层只需很少的改动,这样可以大大提高系统的复用性。

最主要的是采用Activiti5工作流技术对系统的流程进行管理,降低了复杂流程应用开发和维护的难度,有利于团队开发成员并行工作。

1 主要技术简介1.1 Activiti5技术Activiti5 的创始人是Tom Baeyens 加入Alfresco 后推出的基于JBPM4 的开源工作流系统,它本身是一个业务流程管理(BPM)系统,它是由Apache开源许可的BPMN 2.0引擎开发出来的一种轻量级的可实现嵌入的BPM引擎。

Activiti的特点

Activiti的特点

关于BPMN的细节内容有很多,官方文档足足有500多页,本书会在第4章介绍Activiti支持的BPMN 2.0规范以及Activiti在BPMN 2.0规范基础上的扩展。关于BPMN的其他内容本书就不一一列举了,有兴趣的读者可以仔细阅读官方文档。
1.3 Activiti的特点
执行:具体的流程引擎(例如,Activiti)按照事先定义的流程处理路线以任务驱动的方式执行业务流程。
监控:此阶段是依赖执行阶段。业务人员在办理任务的同时收集每个任务(Task)的结果,然后根据结果做出相应处理,例如,在采购办公用品流程中,在通过领导审批之后,采购人员就要根据申请单外出采购。
Activiti有着活跃的社区,而且越来越多的企业都选择Activiti作为自己的流程引擎或者将其嵌入到自己的系统平台中(例如ESB)。
接下来简单了解一下工作流及其相关规范的历史。
1.2 工作流基础
1.2.1 什么是BPM
BPM是Business Process Management的缩写,中文含义是业务流程管理,是一套达成企业各种业务环节整合的全面管理模式。
从概念上来说,BPM包含两个不同方面的意思:管理规范和软件工程。各大BPM供应商长期以来试图抽象这两个不同的方面,但是依然混乱。
作为管理规范,BPM是每一个战略管理者的责任。BPM是组织必须执行的核心业务流程,包含了企业价值和如何提供其实现。作为日常工作的一部分,业务系统可以借助模型和流程规范地定义业务流程。BPM流程图表达的是执行流程的步骤,已完成特定目标。特别说明的是这些模型用于人与人的沟通。这些都是诠释未决的,这意味着它们可以包含更高级别有价值的信息而不包括不必要的细节。这种诠释未决的过程模型也被称为抽象业务流程(Abstract Business Processes.)。

BPMN 2.0

BPMN 2.0

BPMN 2.0业务流程模型注解(Business Process Modeling Notation - BPMN)是业务流程模型的一种标准图形注解。

这个标准是由对象管理组(Object Management Group - OMG)维护的。

基本上,BPMN规范定义了任务看起来怎样的,哪些结构可以与其他进行连接,等等。

这就意味着意思不会被误解。

标准的早期版本(1.2版以及之前)仅仅限制在模型上,目标是在所有的利益相关者之间形成通用的理解,在文档,讨论和实现业务流程之上。

BPMN标准证明了它自己,现在市场上许多建模工具都使用了BPMN标准中的元素和结构。

实际上,现在的jPDL设计器也使用了 BPMN元素。

BPMN规范的2.0版本,当前已经处于最终阶段了,已经计划不就就会完成,允许添加精确的技术细节在BPMN的图形和元素中,同时制定BPMN元素的执行语法。

通过使用XML语言来指定业务流程的可执行语法, BPMN规范已经演变为业务流程的语言,可以执行在任何兼容BPMN2的流程引擎中,同时依然可以使用强大的图形注解。

3.2. 历史和目标jBPM BPMN2的实现是在jBPM 4.0发布之后在2021年8月,在与社区进行了紧密协作之后启动的。

而后,我们决定了第一个发布版(比如,文档/QA)涉及一部分BPMN2规范,将在jBPM 4.3发布。

我们的目标是建立一个原生BPMN2运行引擎(或者说实现'可执行的BPMN2')基于流程虚拟机(Process Virtual Machine - PVM)。

注意,这个版本的主要目标是原生可执行,不是图形注解 - 但是我们清楚对于未来的版本是很重要的。

如果用户已经了解了jBPM,就会发现? ? ? ?配置结构保持不变API与已经存在的完全一样或者很类似测试BPMN2流程也可以使用常用的java测试框架数据库表结构保持不变所以,总体来说,我们的主要目标是保持所有在jBPM上好的事情,加强它们,使用一个标准的流程语言。

JFlow与activiti的对比

JFlow与activiti的对比

驰骋工作流引擎JFlow 与activiti对比分析报告目录前言 (4)工作流程引擎- 对比 (4)5 种基本控制流模式的对比 (5)4 种高级分支同步模式 (10)2 种结构化模式 (14)4 种包含多实例的模式 (16)3 种基于状态的模式 (19)2 种取消模式 (22)总结 (23)表单集成 (24)表单引擎与流程引擎的关系 (25)最简单的请假流程-根据表单的请假天数来判断流程的分支 (25)流程引擎操纵表单引擎的一个案例 (27)对多种表单的支持 (29)简洁明快的CCForm (29)Word 文档支持 (31)Excel 表单的支持 (31)表单树的支持 (32)符合中国特色个性化JFlow 功能 (32)流程属性 (33)多种接受人规则 (33)接受人员投递路径自动记忆 (34)发起前置导航 (35)节点属性 (35)方向条件可视化配置 (36)JFlow 对工业自动化的流程支持 (37)前言为了更好的说明activiti 与jflow 的两款工作流引擎的特点与区别,我们按照如下几个方面做一次全面的、客观的对比。

首先activiti 是国外的一款开源的工作流程引擎,在国际上影响比较深远与广泛,解决了BPM领域的很多问题,值得我们赞赏。

他的boss 是jbpm 的前身。

JFlow 是济南驰骋公司开放的一款工作流程引擎,JFlow 的前身是CCFlow ,ccflow 是国内开源的一款老牌的工作流程引擎,承担过很多大型项目,适应于复杂的国内应用环境。

Activity 相对简单,仅有流程引擎,没有表单引擎。

在BPM 的研究领域, 很多的学者,专家都是把流程引擎与表单引擎分开的,对于这个观点我们并不很赞同。

实现功能需要大量的代码开发。

JFlow 是JFlow 流程引擎+CCForm 的表单引擎的有机结合,内容相对复杂,配置程度较高,实施周期短,上手快。

工作流程引擎- 对比以国外流行的工作流activiti 的模式与当今中国开源的JFlow(ccflow 和jflow 的总称)流程引擎对照。

activiti5连线表达式解析

activiti5连线表达式解析

activiti5连线表达式解析1.引言在a ct iv it i5中,连线表达式是指在流程设计过程中用于判断流程走向的条件表达式。

本文将详细介绍ac tiv i ti5连线表达式的定义、使用、语法和示例,帮助读者更好地理解和应用这一功能。

2.连线表达式的定义连线表达式是一种用于判断流程顺序流向的条件表达式。

在a c ti vi ti5中,连线表达式通常用于分支判断、流程合并和回退等场景中,通过对表达式的求值结果进行判断,来确定流程的下一步走向。

3.连线表达式的使用方法在a ct iv it i5中,连线表达式可以通过以下方式使用:3.1在连线属性中定义表达式连线属性面板中提供了一个条件表达式的输入框,可以直接在该输入框中编写表达式,用于判断流程的走向。

在编写表达式时,可以使用a c ti vi ti5提供的表达式语言,也可以使用ja va表达式语言。

3.2在连线属性中选择已定义的表达式在连线属性面板中,还可以选择已经在流程定义中定义的表达式,从而实现连线的判断。

4.连线表达式的语法连线表达式的语法遵循a ct iv it i5表达式语言的规则,并支持部分J a va表达式。

常用的语法包括:4.1比较运算符常用的比较运算符有"=="、"!="、">"、"<"、">="、"<="等,用于比较两个值的大小或相等关系。

4.2逻辑运算符常用的逻辑运算符有"&&"、"||"、"!",用于组合多个条件进行判断。

4.3函数和方法在连线表达式中,可以调用已定义的函数或方法,用于实现更复杂的条件判断。

4.4变量和常量连线表达式中可以使用流程变量和常量,用于比较和判断。

5.连线表达式的示例下面是一些使用示例,帮助理解连线表达式的应用场景和实际用法:5.1分支判断```${or de r.am ou nt>1000}```该表达式用于判断订单金额是否大于1000,如果是,则流程走向为"是"分支,否则为"否"分支。

纵观jBPM:从jBPM3到jBPM5以及Activiti5

纵观jBPM:从jBPM3到jBPM5以及Activiti5

纵观jBPM:从jBPM3到jBPM5以及Activiti5 作者荣浩发布于 2010年12月28日上午12时0分社区Java主题业务流程建模 ,业务流程管理标签Activiti ,jBPM ,JBoss分享|对jBPM来说,今年最大的事件莫过于jBPM的创建者Tom Baeyens离开JBoss 了。

Tom Baeyens离开的具体原因尚不清楚,但他的离开产生了两个结果:一是jBPM的下一个版本jBPM5完全放弃了jBPM4的基础代码,基于Drools Flow重头来过;二是Tom Baeyens加入Alfresco后很快推出了新的基于jBPM4的开源工作流系统Activiti。

由此不难推测Tom Baeyens离开的部分原因:JBoss内部对jBPM未来版本的架构实现产生了严重的意见分歧。

更加巧合的是12月1日Activiti5刚发布,紧接着12月2日jBPM5就发布了第一个候选发布版本,jBPM 与Activiti之间的微妙关系可见一般。

在这篇文章里,我们将一起回顾jBPM从jBPM3到jBPM5以及Activiti5的发展历程,我们可以清晰的看见jBPM(包括Activiti)设计所遵循的一致原则:强调流程服务的可嵌入性和可扩展性。

同时,从各个版本之间的变化我们也能看见产品设计思路的变化:更加强调面向业务人员,增加BPMS(业务流程管理系统)特性。

在回顾之前,我们首先讨论一下BPMS应该嵌入还是独立部署的问题,因为不管是jBPM还是Activiti,都强调了流程服务的可嵌入性。

此外,我们还需要讨论一下什么是BPMS的特性,它们所解决的问题是什么。

一、嵌入式还是独立部署?不管是jBPM还是Activiti,都强调了流程服务的可嵌入性。

Tom Baeyens在其个人博客里称作为独立部署的BPMS已死,原因有两个:一是独立部署的BPMS需要很高的安装使用成本,需要独立部署、需要用户支出大量的培训成本和维护成本;二是独立部署的BPMS与外部系统的交互方式是分布式,这使得很多问题变得复杂,例如分布式事务。

activiti原理

activiti原理

activiti原理
activiti是一个基于Java语言的开源工作流引擎,可以快速地构建流程管理、任务分配、权限审批等各种业务流程。

activiti的原理主要包括以下几个方面:
1. BPMN标准:activiti采用了BPMN(Business Process Model and Notation)标准来描述流程,BPMN是一种图形化的业务流程建模语言,用于描述业务流程中的活动、事件、网关、任务等元素,支持流程的可视化建模,提高了业务流程的可读性和可理解性。

2. 工作流引擎:activiti包含了一个工作流引擎,用于管理流程执行过程中的各种状态、流转、事件等。

工作流引擎主要由三个部分组成:流程引擎、任务引擎和历史引擎。

流程引擎负责解析BPMN 模型、驱动流程的执行;任务引擎负责处理任务的分配、完成、撤销等操作;历史引擎负责记录流程的历史信息,包括流程实例、任务、变量等。

3. 事件机制:activiti采用了事件机制来实现流程的监听和扩展。

事件机制允许用户在流程执行过程中注册监听器,在流程中发生指定的事件时触发监听器执行相应的操作,比如发送邮件通知、执行自定义的逻辑等。

4. Spring框架:activiti支持与Spring框架集成,可以使用Spring来管理activiti的bean对象,简化了配置和使用的难度。

同时,Spring提供了很多有用的功能,如事务管理、AOP等,可以更好地管理和控制activiti的执行过程。

总的来说,activiti的原理主要是基于BPMN标准的流程描述和工作流引擎的控制,同时支持事件机制和Spring框架的集成,使得activiti具备了高度的可扩展性和灵活性,可以满足不同场景下的流程管理需求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

特别响、非常近——BPMN2新规范与Activiti5上世纪九十年代以后,随着WfMC联盟的成立,BPM市场群雄逐鹿如火如荼,工作流技术得到了突飞猛进的发展,其中IBM、Oracle等大型软件厂商在工作流领域各扯大旗割据一方。

2011年BPMN2.0新规范的发布为各工作流产品互容互通提供了统一的标准,结束了各工作流厂商各自为政相互抵斥的局面。

什么是BPMN、Workflow?•BPM(Business Process Management)——“通过建模、自动化、管理和优化流程,打破跨部门跨系统业务过程依赖,提高业务效率和效果”。

•Workflow——“全部或者部分由计算机支持或自动处理的业务过程”(工作流管理联盟WfMC组织对工作流概念的经典定义)BPM基本内容是管理既定工作的流程,通过服务编排,统一调控各个业务流程,以确保工作在正确的时间被正确的人执行,达到优化整体业务过程的目的。

BPM概念的贯彻执行,需要有标准化的流程定义语言来支撑,使用统一的语言遵循一致的标准描述具体业务过程,这些流程定义描述由专有引擎去驱动执行。

这个引擎就是工作流引擎,它作为BPM的核心发动机,为各个业务流程定义提供解释、执行和编排,驱动流程“动“起来,让大家的工作“流”起来,为BPM的应用提供基本、核心的动力来源。

现实工作中,不可避免的存在跨系统跨业务的情况,而大部分企业在信息化建设过程中是分阶段或分部门(子系统)按步实施的,后期实施的基础可能是前期实施成果的输出,在耦合业务实施阶段,相同的业务过程可能会在不同的实施阶段重用,在进行流程梳理过程中,不同的实施阶段所使用的流程描述语言或遵循的标准会有所不同(服务厂商不同),有的使用WfMC 的XPDL,还有些使用BPML、BPEL、WSCI等,这就造成流程管理、业务集成上存在很大的一致性、局限性,提高了企业应用集成的成本。

BPMN2.0规范的引入遵循BPMN2.0新规范的工作流产品能很大程度上解决此类问题。

BPMN2.0相对于旧的1.0规范以及XPDL、BPML及BPEL等最大的区别是定义了规范的执行语义和格式,利用标准的图元去描述真实的业务发生过程,保证相同的流程在不同的流程引擎得到的执行结果一致。

BPMN2.0对流程执行语义定义了三类基本要素,它们是日常业务流程的“三板斧”:•Activities(活动)——在工作流中所有具备生命周期状态的都可以称之为“活动”,如原子级的任务(Task)、流向(Sequence Flow),以及子流程(Sub-Process)等•Gateways(网关)——顾名思义,所谓“网关”就是用来决定流程流转指向的,可能会被用作条件分支或聚合,也可以被用作并行执行或基于事件的排它性条件判断•Events(事件)——在BPMN2.0执行语义中也是一个非常重要的概念,像启动、结束、边界条件以及每个活动的创建、开始、流转等都是流程事件,利用事件机制,可以通过事件控制器为系统增加辅助功能,如其它业务系统集成、活动预警等这三类执行语义的定义涵盖了业务流程常用的Sequence Flow(流程转向)、Task(任务)、Sub-Process(子流程)、Parallel Gateway(并行执行网关)、ExclusiveGateway(排它型网关)、InclusiveGateway(包容型网关)等常用图元,如图1:图1:BPMN2.0三类基本执行语义要素现实业务所有的业务环节都离不开Activities、Gateways和Events,无论是简单的条件审批还是复杂的父子流程循环处理,在一个流程定义描述中,所有的业务环节都离不开Task、Sequence Flow、Exclusive Gateway、Inclusive Gateway(如图1中右侧绿色标记所示元素),其中Task是一个极具威力的元素,它能描述业务过程中所有能发生工时的行为,它包括User Task、Manual Task、Service Task、Script Task等,可以被用来描述人机交互任务、线下操作任务、服务调用、脚本计算任务等常规功能。

User Task:生成人机交互任务,主要被用来描述需要人为在软件系统中进行诸如任务明细查阅、填写审批意见等业务行为的操作,流程引擎流转到此类节点时,系统会自动生成被动触发任务,须人工响应后才能继续向下流转。

常用于审批任务的定义。

Manual Task:线下人为操作任务,常用于为了满足流程图对实际业务定义的完整性而进行的与流程驱动无关的线下任务,即此类任务不参与实际工作流流转。

常用于诸如物流系统中的装货、运输等任务的描述。

Service Task:服务任务,通常工作流流转过程中会涉及到与自身系统服务API调用或与外部服务相互调用的情况,此类任务往往由一个具有特定业务服务功能的Java类承担,与User Task不同,流程引擎流经此节点会自动调用Java类中定义的方法,方法执行完毕自动向下一流程节点流转。

另外,此类任务还可充当“条件路由”的功能对流程流转可选分支进行自动判断。

常用于业务逻辑API的调用。

Script Task:脚本任务,在流程流转期间以“脚本”的声明或语法参与流程变量的计算,目前支持的脚本类型有三种:juel(即JSP EL)、groovy和javascript。

在Activiti5.9中新增了Shell Task,可以处理系统外部定义的Shell脚本文件,也与Script Task有类似的功能。

常用于流程变量的处理。

BPMN2.0流程示例BPMN2.0为所有业务元素定义了标准的符号,不同的符号代表不同的含义,以OA应用中请假流程为例,使用标准的BPMN2.0图元定义示意如图2:图2:BPMN2.0请假流程定义在上述的流程示意图中,所涉及到的执行语义图元主要有表1中的8类:表1:请假流程所用图元除了上述Start Event、User Task、Exclusive Gateway、Parallel Gateway、Service Task、End Event标准的BPMN2.0图元外,上述流程图还使用了Lane Set(业务部门、人力资源部、考勤系统),分别表示流程活动所涉及到的部门或角色,Lane的概念和jBPM4中“泳道”的概念一样,都用来表示同一类相似任务的归属者。

应用BPMN2.0标准的一个最显著的特色是,不同阶段的人员,无论是需求分析、概要设计、详细设计或是具体的业务实现,都可在一个流程图上开展工作,避免业务理解存在偏差。

一个系统的实现,需求分析人员可以利用BPMN2.0标准图元草绘一下搜集到的需求;然后可以拿给设计人员,讨论出具体的业务需求进行功能设计,由设计人员在草图的基础上逐步细化,并得到需求人员的认同;设计人员又将细化后的流程图交给开发人员,罗列要实现的功能点,指出流程图上各活动节点所具备的行为,设计人员与开发人员依据此图达成共识,进入具体的开发阶段;如果后期请假流程发生更改,仍然是在现有流程图上更改,随着项目的推进,流程图也在不断的演进,但至始至终,项目受众都使用同一个流程图交流,保障需求理解的一致性,一定程度上推动了项目的敏捷性。

Activiti5支持最新的BPMN2.0规范作为支持最新BPMN2.0规范的开源工作流引擎Activit5,实现了对规范的绝大多数图元的定义,能够满足企业工作流的各种复杂应用。

它是一个无侵入的、支持嵌入式和独立部署的开源工作流引擎,是Tom Bayen离开jBoss加入Alfresco公司后的另立山头之作,共同开发Activit5的除了Alfresco外还有SpringSource、MuleSoft、Salves、FuseSource、Signavio 等公司。

从Activiti5.0到当前的5.9(今年3月份发布),版本更新迭代速度很快,新版本功能稳定,性能良好,为开源社区提供了商业工作流之外非常具有竞争力的选择。

与jBPM5的差别值得一提的是,Activiti5与jBPM5都属于业界优秀的开源工作流引擎,都支持BPMN2.0最新规范,均基于Apache License,符合J2EE规范,提供工作流建模、执行以及对流程生命周期过程监控。

但两者设计理念和技术组成却有很大不同,见下表2:表2:Activiti5与jBPM5技术组成Activiti5使用Spring进行引擎配置以及各个Bean的管理,综合使用IoC和AOP技术,使用CXF作为Web Services实现的基础,使用MyBatis进行底层数据库ORM的管理,预先提供Bundle化包能较容易的与OSGi进行集成,通过与Mule ESB的集成和对外部服务(Web Service、RESTful等)的接口可以构建全面的SOA应用;jBPM5使用社区的大多数组件,以Drools Flow为核心组件作为流程引擎的核心构成,以Hibernate作为数据持久化ORM 实现,采用基于JPA/JTA的可插拔的持久化和事务控制规范,使用Guvnor作为流程管理仓库,能够与Seam、Spring、OSGi等集成。

需要指出的是Activiti5是在jBPM3、jBPM4的基础上发展而来的,是原jBPM的延续,而jBPM5则与之前的jBPM3、jBPM4没有太大关联,且舍弃了备受推崇的PVM(流程虚拟机)思想,转而选择jBoss自身产品Drools Flow作为流程引擎的核心实现,工作流最为重要的“人机交互”任务(类似于审批活动)则由单独的一块“Human Task Service”附加到Drools Flow上实现,任务的查询、处理等行为通过Apache Mina异步通信机制完成。

优劣对比:从技术组成来看,Activiti最大的优势是采用了PVM(流程虚拟机),支持除了BPMN2.0规范之外的流程格式,与外部服务有良好的集成能力,延续了jBPM3、jBPM4良好的社区支持,服务接口清晰,链式API更为优雅;劣势是持久化层没有遵循JPA规范。

jBPM最大的优势是采用了Apache Mina异步通信技术,采用JPA/JTA持久化方面的标准,以功能齐全的Guvnor作为流程仓库,有RedHat(被红帽收购)的专业化支持;但其劣势也很明显,对自身技术依赖过紧且目前仅支持BPMN2。

Activiti5设计模式命令模式能将命令的发出与执行分开,委派给不同的对象,每一个命令都代表一个指令,其最大的好处是提供了一个公共接口,使得用户可以用同一种方式调用所有的事务,同时也易于添加新事务以扩展系统。

Activiti5大量采用了命令模式,在流程运行期间,所有的指令执行(比如流程部署、流程流转、获取任务等)都使用此模式实现,其中涉及到四个重要的概念:Command:Activiti5的命令定义接口,仅有一个execute方法,所有运行期要执行的指令都要实现该接口,定义要执行的具体行为。

相关文档
最新文档