Activiti工作流学习-----基于5.19.0版本(1)
该版本的Activiti运行须知:
1.JDK 6+,Eclipse最好是Kepler以上版本。
2.试验功能都有EXPERIMENTAL标注,被标注的部分不应该视为稳定的。
有兴趣的同学可以去了解下Activiti Explorer项目,他涵盖了大部分Activiti的功能,还没有Activiti概念的同学可以看看了解一下。
一、工作流开发之配置
Activiti沿用具有Spring配置文件风格的配置,工作流默认是加载名叫activiti.cfg.xml的文件,配置文件大体:
<beans xmlns="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.xsd"> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" /> <property name="databaseSchemaUpdate" value="true" /> <property name="jobExecutorActivate" value="false" />
<property name="asyncExecutorEnabled" value="true" />
<property name="asyncExecutorActivate" value="false" /> <property name="mailServerHost" value="mail.my-corp.com" />
<property name="mailServerPort" value="5025" />
</bean>
</beans>
而我们写好配置文件,交给activiti加载有以下几种方式:
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource);
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);
如果你喜欢零配置的话,可以:
ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
比如零配置使用其中第二种方法:
ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration()
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
.setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
.setAsyncExecutorEnabled(true)
.setAsyncExecutorActivate(false)
.buildProcessEngine();
不过我个人认为琐碎的配置如果都交给代码来维护的话,太费神了!况且交给代码水平不高的程序员来写的话,也不安全。所以还是交给xml吧,零配置除了新鲜没用。
1.1 activiti.cfg.xml文件配置
activiti.cfg.xml
必须包含id为
processEngineConfiguration的bean节点,例如:
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
processEngineConfiguration通常用来构造ProcessEngine,activiti提供了以下4个类来定义processEngineConfiguration
:
org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration:通过独立的方式获得流程引擎对象,Activiti将自己管理事务,一般的,数据库仅仅实在系统启动的时候被检测。
org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration: 它主要用作测试。Activiti将自己管理事务,默认使用H2数据库,数据库表将在启动被创建和关闭时被销毁。所以也就没多少配置了。
org.activiti.spring.SpringProcessEngineConfiguration: 它用作和Spring整合的。
org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration: 在独立模式中,使用了分布式事务可以使用它。(本人不怎么清楚)
1.1.1 数据库连接配置
数据库连接目前有两种配置,一种是使用MyBatis默认的数据库连接配置,另外一种是主流的数据库连接池。我是推荐后者的,因为前者的官方说明文档里面已经说了在生产上建议不使用默认的数据库连接设置。
前者的配置如下:(简单掠过)
<property name="jdbcUrl" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
<property name="jdbcDriver" value="org.h2.Driver" />
<property name="jdbcUsername" value="sa" />
<property name="jdbcPassword" value="" />
第二种方案:使用javax.sql.DataSource,比如DBCP,C3P0,Druid等
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/activiti" />
<property name="username" value="activiti" />
<property name="password" value="activiti" />
<property name="defaultAutoCommit" value="false" />
</bean> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <property name="dataSource" ref="dataSource" />
...
Activiti工作流并没有提供数据库连接池的Jar包,我们需要手动下载加到类路径下面。
无论使用那种数据库连接方案,一些数据库的其他配置需要关注:
databaseType:一般不需要,工作流内部会自动分析数据元,仅仅是在自动分析失败后读取该配置,目前支持的数据库有 h2, mysql, oracle, postgres, mssql, db2。
databaseSchemaUpdate:
- false(默认值)---在流程引擎被创建的时候,检查匹配数据库中工作流版本和工作流jar包的工作流版本,不匹配将会抛出异常。
- true---在创建工作流引擎时候检测匹配数据库中工作流版本和工作流jar包的工作流版本,没有就添加,有就修改。
- create-update:在创建工作流引擎时候添加工作流版本,关闭引擎的时候删除工作流版本。
1.1.2 创建工作流相关的表
在类路径下面加入activiti的jar包,数据库连接的jar,添加activiti.cfg.xml,然后运行DbSchemaCreate即可。
在生产上面往往开发者并没有数据库的管理员权限,所以在activiti的jar中提供了sql给相关人员,这些表总的来说分为三大类:
- engine:这是必需的。
- identity:activiti提供的用户管理功能的表。
- history:流程历史记录相关表
在MySQL上运行执行sql可要注意了,如果版本在5.5~5.6.3的请使用5.5版本的sql执行,或者就是升级数据库5.6.4+,因为在5.6.4的以下版本的MySQL的timestamps或者 date精度没有达到毫秒级,在工作流创建这一类列的话就会抛出异常。
1.1.3 工作流相关表的介绍
工作流相关的表全部是以“ACT_”开头的,后面紧接着的第二部分是activiti提供的service的简写, 比如:
ACT_RE_*: RE 代表
repository
. 包含流程定义,流程资源等。ACT_RU_*: RU 代表
runtime
. 这些表包含流程运行实例,任务、变量、分配工作等,这些表中仅仅存放运行数据,在流程实例执行结束后会被清除,这样表中的数据比较少,它使得程序执行很快。ACT_ID_*: ID 代表
identity
. 这些表包含了用户信息数据,比如用户个人信息,组信息等。ACT_HI_*: HI 代表
history
. 这些表包含历史数据,比如过去的流程实例,变量,任务等。ACT_GE_*: 通用的数据表,被用来存放各种数据。
Activiti工作流学习-----基于5.19.0版本(1)的更多相关文章
- Activiti工作流学习-----基于5.19.0版本(8)
8.1.5 Start Event 继续上一篇的事件的分享笔记,Start Event指明该处是流程开始,至于开始事件的类型(消息到达开始,指定的事件循环开始等),定义如何开始是在开始事件圆圈图标里面 ...
- Activiti工作流学习-----基于5.19.0版本(2)
二.activiti.cfg.xml的其他bean节点配置 2.1 新特性:Job Executor和Async Executor 从5.17.0版本的activiti开始提供作业执行者(Job Ex ...
- Activiti工作流学习-----基于5.19.0版本(5)
五.与Spring集成 实际项目中一般都有Spring的身影,与Spring集成使得Activiti的实用性得到提高.activiti和Spring整合需要activiti-spring的jar在类路 ...
- Activiti工作流学习-----基于5.19.0版本(6)
七. BPMN的简介 读者了解到这里,应付一般的工作流开发已经足够了.此处应该有华丽的分割线,在工作流项目中核心开发人员主要是对工作流业务设计以及实现,而初级开发人员是对业务功能的代码实现.以后将主要 ...
- Activiti工作流学习-----基于5.19.0版本(4)
四.使用工作流开发 org.activiti.engine.ProcessEngine提供的Service作用在工作流引擎上面,如果所示是模仿一个公司简单的审批流程,你可以下载这个Demo:Activ ...
- Activiti工作流学习-----基于5.19.0版本(7)
八.BPMN 2.0流程图详解 BPMN 2.0的标准的出现是好事,用户不在被某个工作流开发商绑架或者在工作流中开发妥协,Activiti作为BPMN标准的一套解决方案,使得用户在选择工作流框架时可以 ...
- Activiti工作流学习-----基于5.19.0版本(3)
前面关于eventType的属性值的配置简单的说了一下,activiti支持的值如下表所示:这是我摘抄的activiti官网的 Event 的名字 描述 Event的类名 ENGINE_CREATED ...
- Activiti工作流学习之流程图应用详解
Activiti工作流学习之流程图应用详解 1.目的 了解Activiti工作流是怎样应用流程图的. 2.环境准备2.1.相关软件及版本 jdk版本:Jdk1.7及以上 IDE:eclipse ...
- Activiti工作流学习之概述(一)
一.工作流介绍 我第一次听到这个词,是蒙逼的,再看百度百度,更傻眼了,完全说的不像人话啊,举几个生活中的例子,就明白多了比如:请假.报销等等,如果文字太过抽象,请看图: 二.工作流引擎 Process ...
随机推荐
- [翻译]只为图片使用IMG标签(Use IMG tags only for Images)
原文地址:Use IMG tags only for Images 首先,补充一些背景知识. web开发人员经常通过在主页预加载(预缓存)将来的页面所用到的一些资源的方式来优化网站的性能.常用的手段是 ...
- Delphi 在使用exports中的方法 带参数的用法
最近项目中,需要在一个bpl中调用另一个bpl中的单元的方法, 方法如下: 在被调用的单元中定义: procedure Inner_Ex(VoucherType: TVoucherType); exp ...
- Acdream1157---Segments (CDQ分治)
陈丹琦分治~~~其实一些数据小的时候可以用二维或者多维树状数组做的,而数据大的时候就无力的题目,都可以用陈丹琦分治解决. 题目:由3钟类型操作:1)D L R(1 <= L <= R &l ...
- sicily 4379 bicoloring
题意:输入一个简单(无多重边和自环)的连通无向图,判断该图是否能用黑白两种颜色对顶点染色,使得每条边的两个端点为不同颜色. 解法:由于无自连通节点存在,所以只需进行一次宽搜,遍历所有的点和所有的边,判 ...
- Power(int base, int exponent) 函数实现
这个是个高效的算法,时间复杂度为 O(logn) 原理: a的n次方: #include<iostream> #include<cmath> using namespace s ...
- Jquery css函数用法(判断标签是否拥有某属性)
判断一个层是否隐藏:$("#id").css("display")=="none" ;在所有匹配的元素中,设置一个样式属性的值:$(&qu ...
- 【微信公众号】验证用户OpenID是否关注某个公众号
1.获取OpenID #region 获取微信支付的OpenId /// <summary> /// 获取微信支付的OpenId /// </summary> /// < ...
- SSO跨域解决方案
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可 以将 ...
- Java 将自己定义的对象作为HashMap的key
须要继承Map的equals函数和hashCode函数 package com.category; import java.util.HashMap; public class GenCategory ...
- ExtJS4.2学习(11)——高级组件之Grid
大纲: 1.首先,搭建起来一个最基础的Grid组件: 2.其次,利用前边MVC架构将代码重构: 3.再者,介绍下Grid的一些特性. 一.搭建基础的Grid组件 在文章的开始,我们首先简单的搭建一个G ...