Activiti 简单demo (2)
1.创建流程模型,工程右键-->new-->other-->activiti diagram
2.图解元素介绍:
Start event:开始事件
End entit:结束事件
User task:用户任务活动
Service task:服务任务活动
Exclusive gateway:独家网关,排它网关通道,只能有一条分支执行,如if else
Parallel gateway:并行网关,并行网关通道,所有分支一块执行
Activiti 用户手册: http://www.mossle.com/docs/activiti/index.html#bpmnConstructs点击打开链接
3.创建流程数据库表
package com.wawj.rpt.web.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
public class ActivitiTest {
//驱动程序名
static String driver = "net.sourceforge.jtds.jdbc.Driver";
//URL指向要访问的数据库名mydata
static String url = "jdbc:jtds:sqlserver://10.10.110.13:1433/tester";
//MySQL配置时的用户名
static String user = "sa";
//MySQL配置时的密码
static String password = "Sa123456";
public static void main(String[] args) {
// ActivitiTest activitiTest = new ActivitiTest();
//获取sql server 的数据库 原生JDBC
//activitiTest.getMsSql();
//流程引擎ProcessEngine对象,所有操作都离不开引擎对象
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
//连接数据库的配置
processEngineConfiguration.setJdbcDriver(driver);
processEngineConfiguration.setJdbcUrl(url);
processEngineConfiguration.setJdbcUsername(user);
processEngineConfiguration.setJdbcPassword(password);
//三个配置
//1.先删除表,再创建表:processEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP="create-drop"
//2.不能自动创建表,需要表存在:processEngineConfiguration.DB_SCHEMA_UPDATE_FALSE="false"
//3.如果表存在,就自动创建表:processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE="true"
processEngineConfiguration.setDatabaseSchema(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//获取工作流的核心对象,ProcessEngine对象
ProcessEngine processEngine=processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine:"+processEngine+"Create Success!!");
}
public void getMsSql(){
//声明Connection对象
Connection con;
//遍历查询结果集
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = DriverManager.getConnection(url,user,password);
if(!con.isClosed())
System.out.println("Succeeded connecting to the Database!");
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = con.createStatement();
//要执行的SQL语句
String sql = "select top 10 * from sys_user";
//3.ResultSet类,用来存放获取的结果集!!
ResultSet rs = statement.executeQuery(sql);
String name = "";
while(rs.next()){
//获取stuname这列数据
name = rs.getString("name");
//首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
//输出结果
System.out.println("name=" + name);
}
rs.close();
con.close();
} catch(Exception e) {
//数据库驱动类异常处理
e.printStackTrace();
}finally{
System.out.println("数据库数据成功获取!!");
}
}
}
4.生成的流程表介绍
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
4.1资源库流程规则表
1)act_re_deployment 部署信息表
2)act_re_model 流程设计模型部署表
3)act_re_procdef 流程定义数据表
4.2运行时数据库表
1)act_ru_execution运行时流程执行实例表
2)act_ru_identitylink运行时流程人员表,主要存储任务节点与参与者的相关信息
3)act_ru_task运行时任务节点表
4)act_ru_variable运行时流程变量数据表
4.3历史数据库表
1)act_hi_actinst 历史节点表
2)act_hi_attachment历史附件表
3)act_hi_comment历史意见表
4)act_hi_identitylink历史流程人员表
5)act_hi_detail历史详情表,提供历史变量的查询
6)act_hi_procinst历史流程实例表
7)act_hi_taskinst历史任务实例表
8)act_hi_varinst历史变量表
4.4组织机构表
1)act_id_group用户组信息表
2)act_id_info用户扩展信息表
3)act_id_membership用户与用户组对应信息表
4)act_id_user用户信息表
这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足
4.5通用数据表
1)act_ge_bytearray二进制数据表
2) act_ge_property属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。
5.部署流程demo
5.1
@Test
public void fy_test() {
try {
//表不存在的话创建表
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
System.out.println("------processEngine:" + processEngine);
//创建流程
Deployment deployment = processEngine.getRepositoryService().createDeployment().name("请假程序")
.addClasspathResource("activiti/MyProcess.bpmn").addClasspathResource("activiti/MyProcess.png").deploy();
System.out.println(deployment.getId());
System.out.println(deployment.getName());
} catch (Exception e) {
e.printStackTrace();
}
运行结果:7501 请假程序
5.2查看数据库部署信息表如图:
5.3启动自己的流程
/** 启动流程实例 **/
@Test
public void startProcessInstance() {
try {
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
// 流程定义的key
String processDefinitionKey = "myProcess";
ProcessInstance pi = processEngine.getRuntimeService()// 与正在执行
// 的流程实例和执行对象相关的Service
.startProcessInstanceByKey(processDefinitionKey); // 使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:" + pi.getId());
System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
} catch (Exception e) {
e.printStackTrace();
}
}
运行结果:
流程实例ID:10001
流程定义ID:myProcess:1:7504
查看运行时流程执行实例表:act_ru_execution
5.4查询当前人的个人任务
运行结果:
5.5完成我的代办任务
运行结果:完成任务:任务ID:10004
Activiti 简单demo (2)相关推荐
- EPSON机器人建立TCP/IP通讯的简单demo
以下为我近期研究EPSON机器人通讯的经验总结,主要实现机械手接收相机发送过来的数据,从而达到对应的位置,及其简单demo. 欢迎加入知识星球[3D视觉工坊],进行交流学习.
- Solr配置与简单Demo[转]
Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...
- VC++ 拖放编程简单Demo
微软的编程类库都带有拖放编程的接口:下面看一个最简单demo:win7, vc6:新建一个对话框工程: 添加一个列表框控件:设置 接受文件 属性: 在 类向导-Class Info 做如下选择: 为W ...
- win32汇编定时器简单Demo
timer.asm: .386.model flat,stdcalloption casemap:noneinclude windows.inc include user32.inc includel ...
- win32汇编创建线程简单Demo
代码如下:thread.asm: .386.model flat,stdcalloption casemap:noneinclude windows.inc include user32.inc in ...
- rabbitMQ消息队列 – 面板介绍及简单demo
首先rabbit安装好之后,运维会给一个控制面板. 默认账号密码为guest 登入以后可以看到具体界面. 在此鸣谢百度翻译给予的大力支持.. ###写一个简单的demo 编写之前..虽然说可以直接用底 ...
- python wpf教程_WPF使用IronPython库的简单Demo
WPF使用IronPython库的简单Demo 一.IronPython和C#交互 IronPython是一个.NET平台上的Python实现,包括了完整的编译器.执行引擎与运行时支持,能够与.NET ...
- Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)
来源:https://www.cnblogs.com/7tiny/p/10493805.html [前言] Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请 ...
- java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)
转载自 java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一) 最近在找java的小项目自己写着玩,但是找不到合适的,于是写开始学一点爬虫,自己也是感觉爬虫比较有趣.这里自己找了一个 ...
最新文章
- 跟我学Spring Cloud(Finchley版)-10-Feign深入
- 关于java使用javacomm20-win32实践总结 (转)
- getElementById取得文本框中的值
- Java web对试卷进行单选多选答题进行打分_java + vue 考试系统,适配各种题型,包含微信小程序端...
- 并发编程:原子性问题,可见性问题,有序性问题。
- Spring : Spring @Transactional-事物回滚
- Web接收实时视频流并显示(flask创建路由接收)| 解决延时不同步问题
- 使用C语言读写xlsx文件
- ISCC2021-WP合集
- 蒋勇 | 白话区块链技术栈与应用
- 配置文件 ini toml yaml 以及 json对比
- Python画地图数据可视化分析
- 戴仁光:神奇的推广力量——软文
- 机器学习-神经网络(Neural Network)算法
- DesignWare 加密文件 综合成GTECH 以便FPGA使用
- DigitalPersona Personal 4 x86 下载
- DirectX 性能优化
- java json去掉反斜杠,如何去掉Json字符串中反斜杠
- Linux上安装git
- spring 注解大全 及用法