activiti helloworld

activiti的入门实践文章,重点在于动手做,要解决的是怎么做的问题。只有知道了怎么做后,才具有实际动手能力,才算对这门技术有一个初步掌握;至于更深入细化的知道它的设计理念、实现细节等,那是有时间深入时候再进行的工作了。

任务目标:

  • 会用eclipse的activiti designer设计流程图;
  • 会用java代码将设计好的流程图部署到数据库并进行简单测试;
  • 将activiti与spring进行整合;
  • 前端页面可实现任务待办、签收、办理、流程跟踪等事项;

环境核心部件版本:

  • 数据库:oracle11g;
  • activiti:5.14
  • spring:3.2.3.RELEASE

相关资源

各步骤罗列

  1. 安装eclipse的activiti designer插件;
  2. 执行初始化数据库脚本;
  3. 搭建maven工程,添加activiti依赖;
  4. 配置activiti.cfg.xml文件;
  5. 使用activiti designer设计器定义一个简单流程;
  6. 代码部署流程、启动流程、签收任务、办理任务;
  7. 将activiti与spring进行整合,并使用springmvc来做Action层框架;
  8. 开发流程部署功能;
  9. 开发简单任务待办功能;
  10. 开发简单任务办理功能;
  11. 开发页面activiti流程跟踪图形展现功能;
  12. 集成网页流程设计器;

备注:

  • 步骤1-6,在后台java工程就可完成,主要是后台功能的实现;
  • 步骤7-11,是前端流程常用功能;
  • 步骤12,属于高级功能,实际生产中流程图通常不太会变动,即使变动那也是专业维护人员来做;

1.安装eclipse的activiti desginer插件

Eclipse菜单栏 Help ---> Install new Software...--->add…

Location输入http://www.activiti.org/designer/update/

勾选插件的最后一项

安装完Eclipse的流程设计器插件后,需要进行简单的设置,主要是为了在保存流程设计图的时候让插件自动帮助我们生产流程定义对应的图片文件,该文件对于后续的流程跟踪有用。

Eclipse菜单栏:window--->apreferences--->activiti--->Editor 按如下图勾选即可。

2.执行初始化数据库脚本

在源码或者war包中都有相应的建库脚本:

  • war包中,有个database目录,里面包含相关脚本;
  • 源码activiti-engine中,在resources/org/activity/db/中,也包含了同样的脚本;

找到对应数据库的脚本,初始化;

在我的测试项目中,用到的数据库是oracle,通过以下命令完成用户创建与授权:

create user activiti identified by activiti ;
grant resources to activiti ;
grant connect to activiti ;

3.搭建maven工程,添加activiti依赖

<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.x</version>
</dependency>

上述步骤完成activiti依赖的添加;

4.配置activiti.cfg.xml文件

在resources目录下,添加activiti.cfg.xml文件:

<?xml version="1.0" encoding="UTF-8"?>

<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:oracle:thin:@192.168.100.21:1521/ora11g" />
<property name="jdbcDriver" value="oracle.jdbc.driver.OracleDriver" />
<property name="jdbcUsername" value="activiti" />
<property name="jdbcPassword" value="activiti" /> <!-- Database configurations -->
<property name="databaseSchemaUpdate" value="false" /> <!-- job executor configurations -->
<property name="jobExecutorActivate" value="false" /> <!-- mail server configurations -->
<property name="mailServerPort" value="5025" />
<property name="history" value="full" />
</bean> </beans>

5.使用activiti designer设计器定义一个简单流程

设计一个简单的请假审批流程:

备注:

此处学习时最好采用英文来描述任务名称,避免入库时候的乱码问题;

6.代码部署流程、启动流程、签收任务、办理任务

/**
* ClassName:HelloWorldTest <br/>
* Function: 单元测试工作流 <br/>
* Date: 2014年3月1日 下午5:11:50 <br/>
* @author lt
* @version
* @since JDK 1.6
* @see
*/
public class HelloWorldTest { @Test
public void test(){
//1.加载Activiti.cfg.xml配置文件对应的配置对象
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault(); //2.通过processEngineConfiguratoin对象获取ProcessEngine实例
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
Assert.assertNotNull(processEngine); //3.通过processEngine对象获取activiti的service
RepositoryService repositoryService = processEngine.getRepositoryService(); //4.通过RepositoryService发布流程到数据库
repositoryService.createDeployment().addClasspathResource("process/helloworld/helloworld.bpmn20.xml").deploy(); //5.通过processEngine对象获取activiti的RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService(); //6.通过RuntimeService开启流程
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess"); //7.流程往下走 通过TaskService获取流程任务
TaskService taskService = processEngine.getTaskService(); //8.查询当前任务
Task task = taskService.createTaskQuery().singleResult();
Assert.assertEquals("helloworld Task", task.getName()); //完成任务 流程往下走
taskService.complete(task.getId()); task = taskService.createTaskQuery().singleResult();
Assert.assertEquals("world Task", task.getName()); }
}

备注:

由于任务签收需要设置签收人、角色等等,此处省略了该步骤;

7.将activiti与spring进行整合

  • 添加maven依赖:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.14</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.14</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>oracle.jdbc.driver.OracleDriver</groupId>
<artifactId>OracleDriver</artifactId>
<version>10.2.0</version>
</dependency>
 
  • 添加bean声明:
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.100.21:1521/ora11g" />
<property name="username" value="activiti" />
<property name="password" value="activiti" />
</bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
</bean> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
  • 使用spring-test来测试是否能够顺利获取到实例
package com.xiaofan.hello.activiti;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.task.Task;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /**
* Unit test for simple App.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/spring-config.xml")
public class AppTest{ @Autowired
ProcessEngine processEngine ; @Test
public void testApp()
{
Assert.assertNotNull(processEngine);
} @Test
public void testDb(){
long count = processEngine.getRepositoryService().createDeploymentQuery().count();
Assert.assertTrue(count > 0);
}
}

关于springmvc,参见整理的springmvc helloworld

activiti helloworld的更多相关文章

  1. activiti helloworld 续

    todo... 8.开发流程部署功能 9.开发简单任务待办功能 10.开发简单任务办理功能 11.开发页面activiti流程跟踪图形展现功能 12.集成网页流程设计器

  2. 一、activiti工作流(workflow)入门介绍

    activiti官方网站(官网通常很卡,不建议看,直接看我教程就行) http://www.activiti.org/ eclipse离线安装activiti插件并下载教程 https://downl ...

  3. 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例

    学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...

  4. 工作流学习之入门demo

    /** * Copyright (C), 2015-2018, XXX有限公司 * FileName: DemoMain * Author: happy * Date: 2018/6/23 16:33 ...

  5. Activiti学习之HelloWorld程序

    流程图 部署流程定义 /** * 部署流程定义 */ @Test public void deploymentProcessDefinition() { ProcessEngine processEn ...

  6. Activiti Workflow HelloWorld 示例与测试环境搭建

    作者:Rock 出处:http://www.ecmkit.com/zh-hans/2012/03/21/activiti-workflow-hell Activiti Workflow HelloWo ...

  7. Activiti工作流(4):编写一个HelloWorld

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1.使用eclipse的activiti插件画流程图 在resource文件夹下新建一个工作流diagram 右键——new——other...— ...

  8. Activiti的helloworld

    所有语言的第一个程序都叫helloworld,姑且也称这第一个activiti程序为helloworld. 一个工作流想要实现,必定有一个对应的部署文件,利用流程设计器设计一个简单的流程,请假-> ...

  9. 四、activiti工作流-第一个HelloWorld

    上一节已经把流程图画好,并且数据库也已经创建好了25张表,这节讲如何启动一个流程 先新建一个包,并新建一个类. /**然后定义一个成员属性,主要是因为每个方法都要用到这个引擎 * 获取默认流程引擎实例 ...

随机推荐

  1. laravel(一)

    laravel文档:https://d.laravel-china.org/docs/5.5/ 一.composer安装laravel 在文档中找的create-project命令,最后加上项目名称, ...

  2. 改善C++ 程序的150个建议学习之建议7:时刻提防内存溢出

    作为一个程序员,对内存溢出问题肯定不陌生,它已经是软件开发历史上存在了近40年的大难题.在内存空间中,当要表示的数据超出了计算机为该数据分配的空 间范围时,就产生了溢出,而溢出的多余数据则可以作为指令 ...

  3. html5 & upload files

    html5 & upload files https://www.sitepoint.com/html5-ajax-file-upload/ https://www.webcodegeeks. ...

  4. catboost原理以及Python代码

    原论文:    http://learningsys.org/nips17/assets/papers/paper_11.pdf catboost原理: One-hot编码可以在预处理阶段或在训练期间 ...

  5. MT【199】映射的个数

    (2018中科大自招)设$S=\{1,2,3,4,5\}$则满足$f(f(x))=x$的映射:$S \longrightarrow S$的个数____解答:由于$a\ne b$时必须满足$f(a)=b ...

  6. 洛谷P3275 [SCOI2011]糖果(差分约束,最长路,Tarjan,拓扑排序)

    洛谷题目传送门 差分约束模板题,等于双向连0边,小于等于单向连0边,小于单向连1边,我太蒻了,总喜欢正边权跑最长路...... 看遍了讨论版,我是真的不敢再入复杂度有点超级伪的SPFA的坑了 为了保证 ...

  7. MySQL的COUNT()函数理解

    MySQL的COUNT()函数理解 标签(空格分隔): MySQL5.7 COUNT()函数 探讨 写在前面的话 细心的朋友会在平时工作和学习中,可以看到MySQL的COUNT()函数有多种不同的参数 ...

  8. bzoj1485: [HNOI2009]有趣的数列(Catalan数)

    一眼卡特兰数...写完才发现不对劲,样例怎么输出$0$...原来模数不一定是质数= =... 第一次见到模数不是质数的求组合数方法$(n,m\leq 10^7)$,记录一下... 先对于$1$~$n$ ...

  9. asp.net连接数据库超时的解决办法

    错误提示:“超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小.  ” 经过几天辛苦写的代码,终于实现了功能丰富的查询功能,但是使用的过 ...

  10. 图像处理之规则裁剪(Resize)

    1 图像裁剪 在实际工作中,经常需要根据研究工作要求对图像进行裁剪(Subset Image),按照实际图像分幅裁剪的过程,可以将图像分幅裁剪分为两种类型:规则分幅裁剪(Rectangle Subse ...