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();

比如零配置使用其中第二种方法:

1 ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration()
2   .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)
3   .setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")
4   .setAsyncExecutorEnabled(true)
5   .setAsyncExecutorActivate(false)
6   .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:

  1. false(默认值)---在流程引擎被创建的时候,检查匹配数据库中工作流版本和工作流jar包的工作流版本,不匹配将会抛出异常。
  2. true---在创建工作流引擎时候检测匹配数据库中工作流版本和工作流jar包的工作流版本,没有就添加,有就修改。
  3. 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_*: 通用的数据表,被用来存放各种数据。

 

 

  

时间: 2024-12-26 08:49:05

Activiti工作流学习-----基于5.19.0版本(1)的相关文章

Activiti工作流学习-----基于5.19.0版本(5)

五.与Spring集成 实际项目中一般都有Spring的身影,与Spring集成使得Activiti的实用性得到提高.activiti和Spring整合需要activiti-spring的jar在类路径下面,整合类是:org.activiti.spring.ProcessEngineFactoryBean,它将加载配置对象和产生流程引擎对象.例如下面代码: <bean id="processEngineConfiguration" class="org.activiti

Activiti工作流学习-----基于5.19.0版本(8)

8.1.5 Start Event 继续上一篇的事件的分享笔记,Start Event指明该处是流程开始,至于开始事件的类型(消息到达开始,指定的事件循环开始等),定义如何开始是在开始事件圆圈图标里面的小图标表示,具体反映到xml中就是子元素的不同. Start Event总是进行捕获:在任何时候等待相应的触发器触发. 下面展示start event的xml,其中initiator指的是流程发起人,流程开始后他将会被保存起来: <startEvent id="request" a

Activiti工作流学习-----基于5.19.0版本(6)

七. BPMN的简介 读者了解到这里,应付一般的工作流开发已经足够了.此处应该有华丽的分割线,在工作流项目中核心开发人员主要是对工作流业务设计以及实现,而初级开发人员是对业务功能的代码实现.以后将主要对流程图设计的概念和具体设计进行描述,如果你感兴趣可以继续了解. 7.1 什么是BPMN? BPMN的全称是Business Process Model and Notation,它是一套BPM的规范,从2004年起,BPMN规范的推动有OMG组织维护,开始推出的BPMN1.0主要是对设计图中图形的

Activiti工作流学习-----基于5.19.0版本(2)

二.activiti.cfg.xml的其他bean节点配置 2.1 新特性:Job Executor和Async Executor 从5.17.0版本的activiti开始提供作业执行者(Job Executor)和异步作业执行者(Async Executor),Async Executor执行表现更好,并且执行异步作业对数据库更加友善.activiti官方推荐使用Async Executor,并且一些老的Job Executor依旧有效.在Java EE 7运行环境中,JSR-236规范支持容

Activiti工作流学习-----基于5.19.0版本(3)

前面关于eventType的属性值的配置简单的说了一下,activiti支持的值如下表所示:这是我摘抄的activiti官网的 Event 的名字 描述 Event的类名 ENGINE_CREATED The process-engine this listener is attached to, has been created and is ready for API-calls. org.activiti…?ActivitiEvent ENGINE_CLOSED The process-e

Activiti工作流学习(三)Activiti工作流与spring集成

一.前言 前面Activiti工作流的学习,说明了Activiti的基本应用,在我们开发中可以根据实际的业务参考Activiti的API去更好的理解以及巩固.我们实际的开发中我们基本上都使用spring框架进行开发,现在来说明一下Activiti工作流与spring集成,Activiti工作流与spring集成还算比较简单,可以参考Activiti的API来进行整合. 二.Activiti常用的表 ---------------------------------------------部署对象

Activiti工作流学习(二)流程实例、执行对象、任务

一.前言 前面说明了基本的流程部署.定义,启动流程实例等基本操作,下面我们继续来学习流程实例.执行对象.任务. 二.流程实例.执行对象说明 整个Activiti的生命周期经过了如下的几个步骤: 1.流程部署 --->  2.启动流程实例 --- > 3.执行流程对象(一个流程实例包含多执行对象) ---> 4.完成整个流程 说明: 三.例子演示   1.完成我的任务     2.查询流程状态(判断流程正在执行,还是结束) 3.查询历史任务  4.流程实例.执行对象.任务  四.对应数据库

Activiti工作流学习一安装和下载

1.下载和安装 1) 下载activiti相关jar包和文件 官方下载地址:http://www.activiti.org/download.html 2) Activiti-eclipse插件下载 1,手动下载==>官方下载地址:http://activiti.org/designer/update 2,自动下载==>运行eclipse,安装Activiti BPMN 2.0 designer插件,具体参见:http://www.ecmkit.com/zh-hans/2012/03/21/a

activiti工作流学习链接

首页: http://www.activiti.org/书籍: activiti in action  入门demo: kft-activiti-demo   http://www.oschina.net/p/kft-activiti-demo/论坛:http://www.activiti-cn.org/