Activiti流程实例
1重要概念扫盲
1.1前⾔
从本篇⽂章我们开始介绍⼯作流框架activiti的相关知识,不过在介绍activiti的知识之前,我们很有必要对⼯作流的⼀些基本概念进⾏了解。
1.1.1⼯作流重要概念
Workflow
Workflow(⼯作流)是“业务过程的部分或整体在计算机应⽤环境下的⾃动化,是对⼯作流程及其各操作步骤之间业务规则的抽象、概括描述”,它主要解决的是“使在多个参与者之间按照⼀种提前定义好的规则流程来传递与执⾏⽂档、信息或任务的过程,让这个过程可以⾃动进⾏或者部分⾃动执⾏,从⽽完成预期的业务⽬标”。
WfMC
提到⼯作流就不能不提到⼯作流管理联盟(WfMC,WorkflowManagementCoalition),它是⼀个由涉及⼯作流和业务流程管理的推⼴学者(adopters)、开发⼯程师、顾问、分析师、⼤学和研究团体的全球性组织,它的成⽴,标志着⼯作流技术开始进⼊相对成熟的阶段。该组织创建并完善了⼯作流管理系统的相关术语、体系结构及应⽤编程接⼝等⽅⾯制定了⼀系列标准,是唯⼀的致⼒于⼯作流标准的专业组织。
WfMS
接下来要说的是⼯作流管理系统(WorkflowManagement System,WfMS),它完成了⼯作量的定义和管理,并按照在系统中预先定义好的⼯作流规则进⾏⼯作流实例的执⾏的软件系统,这⾥要说明⼀下的是,并不是我们企业⾃⼰的系统应⽤了⼯作流就是⼯作流管理系统了,⼯作流管理系统不是企业的业务系统,⽽是为企业的业务系统的运⾏提供了⼀个软件的⽀撑环境。WfMS 被⽤来定义、管理和执⾏⼯作流程,它的⽬标是管理⼯作的流程以确保⼯作在正确的时间被期望的⼈员所执⾏。同时也可以在⾃动化进⾏的业务过程中插⼊⼈⼯的执⾏和⼲预。
WfMS与⼯作流框架
WfMS我⼀般习惯于称它为⼯作流框架,常见的⼯作流框Activiti、JBPM、OSWorkflow、ActiveBPEL、YAWL等。
1.1.2⼯作流引擎
个⼈觉得直接理解⼯作流引擎概念有点难度,我们可以先通过了解⼯作流引擎的职责再反过来理解⼯作流引擎,⼯作流引擎⼀般都做两件事情:
1.定义流程,也就是给我们提供某种规范来定义规则,以及如何定义⼀个流程的这种规范,同事我们可以根据⼯作流引擎提供的相关概念来定义更为复杂的流程,这就是⼯作流引擎做的第⼀件事叫做定义流程。
2.执⾏流程,也就是⼯作流引擎需要解释这个规则,还要负责流程,它相当于流程的调度者,监控每个流程的执⾏情况,并将流程操作发往下⼀步,或者根据条件休眠或终⽌流程的这么⼀个过程就叫做执⾏流程。
了解完⼯作流引擎的这两个职责,我相信对于什么是⼯作流引擎⼀定已经有了⼀定的认识了,我们在⽤⼀句稍微有点官⽅的话来总结⼀下⼯作流引擎,⼯作流引擎为我们提供相关规则概念的定义,给我们提供了相关的API来调⽤这个引擎去执⾏流程。流程的操作实际上就是⼯作流引擎提供相关的api 我们去调⽤它。
⼯作流框架与⼯作流引擎
上⾯我们提及了常见了⼏个⼯作流框架,其中现在的Activiti和JBPM5.0之前的版本都是基于ProcessEngine ⼯作流引擎的⼯作流框架;JBPM5.0开始是基于DroolsFlow为⼯作流引擎的⼯作流框架;其中OSWorkflow是以⼯作流引擎命名的⼯作流框架,所以OSWorkflow是基于OSWorkflow⼯作流引擎的⼯作流框架;ActiveBPEL是基于⼯作流BPEL引擎的⼯作流框架…….
到这⾥关于⼯作流的相关概念就介绍完了,接下来我们先了解⼀下我们的主⾓activiti的前世今⽣。
1.1.3 Activiti前世今⽣
Activiti 的创始⼈是 Tom Baeyens说到Tom Baeyens就不能不提他与jbpm的渊源。TomBaeyens 是 jBPM 的创始⼈,在 2002年,Tom Baeyens创建了基于状态机原理的jBPM流程引擎。jBPM经过了JBoss和Redhat公司之后,发展到了 jBPM 4。由于jBPM使⽤的是 GPL开源协议,并且与
内部对jBPM未来版本的架构实现产⽣了严重的意见分歧,在2005年 Tom Baeyens离开了JBoss公司加⼊了Alfresco 公司,创
建了使⽤Apache based-license V2的、独⽴于Alfresco产品的开源流程产品Activiti 。Activiti在2010年3⽉份开始启动,到了2010年12⽉份正式发布第⼀个版本,新的基于jBPM4的开源⼯作流系统Activiti 5.0!所以说Activiti5是在jBPM 3、jBPM4的基础上发展⽽来的,是原jBPM 的延续。
Activiti与jBPM5的⽐较
jBPM 5则与之前的jBPM3、jBPM 4没有太⼤关联,且舍弃了备受推崇的PVM(流程虚拟机)思想,转⽽选择jBoss⾃⾝产品DroolsFlow作为流程引擎的核⼼实现,⼯作流最为重要的“⼈机交互”任务(类似于审批活动)则由单独的⼀块“Human Task Service”附加到DroolsFlow上实现,任务的查询、处理等⾏为通过Apache Mina异步通信机制完成。
序号技术组成Activiti jBPM5
MyBatis3Hibernate3
1数据库持久层
ORM
2持久化标准⽆JPA规范
3事务管理MyBatis机制/spring事务控制Bitronix,基于JTA事务管理
Jdbc/DataSource Jdbc/DataSource
4数据库连接⽅
式
5⽀持数据库Oracle、SQL Server、MySQL等多数数据库Oracle、SQL Server、MySQL等多
数数据库
6设计模式Command模式、观察者模式等⽆
7内部服务通讯Service间通过API调⽤基于Apache Mina异步通讯
8集成接⼝SOAP、Mule、RESTful消息通讯
BPMN2、xPDL、jPDL等⽬前仅只⽀持BPMN2 xml
9⽀持的流程格
式
10引擎核⼼PVM(流程虚拟机)Drools
11技术前⾝jBPM3、jBPM4Drools Flow
12所属公司Alfresco www.doczj/doc/1421f021856a561252d36fcb.html
从表格中的⽐较我们可以看出,Activiti最⼤的优势是采⽤了PVM(流程虚拟机),⽀持除了BPMN2.0规范之外的流程格式,与外部服务有良好的集成能⼒,延续了jBPM3、jBPM4良好的社区⽀持,服务接⼝清晰,链式API更为优雅;劣势是持久化层没有遵循JPA规范。
jBPM最⼤的优势是采⽤了ApacheMina异步通信技术,采⽤JPA/JTA持久化⽅⾯的标准,以功能齐全的Guvnor作为流程仓库,有RedHat(www.doczj/doc/1421f021856a561252d36fcb.html 被红帽收购)的专业化⽀持;但其劣势也很明显,对⾃⾝技术依赖过紧且⽬前仅⽀持BPMN2。
我们对Activiti和jBPM进⾏⽐较⽬的是为了让我们可以对他们的特性更加的了解,只有了解了他们的特性以后,这样当我们遇到具体的项⽬时就可以根据需要来选⽤适合的⼯作流框架。
1.2总结
我们这篇⽂章主要介绍了⼯作流相关的基本概念,同时⼜了解了Activiti的前世今⽣,最后将Activiti与jBPM进⾏了⽐较。
2 Activiti整体认识
2.1前⾔
在上⼀篇⽂章中我们将⼯作流的相关概念、activiti的前世今⽣、activiti与jbpm的⽐较进⾏学习,这篇⽂章我们正式进⾏activiti 的学习,activiti的整个学习我们主要通过例⼦的形式来理解。今天我们主要是准备下activiti的环境,在数据库中创建activiti默认的23张表以及activiti核⼼对象ProcessEngine最后是⼀个activiti的简单demo。
2.2 环境准备
相关软件及版本:
jdk版本:Jdk1.8
IDE:eclipse
数据库:MySQL
Activiti:5.13
eclipse中安装流程设计器插件:
eclipse打开help->install new software,单击add:
Location:www.doczj/doc/1421f021856a561252d36fcb.html /designer/update/
进⾏安装即可。
引⼊jar包:
${Activiti_HOME}/install/activiti-5.13/libs(activiti相关包)+mysql对应驱动包(mysql-connector-Java.jar)
jar包引⼊完毕后,我们环境就准备的差不多了,往下我们就该创建我们activiti数据库默认的表了。
2.3 创建activiti表
在activiti中,相对于前⾝jbpm基础上⼜额外多了5张表,所有现在的activiti框架默认提供了23张表。所以第⼀步我们就来创建这23张表。
⽅法1:使⽤代码来创建activiti⼯作流的表
[java] view plain copy
1.⽅法1:使⽤代码来创建activiti⼯作流的表
2.
3.// 使⽤代码创建⼯作流需要的23张表
4.@Test
5.public void createTable() {
6. // ⼯作流引擎的全部配置
7. ProcessEngineConfiguration processEngineConfiguration = ProcessEngineCon
figuration
8. .createStandaloneProcessEngineConfiguration();
9.
restful接口调用实例10. // 链接数据的配置
11. processEngineConfiguration.setJdbcDriver("sql.jdbc.Driver");
12. processEngineConfiguration
13. .setJdbcUrl("jdbc:mysql://localhost:3306/activiti1?createDataba
seIfNotExist=true&useUnicode=true&characterEncoding=utf8");
14. processEngineConfiguration.setJdbcUsername("root");
15. processEngineConfiguration.setJdbcPassword("123456");
16.
17. /*
18. * public static final String DB_SCHEMA_UPDATE_FALSE = "false";
19. * 不能⾃动创建表,需要表存
在 public static final String DB_SCHEMA_UPDATE_CREATE_DROP
22. */
23. //如果表不存在,⾃动创建表
24. processEngineConfiguration
25. .setDatabaseSchemaUpdate(processEngineConfiguration.DB_SCHEMA_U
PDATE_TRUE);
26. // ⼯作流的核⼼对象,ProcessEnginee对象
27. ProcessEngine processEngine = processEngineConfiguration
28. .buildProcessEngine();
29. System.out.println(processEngine);
30.
31.
32.}
代码执⾏完毕,我们通过navicat查看数据库会发现,创建了⼀个新的数据库activiti1,并且还有23张表。
⽅式2:使⽤配置⽂件来创建activiti的表
在类路径下创建l⽂件,⽂件内容为:
[java] view plain copy
1.
2. xmlns:context="www.doczj/doc/1421f021856a561252d36fcb.html /schema/context" xmlns:tx=" www.doczj/doc/1421f021856a561252d36fcb.html /schema/tx"
4. xsi:schemaLocation="www.doczj/doc/1421f021856a561252d36fcb.html /schema/beans w www.doczj/doc/1421f021856a561252d36fcb.html /schema/beans/spring-beans.xsd
5.www.doczj/doc/1421f021856a561252d36fcb.html /schema/context
www.doczj/doc/1421f021856a561252d36fcb.html
/schema/context/spring-context-2.5.xsd
6.www.doczj/doc/1421f021856a561252d36fcb.html /schema/tx
www.doczj/doc/1421f021856a561252d36fcb.html /sche
ma/tx/spring-tx-3.0.xsd">
7.
8.
9.
10.class="ine.impl.cfg.StandaloneProcessEngineConfigur
ation">
11.
12.
y>
13.
14. value="jdbc:mysql://localhost:3306/activiti1?createDatabaseIfNo
tExist=true&useUnicode=true&characterEncoding=utf8">
15.
16.
17.
18.
19.
20.
21.
通过代码来加载配置⽂件中内容:
1./**
2. * 使⽤配置⽂件来创建数据库中的表
3. */
4.@Test
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论