Activiti:创建activiti工程

一、Activiti下载:

1,Activiti下载地址:https://github.com/Activiti/Activiti/releases

  2,Activiti官方下载地址:http://activiti.org/download.html

  3,activiti-5.22.0.zip目录结构:

 其中:database是数据库脚本,包含创建、删除、升级脚本;

    docs是文档,包含开发文档、使用文档、以及流程文件;

    libs是jar包;

    wars是官方提供的demo;

二、activiti工程示例

 1,准备工作:

  Eclipse安装activiti插件:http://activiti.org/designer/update/

 2,创建activiti工程:

 (1).新建一个activiti项目(名称:activiti):

 (2).在工程activiti根目录下创建lib文件夹(存放jar):

 (3).将activiti-5.22.0\wars\activiti-rest.war中的lib解压出来,拷贝到工程的lib文件夹:

 (4).将mysql数据库驱动jar,拷贝到工程的lib文件夹(因为官方提供的lib中只有h2数据库驱动,没有mysql驱动);

 3,初始化数据库

  初始化数据库:mysql数据库中创建activitidb库(官方提供的脚本路径:activiti-5.22.0\database\create),使用配置文件来创建工作流的25张表;

  方式一:直接在mysql数据库手动执行sql建表语句;

  方式二:使用代码执行:

    /**
* 使用框架提供的自动建表(不提供配置文件)
*/
@Test
public void test1() {
// 创建一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
// 设置数据源信息
conf.setJdbcDriver("com.mysql.jdbc.Driver");
conf.setJdbcUrl("jdbc:mysql://localhost:3306/activitidbactivitidb?useUnicode=true&characterEncoding=utf8");
conf.setJdbcUsername("username");
conf.setJdbcPassword("password");
// 设置自动建表
conf.setDatabaseSchemaUpdate("true");
// 创建一个流程引擎对象,在创建流程引擎对象过程中会自动建表
ProcessEngine processEngine = conf.buildProcessEngine();
}

  方式三:使用配置文件(要求配置文件名称必须为activiti-context.xml或者activiti.cfg.xml)配置的信息必须为:

  activiti-context.xml代码:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 配置流程引擎配置对象 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activitidb?useUnicode=true&amp;characterEncoding=utf8" />
<property name="jdbcUsername" value="username" />
<property name="jdbcPassword" value="password" />
<!-- 建表策略 -->
<property name="databaseSchemaUpdate" value="true" />
</bean> <!-- 配置一个流程引擎工厂bean,用于创建流程引擎对象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<!-- 通过set方法注入流程引擎配置对象 -->
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
</beans>

   MysqlData.java代码:

/**
* 使用框架提供的自动建表(提供配置文件)---可以从框架提供的例子程序中获取
*/
@Test
public void test2() {
String resource = "activiti-context.xml";// 配置文件名称
String beanName = "processEngineConfiguration";// 配置id值
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(resource,
beanName);
ProcessEngine processEngine = conf.buildProcessEngine();
}

  log4j.properties代码:

log4j.rootLogger=INFO, CA

# ConsoleAppender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n

  相关代码结构,如下图: 

   执行结果为:

  方式四:使用框架提供的自动建表(使用配置文件)

/**
* 使用框架提供的自动建表(使用配置文件)
*/
@Test
public void test3() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
}

  注意:import org.junit.Test;报错处理:Eclipse 在项目属性的Libararies界面 ,点“Add library",选择JUnit导入。

  我用的是第三种方式初始化数据库;

 4,创建流程图

 (1).在目录diagrams下创建Activiti Diagram文件HelloWorld.bpmn:

 (2).打开HelloWorld.bpmn,画流程图:

 点击空白处,可以修改流程文件属性:

 点击具体的流程环境,可以进行任务配置:

 可以用xml格式打开流程文件:

 5,部署流程定义

 在目录com/avtixiti/xyzq目录下新建一个HelloWorld.java文件,代码如下:

import java.io.IOException;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.junit.Test;
import common.MysqlData; /**
* ClassName:HelloWorld
* Function: 流程图实例
* Reason: TODO
* Date: 2018年1月11日 下午2:05:09
* @author lizm
* @since JDK 1.6
*
*/
public class HelloWorld {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/*
*部署流程定义
*/
@Test
public void deploymentProcessDefinition(){
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
.createDeployment()//创建一个部署对象
.name("HelloWorld入门")//添加部署名称
.addClasspathResource("diagrams/HelloWorld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagrams/HelloWorld.png")
.deploy();//完成部署
System.out.println(deployment.getId());
System.out.println(deployment.getName());
} public static void main(String[] args) throws IOException {
HelloWorld client = new HelloWorld();
client.deploymentProcessDefinition();
}
}

 执行,可以看到控制台,输出:

 对应的数据库中的表(act_re_procdef),生成数据:

 6,启动流程实例

 HelloWorld.java文件增加启动流程实例,代码如下:

import java.io.IOException;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test; /**
* ClassName:HelloWorld
* Function: 流程图实例
* Reason: TODO
* Date: 2018年1月11日 下午2:05:09
* @author lizm
* @since JDK 1.6
*
*/
public class HelloWorld { ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/*
*部署流程定义
*/
@Test
public void deploymentProcessDefinition(){
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
.createDeployment()//创建一个部署对象
.name("HelloWorld入门")//添加部署名称
.addClasspathResource("diagrams/HelloWorld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagrams/HelloWorld.png")
.deploy();//完成部署
System.out.println(deployment.getId());
System.out.println(deployment.getName()); } /*
* 启动流程实例
*/
@Test
public void startProcessInstance(){
//流程定义的key
String processDefinitionKey = "HelloWorld";
ProcessInstance processInstance = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
.startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应HelloWorld.bpmn文件中的ID的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:"+processInstance.getId());//流程实例ID
System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId());//流程定义ID
} public static void main(String[] args) throws IOException {
HelloWorld client = new HelloWorld();
client.deploymentProcessDefinition();
client.startProcessInstance();
}
}

 控制台输出:

 数据库中表(act_ru_execution),可以看到数据生成:

 7,查询当前人的个人任务

 在HelloWorld.java中增加查询当前人的个人任务,代码如下:

  /*
* 查询当前人的个人任务
*/
@Test
public void findPersonalTask(){
String assignee = "小张";
List<Task> list = processEngine.getTaskService()//与正在执行任务相关的Service
.createTaskQuery()//创建任务查询对象
.taskAssignee(assignee)//指定个人任务查询,指定办理人
.list();
if(list!=null && list.size()>0){
for(Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务创建时间:"+task.getCreateTime());
System.out.println("任务办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
}
}
}

 控制台结果:

 数据库中表(act_ru_task),可以查到任务数据:

 8,完成任务

 在HelloWorld.java中增加完成任务,代码如下:

     /*
* 完成我的任务
*/
@Test
public void completePersonalTask(){
//任务Id
String taskId = "12508";
processEngine.getTaskService()//与正在执行任务相关的Service
.complete(taskId);
System.out.println("完成任务:任务Id:"+taskId); }

 执行出现错误提示:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date

 原因分析:“0000-00-00 00:00:00”在mysql中是作为一个特殊值存在的,但 java.sql.Date 将其视为 不合法的值 格式不正确;

 解决方案:url加上   zeroDateTimeBehavior参数(其中&amp;是&的转义);

 datasource.url=jdbc:mysql://localhost:3306/db?useUnicode=true&amp;characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull

注意:如果数据库连接是在xml中配置,需要进行特殊字符转义;

 控制台结果:(后续更新)

 

Activiti:创建activiti工程的更多相关文章

  1. 创建Activiti项目

    1.创建项目 2.导入Activiti的jar包 项目上右击创建lib文件夹 将jar包复制进lib文件夹 3.导入数据库连接jar包 4.使用代码创建Activiti用来存放流程数据的23张表 pa ...

  2. 使用eclipse和maven创建activiti项目基础配置

    项目组最近的项目使用到了activiti工作流,到处查找了一些资料后,初步完成任务.但是我所做的事只是在搭好的环境中调用接口和方法操作,因此自己尝试着也从搭建环境入手,以下是成功实现以后的记录. 实现 ...

  3. Activiti学习——Activiti与Spring集成

    转: Activiti学习——Activiti与Spring集成 与Spring集成 基础准备 目录结构 相关jar包 Activiti的相关jar包 Activiti依赖的相关jar包 Spring ...

  4. Eclipse创建Maven工程报错

    问题 用Eclipse创建maven工程的时候,总是会报错,例如提示: Unable to create project from archetype [org.apache.maven.archet ...

  5. MyEclipse创建Maven工程

    先要在MyEclipse中对Maven进行设置:

  6. Vivado SDK 2014.2 创建新工程后,BSP版本不对的解决办法

    问题描述如下: 1. 使用Vivado SDK 2014.2已经创建了工程,但是此时,hdf文件增加了外设,需要重新创建工程以更新SDK中的外设描述: 2. 使用新的hdf创建工程后,发现system ...

  7. 关于Xcode6创建的工程在Xcode5打开

    Xcode6创建的工程在Xcode5打开- 4.0只显示3.5大小的问题 只需要在工程里添加Default-568h@2x.png,即可以解决

  8. windows下无法创建django工程的问题

    环境:python2.7  django1.7 安装好django后,将C:\Python27\Lib\site-packages\Django-1.7.7-py2.7.egg\django\bin; ...

  9. 在VS2015 RC打开CTP中创建的工程

    VS2015终于出了RC了!小伙伴们快来安装试用吧,地址在这里,还有新的Windows 10开发工具哦,要不然是开发不了Universal Windows App的,安装前记得卸载CTP版本. 新的R ...

随机推荐

  1. jquery表单验证插件 jquery.form.js ------转载

    Form插件,支持Ajax,支持Ajax文件上传,功能强大,基本满足日常应用. 1.JQuery框架软件包下载 文件: jquery.rar 大小: 29KB 下载: 下载 2.Form插件下载 文件 ...

  2. poj_3250 单调栈

    题目大意 N头牛排成一列,每头牛A都能看到它前面比它矮的牛i,若前面有一个比他高的牛X,则X之前的牛j,A都无法看到.给出N头牛的高度,求出这N头牛可以看到牛的数目的总数. 题目分析 画图之后,可以很 ...

  3. 逐一取Map值

    String[] mKeys = starDetil.getRows().keySet().toArray(new String[starDetil.getRows().size()]); starD ...

  4. Python全栈day21(调用模块路径BASEDIR的正确方法)

    正常写python程序会有一个可执行的bin.py文件,假如这个文件需要导入my_module里面定义的模块,应该怎么设置sys.path 文件夹目录结构如下,因为bin不在与my_module同级目 ...

  5. Oracle 数存储——物理结构

    Oracle存储——逻辑结构 Oracle 数据库存储物理结构 物理存储结构是实际的数据存储单元,对应于操作系统文件. oracle数据库就是由驻留在服务器的磁盘上的这些操作系统文件组成的. 物理存储 ...

  6. [iOS微博项目 - 3.5] - 封装业务

    github: https://github.com/hellovoidworld/HVWWeibo   A.封装微博业务 1.需求 把微博相关业务(读取.写微博) 界面控制器不需要知道微博操作细节( ...

  7. Java中“==和equals”的区别

    (1)“==” 是判断地址的: (2)至于equals,String类型重写了 equals()方法,判断内容是否相等,因此 equals 是相等的:

  8. idea破解方法

    1.http://idea.lanyus.com/ 下载破解文件 2.将下载的JetbrainsIdesCrack-3.4-release-enc.jar破解文件放在idea安装目录下的bin中: 3 ...

  9. Spring的IOC底层实现

    IOC的底层实现 续图:

  10. Python的subprocess模块(二)

    原文:http://blog.chinaunix.net/uid-26000296-id-4461522.html 一.subprocess 模块简介 subprocess最早是在2.4版本中引入的. ...