开始事件
- 无指定开始事件 -- 无任何事件定义,如start事件
- 定时器开始事件 --
有如下三种类型
cron表达式,spring的定时器也是用cron表达式
- 消息开始事件
- 错误开始事件
一、测试 定时器开始事件
步骤 新建一个 start_event_timer.bpmn
1.2 修改start_event_timer.bpmn设置定时类型和值
1.3 修改 activiti.cfg.xml 修改异步执行的属性asyncExecutorActivate,设为true
1.4 测试代码
//测试 定时器开始事件 -- timer.bpmn <timeCycle>*/10 * * * * ?</timeCycle> <!-- 每10秒执行一次 -->
public static void timerEventTest(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
Deployment dep = rs.createDeployment().addClasspathResource("start_event_timer.bpmn").deploy();
/*ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
System.out.println(pi.getId()); */
Date t = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("最开始时间为 "+df.format(t));
int count = 1;
while(true){
long temp = runService.createProcessInstanceQuery().count();
int tempcount= new Long(temp).intValue();
if(count!=tempcount){
count=tempcount;
System.out.println("现在定时器共开启了 "+count+ "条流程实例,即现在有多少条流程 带定时器节点");
Date t1 = new Date();
SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(df1.format(t1));
System.out.println("当前时间为 "+df1.format(t));
if(count==10){
break;
}
}
}
/*
输出数据
最开始时间为 2019-04-19 18:10:31
现在定时器共开启了 0条流程实例,即现在有多少条流程 带定时器节点
2019-04-19 18:10:31
当前时间为 2019-04-19 18:10:31
现在定时器共开启了 1条流程实例,即现在有多少条流程 带定时器节点
2019-04-19 18:10:40
当前时间为 2019-04-19 18:10:31
现在定时器共开启了 2条流程实例,即现在有多少条流程 带定时器节点
2019-04-19 18:10:50
当前时间为 2019-04-19 18:10:31
现在定时器共开启了 3条流程实例,即现在有多少条流程 带定时器节点
...........................
*/
}
二、测试 消息开始事件 ,启动消息开始事件
2.1 新建 start_event_message.bpmn
2.2 修改start_event_message.bpmn 定义消息事件标签并引用
2.3 测试代码
//测试 消息开始事件 ,启动消息开始事件
public static void messageEventTest(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
Deployment dep = rs.createDeployment().addClasspathResource("start_event_message.bpmn").deploy();
/*
* 百度 RuntimeService API
* startProcessInstanceByMessage(String messageName)
*参数是 start_event_message.bpmn 的 <message id="msg" name="msgName"></message> 的name的值
* */
ProcessInstance pi = runService.startProcessInstanceByMessage("msgName");//启动消息流程后,跳到userTask节点,看act_ru_execution表即知
// 同事消息的数据会别保存在 act_ru_event_subscr 中
System.out.println(pi.getId());
}
三、测试 错误开始事件 --错误开始事件的处理子流程需放在EventSubProcess中如,下图
3.1 新建流程图 start_event_error.bpmn-- 一个正常流程及处理正常流程错误信息的错误处理流程,如图
3.2 修改start_event_error.bpmn -- 给Count People和 Event sub Process 这两个Service Task节点加对应的处理类,及定义错误信息,并在子流程节点上进行引用,如下图
3.3 . 测试方法
//测试 错误开始事件
public static void errorEventTest(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
Deployment dep = rs.createDeployment().addClasspathResource("start_event_error.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
/* 启动流程 输出结果
清点人数,人数不对,要抛出错误信息,给错误子流程 --- CountDelegate execute方法
收到正常流程的错误信息通知,人数不对,执行上报任务 --- ReportDelegate execute方法
*/
}
StartEventTest.java
package com.xiangshuai.act.c14;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
/**
* @author lqx
* 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤11- BPMN事件(2)开始事件
* 或 我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤11- BPMN事件(2)开始事件
*/
public class StartEventTest {
public static void main(String[] args) {
// timerEventTest();
//messageEventTest();
errorEventTest();
}
//测试 定时器开始事件 -- timer.bpmn <timeCycle>*/10 * * * * ?</timeCycle> <!-- 每10秒执行一次 -->
public static void timerEventTest(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
Deployment dep = rs.createDeployment().addClasspathResource("start_event_timer.bpmn").deploy();
/*ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
System.out.println(pi.getId()); */
Date t = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("最开始时间为 "+df.format(t));
int count = 1;
while(true){
long temp = runService.createProcessInstanceQuery().count();
int tempcount= new Long(temp).intValue();
if(count!=tempcount){
count=tempcount;
System.out.println("现在定时器共开启了 "+count+ "条流程实例,即现在有多少条流程 带定时器节点");
Date t1 = new Date();
SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(df1.format(t1));
System.out.println("当前时间为 "+df1.format(t));
if(count==10){
break;
}
}
}
/*
输出数据
最开始时间为 2019-04-19 18:10:31
现在定时器共开启了 0条流程实例,即现在有多少条流程 带定时器节点
2019-04-19 18:10:31
当前时间为 2019-04-19 18:10:31
现在定时器共开启了 1条流程实例,即现在有多少条流程 带定时器节点
2019-04-19 18:10:40
当前时间为 2019-04-19 18:10:31
现在定时器共开启了 2条流程实例,即现在有多少条流程 带定时器节点
2019-04-19 18:10:50
当前时间为 2019-04-19 18:10:31
现在定时器共开启了 3条流程实例,即现在有多少条流程 带定时器节点
...........................
*/
}
//测试 消息开始事件 ,启动消息开始事件
public static void messageEventTest(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
Deployment dep = rs.createDeployment().addClasspathResource("start_event_message.bpmn").deploy();
/*
* 百度 RuntimeService API
* startProcessInstanceByMessage(String messageName)
*参数是 start_event_message.bpmn 的 <message id="msg" name="msgName"></message> 的name的值
* */
ProcessInstance pi = runService.startProcessInstanceByMessage("msgName");//启动消息流程后,跳到userTask节点,看act_ru_execution表即知
// 同事消息的数据会别保存在 act_ru_event_subscr 中
System.out.println(pi.getId());
}
//测试 错误开始事件
public static void errorEventTest(){
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
// 存储服务
RepositoryService rs = engine.getRepositoryService();
// 运行时服务
RuntimeService runService = engine.getRuntimeService();
Deployment dep = rs.createDeployment().addClasspathResource("start_event_error.bpmn").deploy();
ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();
ProcessInstance pi = runService.startProcessInstanceById(pd.getId());
/* 启动流程 输出结果
清点人数,人数不对,要抛出错误信息,给错误子流程 --- CountDelegate execute方法
收到正常流程的错误信息通知,人数不对,执行上报任务 --- ReportDelegate execute方法
*/
}
}