Activiti5.10简易教程一

一搭建环境

1.1   JDK 6+

activiti 运行在版本 6 以上的 JDK 上。转到 Oracle Java SE 下载页面,点击按钮“下载 JDK ”。网页中也有安装说明。要核实安装是否成功,在命令行上运行 java – version 。将打印出安装的 JDK 的版本。

1.2   Ant 1.8.1+

从 Ant[http://ant.apache.org/bindownload.cgi] 下载页面下载最新稳定版的 Ant 。解压文件,确保其 bin 文件夹在操作系统的 path 下。在命令行上运行 ant – version

来检查 Ant 是否安装成功。成功将打印安装的 Ant 版本。

1.3   Eclipse 3.7+

从 Eclipse 的下载页面下载 Eclipse Classic( 或 Eclipse JEE) 版的 eclipse 。解压下载的文件,然后就可以运行 eclipse 路径下的 eclipse 文件了。

下载地址: http://www.eclipse.org/downloads/packages/release/indigo/sr2

1.4   Activiti -eclipse designer 插件安装

在安装 Activiti -eclipse designer 插件前先安装 maven 插件, m2e(eclipse) 插件在 Install New SoftWare 安装时会出现些问题,按以下步骤安装即可。

1.4.1 先安装 GEF 插件

maven 插件安装的时候会依赖这个插件,在 Eclipse -> help -> Install New SoftWare 中安装, update site: http://download.eclipse.org/tools/gef/updates/interim/

1.4.2 安装 SVN 插件

在 Eclipse -> help -> Install New SoftWare 中安装, update site: http://subclipse.tigris.org/update_1.6.x

1.4.3 安装 Maven 插件

方式一 :在线安装

在 Eclipse -> help -> Install New SoftWare 中安装, update site: http://nexus.tesla.io:8081/nexus/content/sites/m2e.extras/m2e/1.5.0/N/LATEST/

顺便 eclipse m2e 支持 site : http://www.eclipse.org/m2e/download/

如在线安装不成功,报 [the selected did not contain any resources that can run on server maven project] 错误,建议采用方式二安装。

方式二 :本地安装

下载 maven 和 eclipse-maven3-plugin 插件( eclipse-maven3-plugin 为本人 CSDN 上传)

Maven site: http://ant.apache.org/bindownload.cgi

eclipse-maven3-plugin site: http://download.csdn.net/detail/yangyi22/5663245

在 eclipse 目录下建立 myplugins 目录,将 eclipse-maven3-plugin 解压后文件复制进去,建立 links 目录,新建 maven.link 文件(名字随意取)添加文本:

path=…/eclipse/myplugins/maven ,即让 eclipse 启动时去寻找 myplugins 中的插件,如本人安装的路径: path=D:/Java~coding~site /eclipse[indigo-jee]/eclipse/myplugins/maven

1.4.4 最后安装 Activiti -eclipse designer

打开 Help à Install New Software 。在如下面板中,点击 Add 按钮,然后填入下列字段:l Name : Activiti BPMN 2.0 designer

l Location : http://activiti.org/designer/update/

安装成功后,新建 activiti 项目,视图如下:

安装 m2eclipse 插件后,重启 Eclipse ,如提示 :

Eclipse is running in a JRE, but a JDK is required

Some Maven plugins may not work when importing projects or updating source folders.

需要修改 eclipse.ini 文件,新增一项配置

-vm 配置项必须在– vmargs 配置项前,是因为执行到 -vmargs 配置项已经选择了一个默认的 JVM 了。

所以在– vmargs 前面加上这一句 :

-vm

C:/Program Files/Java/jdk1.6.0_20/bin/javaw.exe

二开始 activiti 5.10 的第一个 demo

2.1   建立 activiti-demo 工程,选择 Activiti Project

创建成功后的项目:

给 activiti-demo 项目添加 activiti 依赖包,项目右键 Build Path->Configure Build Path->libraries -> Add External Jars 选中 …\activiti-5.10\setup\files\dependencies\libs 下所有包添加即可。

2.2 将 activiti-demo 工程的数据库整合为 MySQL

将 …\activiti-5.10\setup\build\activiti-cfg 目录下的 activiti.cfg.xml 配置文件复制到项目 src\main\resources 目录下,修改数据库配置如下:

<!-- Database configurations -->

< property name = "jdbcUrl"

value = "jdbc:mysql://localhost:3306/test?autoReconnect=true" />

< property name = "jdbcDriver"

value = "com.mysql.jdbc.Driver" />

< property name = "jdbcUsername" value = "root" />

< property name = "jdbcPassword" value = "root" />

<!-- Database configurations -->

< property name = "databaseSchemaUpdate" value = "true" />

<!-- job executor configurations -->

< property name = "jobExecutorActivate" value = "false" />

2.3 设计 activiti-demo 工程的流程

在该项目的 src/main/resource/diagrams 下右键创建 Activiti diagram ,文件名为: DemoProcess.bpmn 。

-->

此时进入 Activiti Diagram Editor ,在空白处点一下,下边属性栏中设置 id 和 name , id 就是这个流程的 key ,后边启动流程的时候使用到。

注意: Activiti 5.8 升级到 5.9 以后, xxx.bpmn20.xml 和 xxx.png 已不默认生成,仅仅是生成 xxx.bpmn 文件, xxx.bpmn 中的定义内容就如 xxx.bpmn20.xml 一样。

另外,快捷菜单:“ Create deployment artifacts ”和“ Import BPMN20 file ”,在 5.9 以后去掉了。

如需设计完成流程后自动生成一个 png 图片按如下处理

l   保存无法生存 png 图片按以下处理

Window –> Preferences -> Activiti ->Save 勾选即可

或者手动操作 : 用 Activiti Designer 打开 xxx.bpmn 文件,然后右键 选择 Export Diagram... ,在弹出的对话框中设置图片的参数即可,一般使用默认就可以了。

在设计编辑器中保存 DemoProcess.bpmn 后的项目视图如下:

测试类代码   DemoProcessTest.java

package main.java;

import java.io.FileInputStream;
import java.util.List;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;

/**
 * Activiti 5.10 demo
 * @author BruceQin
 *
 */
public class DemoProcessTest {
  // diagrams实际路径
  private static String realPath =
      "D:\\Java~coding~site\\J2EE-IDE\\Workspace\\workspace[indigo-jee]" +
      "\\activiti-demo\\src\\main\\resources\\diagrams";
  public static void main(String[] args) throws Exception {
    // 创建 Activiti流程引擎
    ProcessEngine processEngine = ProcessEngineConfiguration
        .createProcessEngineConfigurationFromResource("activiti.cfg.xml")
        .buildProcessEngine();
   
    // 取得 Activiti 服务
    RepositoryService repositoryService = processEngine.getRepositoryService();
    RuntimeService runtimeService = processEngine.getRuntimeService();

// 部署流程定义
    repositoryService
        .createDeployment()
        .addInputStream("DemoProcess.bpmn",new FileInputStream(realPath + "\\DemoProcess.bpmn"))
        .addInputStream("DemoProcess.png", new FileInputStream(realPath + "\\DemoProcess.bpmn"))
        .deploy();
   
    // 启动流程实例
    ProcessInstance instance = processEngine
         .getRuntimeService().startProcessInstanceByKey("DemoProcess");
    String procId = instance.getId();
    System.out.println("procId:"+ procId);
   
    // 获得第一个任务
    TaskService taskService = processEngine.getTaskService();
    List<Task> tasks = taskService.createTaskQuery().taskDefinitionKey("firstTask").list();
    for (Task task : tasks) {
      System.out.println("Following task is: taskID -" +task.getId()+" taskName -"+ task.getName());
      // 认领任务
      taskService.claim(task.getId(), "testUser");
    }
    
    // 查看testUser 现在是否能够获取到该任务
    tasks = taskService.createTaskQuery().taskAssignee("testUser").list();
    for (Task task : tasks) {
      System.out.println("Task for testUser: " + task.getName());
      // 完成任务
      taskService.complete(task.getId());
    }
    System.out.println("Number of tasks for testUser: "
        + taskService.createTaskQuery().taskAssignee("testUser").count());

// 获取并认领第二个任务
    tasks = taskService.createTaskQuery().taskDefinitionKey("secondTask").list();
    for (Task task : tasks) {
      System.out.println("Following task is : taskID -" +task.getId()+" taskName -"+ task.getName());
      taskService.claim(task.getId(), "testUser");
    }
   
    //完成第二个任务结束结束流程
    for (Task task : tasks) {
      taskService.complete(task.getId());
    }
   
    // 核实流程是否结束
    HistoryService historyService = processEngine.getHistoryService();
    HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult();
    System.out.println("Process instance end time: " + historicProcessInstance.getEndTime());
  }
}

Activiti5.10简易教程一的更多相关文章

  1. redis学习教程一《Redis的安装和配置》

    redis学习教程一<Redis的安装和配置> Redis的优点 以下是Redis的一些优点. 异常快 - Redis非常快,每秒可执行大约110000次的设置(SET)操作,每秒大约可执 ...

  2. Cobalt Strike使用教程一

    Cobalt Strike使用教程一     0x00 简介 Cobalt Strike是一款基于java的渗透测试神器,常被业界人称为CS神器.自3.0以后已经不在使用Metasploit框架而作为 ...

  3. CRL快速开发框架系列教程一(Code First数据表不需再关心)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. NGUI系列教程一

    NGUI是Unity的一个插件,使用它来制作你的游戏UI必定将事半功倍.为什么这么说呢?首先我们说说GUI与NGUI的区别,GUI是Unity自带的绘制界面工具,它的成像原理是基于表层的,所以执行效率 ...

  5. 10分钟 教你学会Linux/Unix下的vi文本编辑器

    10分钟 教你学会Linux/Unix下的vi文本编辑器 vi编辑器是Unix/Linux系统管理员必须学会使用的编辑器.看了不少关于vi的资料,终于得到这个总结.不敢独享,和你们共享. 首先,记住v ...

  6. 【python】10分钟教你用python打造贪吃蛇超详细教程

    10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来.希望大家喜欢. 先看程序效果: 0 ...

  7. 10分钟教你用Python打造天气机器人+关键字自动回复+定时发送

    01 前言 Hello,各位小伙伴.自上次我们介绍了Python实现天气预报的功能以后,那个小程序还有诸多不完善的地方,今天,我们再次来完善一下我们的小程序.比如我们想给机器人发“天气”等关键字,它就 ...

  8. 10分钟教你用Python打造微信天气预报机器人

    01 前言 最近武汉的天气越来越恶劣了.动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了.好了,自己动手,丰衣足食,我们来用Python打造一个天气预报的微信机器人吧 ...

  9. Quartz教程一:使用quartz

    原文链接 | 译文链接 | 翻译:nkcoder | 校对:方腾飞 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处 ...

随机推荐

  1. WPF CheckBox样式 ScrollViewer样式 WrapPanel、StackPanel、Grid布局

    本节讲述布局,顺带加点样式给大家看看~单纯学布局,肯定是枯燥的~哈哈 那如上界面,该如何设计呢? 1.一些布局元素经常用到.Grid StackPanel Canvas WrapPanel等.如上这种 ...

  2. Crimm Imageshop 2.3。

    下载地址:http://files.cnblogs.com/Imageshop/ImageShop.rar 一款体积小,能绿色执行,又功能丰富的图像处理软件. Imageshop2.3为单EXE文件, ...

  3. 《WePayUI组件设计的秘密》——2016年第一届前端体验大会分享

    本文是博主参加第一届前端体验大会 | 物勒工名做的分享<WePayUI组件设计的秘密>,内容主要分为2个部分: 一.浅析UI库/框架的未来 讨论的UI库或者框架,主要包含展示和交互的css ...

  4. 产生冠军 hdoj_2094 巧用set

    产生冠军 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. 谈c++ pb_ds库(二) 红黑树大法好

    厉害了,没想到翻翻pb_ds库看到这么多好东西,封装好的.现成的splay.红黑树.avl... 即使不能在考场上使用也可以用来对拍哦 声明/头文件 #include <ext/pb_ds/tr ...

  6. TypeScript 素描 - 类

    本文虽然是学自官方教程而来,但是也融入了自己的理解,而且对官方的例子做了一些修改 /* 类 面向对象编程的一大核心 使用C#.Java进行编程的朋友肯定已经是不能够再熟悉了 TypeScript的类与 ...

  7. CSS3常用属性(边框、背景、文本效果、2D转换、3D转换、过渡、有过渡效果大图轮播、动画)

    CSS3边框: 1.CSS3圆角:border-radius  属性--创建边框线的圆角 <body style="font-size:24px; color:#60F;"& ...

  8. vsftp简单学习思考

    FTP的全称是File Transfer Protocol(文件传输协议),就是专门用来传输文件的协议.它工作在OSI模型的第七层,即是应用层,使用TCP传输而不是UDP这样FTP客户端和服务器建立连 ...

  9. .net的一致性哈希实现

    最近在项目的微服务架构推进过程中,一个新的服务需要动态伸缩的弹性部署,所有容器化示例组成一个大的工作集群,以分布式处理的方式来完成一项工作,在集群中所有节点的任务分配过程中,由于集群工作节点需要动态增 ...

  10. Genymotion安装问题

    今天安装虚拟机各种报错,网上收了各种资料,然而并不能解决问题.啥也没干整整一天总算找到解决方案解决.     解决方法︰ 删除所有以前的虚拟框适配器 转到设备管理器中,单击"操作" ...