什么是工作流(WorkFlow)
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。比如员工请假,就是由:员工申请、主管审批、人事确认等工作流程组成,在软件系统中这套流程就被看作一个工作流。
各种企业和事业机构都有可能用到工作流,如:
关键业务:订单、报价处理、采购处理、合同审核、客户电话处理、供应链管理等行政管理:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。人事管理:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。财务相关:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。客户服务:客户信息管理、客户投诉、请求处理、售后服务管理等。特殊服务:ISO系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范地实施。
什么是Activiti
Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技术实现。
创始人TomBaeyens是JBossjBPM的项目架构师,以及另一位架构师JoramBarrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN2.0引擎开发中来。
Activiti是一个独立运作和经营的开源项目品牌,并将独立于Alfresco开源ECM系统运行。Activiti将是一种轻量级,可嵌入的BPM引擎,而且还设计适用于可扩展的云架构。Activiti将提供宽松的Apache许可2.0,以便这个项目可以广泛被使用,同时促进ActivitiBPM引擎和BPMN2.0的匹配,该项目现正由OMG通过标准审定。加入AlfrescoActiviti项目的是VMware的SpringSource分支,Alfresco的计划把该项目提交给Apache基础架构,希望吸引更多方面的BPM专家和促进BPM的创新。
Activiti的基本配置
开发环境:IDEA+Maven+Activiti6.0
1、Idea安装Activiti插件
打开Idea选择File->settings->plugings->点击选择Browserepositories
然后在搜索框输入:actiBPM,看到如下窗体,未安装的情况下会出现Install按钮,点击按钮安装插件,然后重启Idea。
2、点击File->New->Project选择Maven项目
在Maven的项目模板中选择webapp,创建项目
3、引入相关的包,activiti的数据库操作由mybatis实现,还需要依赖spring框架进行配置,数据库这里我们使用MySQL以及c3p0连接池。
在pom.xml的dependencies中添加:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!--https://mvnrepository.com/artifact/org.activiti/activiti-engine-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>6.0.0</version>
</dependency>
4、添加配置文件,在项目的resources文件中添加配置文件:
1、配置log4j日志文件log4j.properties
log4j.rootLogger=INFO,Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%-5p-%m%n
2、Activiti的核心配置文件:activiti.cfg.xml,注意:这个文件名会由Activiti框架自动识别,所以不要写错。
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd">
<!--配置数据库连接池-->
<beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource">
<propertyname="driverClass"value="com.mysql.jdbc.Driver"/>
<property
name="jdbcUrl"value="jdbc:mysql://localhost:3306/act?useUnicode=true&characterEncoding=UTF-8&useSSL=true"/>
<propertyname="user"value="root"/>
<propertyname="password"value="123456"/>
</bean>
<!--配置事务管理-->
<bean
id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource"ref="dataSource"/>
</bean>
<!--Activiti的配置-->
<bean
id="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">
<propertyname="dataSource"ref="dataSource"/>
<propertyname="transactionManager"ref="transactionManager"/>
<propertyname="databaseSchemaUpdate"value="true"/>
</bean>
<!--配置工厂,用于创建流程引擎id必须为processEngine-->
<beanid="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean">
<property
name="processEngineConfiguration"ref="processEngineConfiguration"/>
</bean>
</beans>
Activiti数据库表介绍
单元测试:
1、在项目的src目录上右键->New->Directory添加test目录,
2、点击test目录右键选择MarkDirectoryAs-->TestSourceDirectory
3、添加单元测试类ActivitiTest
/**
*工作流单元测试
*/
publicclassActivitiTest{
@Test
publicvoidtestInitActiviti(){
//获得流程引擎,自动读取activiti.cfg.xml中的配置
ProcessEngineengine=ProcessEngines.getDefaultProcessEngine();
}
}
4、运行单元测试,会在MySQL的act数据库中创建23张表
所有表都是以act开头,ACT_RE_*:'RE'表示repository。这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等)。
ACT_RU_*:'RU'表示runtime。这些运行时的表,包含流程实例,任务,变量,异步任务等运行中的数据。Activiti只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。这样运行时表可以一直很小速度很快。
ACT_ID_*:'ID'表示identity。这些表包含身份信息,比如用户,组等等。
ACT_HI_*:'HI'表示history。这些表包含历史数据,比如历史流程实例,变量,任务等等。
ACT_GE_*:通用数据,用于不同场景下。
具体说明:
到此我们就完成了Activiti框架的基本配置,后面我们还会学习如何创建和部署工作流,使用工作流完成启动、查询和审核流程的工作。