1. 快速入门

1.1. 简介

process

如上图,本实例主要实现一个网站登录的过程,登录对年龄有要求,如果满18岁,允许其登录,否则劝其离开:

  1. 输入姓名和名称
  2. 如果年龄大于等于18岁,则欢迎用户登录此站(什么站就不说了),祝其玩得愉快;
  3. 如果年龄小于18岁,告诉其年龄太小,劝其离开。

1.2. 环境准备

  • Maven
  • Java运行环境

1.3. 快速入门

1.3.1. 创建maven项目

最终项目结构如下:

quick-start
--src
----main
------java
--------samples.activiti
----------WebsiteLogonProcessEngine.java
----------YoungManProcess.java
------resources
--------logon-bpmn20.xml
--------logback.xml
--pom.xml

1.3.2. pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>samples.activiti</groupId>
    <artifactId>quick-start</artifactId>
    <version>1.0-SNAPSHOT</version>

    <packaging>jar</packaging>

    <name>quick-start</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <activiti.version>5.22.0</activiti.version>
        <h2db.version>1.4.193</h2db.version>
        <slf4j.version>1.7.21</slf4j.version>
        <logback.version>1.1.7</logback.version>
    </properties>


   <dependencies>
        <!-- activiti engine -->
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>${activiti.version}</version>
        </dependency>

        <!-- h2database -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2db.version}</version>
        </dependency>

        <!-- <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.41</version>
        </dependency> -->

        <!-- slf4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency> -->

        <!-- logback -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
    </dependencies>
</project>

1.3.3. 创建流程引擎

创建WebsiteLogonProcessEngine.java文件,数据库使用h2database:

package samples.activiti;

import org.activiti.engine.FormService;
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.form.FormData;
import org.activiti.engine.form.FormProperty;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.activiti.engine.impl.form.DateFormType;
import org.activiti.engine.impl.form.LongFormType;
import org.activiti.engine.impl.form.StringFormType;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

/**
 * 流程引擎入门DEMO, 此DEMO实现流程如下:
 * 1. 输入姓名和名称
 * 2. 如果年龄大于等于18岁,则欢迎用户登录此站(什么站就不说了),祝其玩得愉快;
 * 3. 如果年龄小于18岁,告诉其年龄太小,劝其离开。
 *
 * @author zilaiye
 * @date 2017/10/27
 */
public class WebsiteLogonProcessEngine {
    public static final Logger logger = LoggerFactory.getLogger(WebsiteLogonProcessEngine.class);

    public static void main(String[] args) throws ParseException {
        // 1. 配置 Activiti 流程引擎
        ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
            .setJdbcUrl("jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000")
            .setJdbcUsername("sa")
            .setJdbcPassword("")
            .setJdbcDriver("org.h2.Driver")
            .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        // 2. 获取 Activiti 流程引擎对象
        ProcessEngine processEngine = cfg.buildProcessEngine();
        String pName = processEngine.getName();
        String ver = ProcessEngine.VERSION;
        System.out.println("获取流程引擎对象完成: ProcessEngine Name: [ " + pName + " ] Version: [ " + ver + " ]");

        // 3. 加载流程定义
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deployment = repositoryService.createDeployment().addClasspathResource("logon-bpmn20.xml").deploy();
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
        System.out.println("发现流程定义, 名称:[" + processDefinition.getName() + "] Id:[" + processDefinition.getId() + "]");
////
        // 4. 运营流程实例
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 启动一个流程实例
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("yellow-site-logon");
        System.out.println("登录判断流程开始,流程实例ID:[" + processInstance.getProcessDefinitionId() + "] key:[" + processInstance.getProcessDefinitionKey() + "]");

        // 流程中的任务
        TaskService taskService = processEngine.getTaskService();
        FormService formService = processEngine.getFormService();
        HistoryService historyService = processEngine.getHistoryService();

        Scanner scanner = new Scanner(System.in);
        while (processInstance != null && !processInstance.isEnded()) {
            // 获取流程的所有运行任务
            List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("managers").list();
            System.out.println("此流程共有任务数量: [ " + tasks.size() + "]");
            // 循环任务执行之
            for (int i = 0; i < tasks.size(); i++) {
                Task task = tasks.get(i);
                System.out.println("开始执行流程任务: [" + task.getName() + "]");
                Map<String, Object> variables = new HashMap<String, Object>();
                FormData formData = formService.getTaskFormData(task.getId());
                for (FormProperty formProperty : formData.getFormProperties()) {
                    if (StringFormType.class.isInstance(formProperty.getType())) {
                        System.out.println(formProperty.getName() + "?");
                        String value = scanner.nextLine();
                        variables.put(formProperty.getId(), value);
                    } else if (LongFormType.class.isInstance(formProperty.getType())) {
                        System.out.println(formProperty.getName() + "? (Must be a whole number)");
                        Long value = Long.valueOf(scanner.nextLine());
                        variables.put(formProperty.getId(), value);
                    } else if (DateFormType.class.isInstance(formProperty.getType())) {
                        System.out.println(formProperty.getName() + "? (Must be a date m/d/yy)");
                        DateFormat dateFormat = new SimpleDateFormat("m/d/yy");
                        Date value = dateFormat.parse(scanner.nextLine());
                        variables.put(formProperty.getId(), value);
                    } else {
                        System.out.println("<form type not supported>");
                    }
                }
                taskService.complete(task.getId(), variables);

                System.out.println("流程处理完成, 现在开始回放处理过程:");
                HistoricActivityInstance endActivity = null;
                List<HistoricActivityInstance> activities = historyService.createHistoricActivityInstanceQuery()
                    .processInstanceId(processInstance.getId()).finished()
                    .orderByHistoricActivityInstanceEndTime().asc()
                    .list();
                for (HistoricActivityInstance activity : activities) {
                    if (activity.getActivityType() == "startEvent") {
                        System.out.println("流程处理开始, 实例名称:[" + processDefinition.getName() + "] Key:[" + processInstance.getProcessDefinitionKey() + "] 开始处理时间: [" + activity.getStartTime() + "]");
                    }
                    if (activity.getActivityType() == "endEvent") {
                        // Handle edge case where end step happens so fast that the end step
                        // and previous step(s) are sorted the same. So, cache the end step
                        //and display it last to represent the logical sequence.
                        endActivity = activity;
                    } else {
                        System.out.println("-- " + activity.getActivityName()
                            + " [" + activity.getActivityId() + "] "
                            + activity.getDurationInMillis() + " ms");
                    }
                }
                if (endActivity != null) {
                    System.out.println("-- " + endActivity.getActivityName()
                        + " [" + endActivity.getActivityId() + "] "
                        + endActivity.getDurationInMillis() + " ms");
                    System.out.println("流程处理完成 " + processDefinition.getName() + " ["
                        + processInstance.getProcessDefinitionKey() + "] "
                        + endActivity.getEndTime());
                }
            }
            // Re-query the process instance, making sure the latest state is available
            processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).singleResult();
        }
        scanner.close();
    }
}

运行查看日志,可以发现默认使用h2的sql脚本创建了一系列的表结构:

17:13:29.420 [main] DEBUG o.a.e.i.c.ProcessEngineConfigurationImpl - initializing datasource to db: jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000
17:13:29.430 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
17:13:29.446 [main] DEBUG o.a.i.d.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
17:13:29.628 [main] DEBUG o.a.i.d.pooled.PooledDataSource - Created connection 1351478315.
17:13:29.632 [main] DEBUG o.a.e.i.c.ProcessEngineConfigurationImpl - database product name: 'H2'
17:13:29.632 [main] DEBUG o.a.e.i.c.ProcessEngineConfigurationImpl - using database type: h2
17:13:29.633 [main] DEBUG o.a.i.d.pooled.PooledDataSource - Returned connection 1351478315 to pool.
17:13:30.506 [main] DEBUG o.a.e.i.interceptor.LogInterceptor - 

17:13:30.506 [main] DEBUG o.a.e.i.interceptor.LogInterceptor - --- starting SchemaOperationsProcessEngineBuild --------------------------------------------------------
17:13:30.514 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Opening JDBC Connection
17:13:30.515 [main] DEBUG o.a.i.d.pooled.PooledDataSource - Checked out connection 1351478315 from pool.
17:13:30.515 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [conn0: url=jdbc:h2:mem:activiti user=SA]
17:13:30.540 [main] INFO  o.a.engine.impl.db.DbSqlSession - performing create on engine with resource org/activiti/db/create/activiti.h2.create.engine.sql
17:13:30.540 [main] DEBUG o.a.engine.impl.db.DbSqlSession - SQL: create table ACT_GE_PROPERTY ( 
NAME_ varchar(64), 
VALUE_ varchar(300), 
REV_ integer, 
primary key (NAME_) 
)
17:13:30.546 [main] DEBUG o.a.engine.impl.db.DbSqlSession - SQL: insert into ACT_GE_PROPERTY 
values ('schema.version', '5.22.0.0', 1)
17:13:30.547 [main] DEBUG o.a.engine.impl.db.DbSqlSession - SQL: insert into ACT_GE_PROPERTY 
values ('schema.history', 'create(5.22.0.0)', 1)
17:13:30.548 [main] DEBUG o.a.engine.impl.db.DbSqlSession - SQL: insert into ACT_GE_PROPERTY 
values ('next.dbid', '1', 1)

# 中间省略创建表的过程
....

17:13:30.638 [main] INFO  o.a.engine.impl.ProcessEngineImpl - ProcessEngine default created
17:13:30.643 [main] INFO  samples.activiti.OnboardingRequest - ProcessEngine Name: [ default ] Version: [ 5.22.0.0 ]
Disconnected from the target VM, address: '127.0.0.1:53308', transport: 'socket'

Process finished with exit code 0

1.4. 未成年人处理

package samples.activiti;

import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;

import java.util.Date;

/**
 * 未成年处理流程, 如果未成年, 劝其离开
 *
 * @author zilaiye
 * @date 2017/10/27
 */
public class YoungManProcess implements JavaDelegate {
    public void execute(DelegateExecution delegateExecution) throws Exception {
        Date now = new Date();
        delegateExecution.setVariable("autoWelcomeTime", now);
        System.out.println("未成年处理流程: 对不起:["
            + delegateExecution.getVariable("fullName") + "], 你还未成年,再长大点再来吧。");
    }

}

1.5. 流程文件:logon-bpmn20.xml

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
    <process id="yellow-site-logon" name="YellowSiteLogon" isExecutable="true">
        <!-- 开始事件 -->
        <startEvent id="startLogon" name="Start" activiti:initiator="initiator"></startEvent>
        <!-- 输入用户信息任务 -->
        <userTask id="inputUserInfo" name="请输入用户信息:" activiti:assignee="${initiator}" activiti:candidateGroups="managers">
            <extensionElements>
                <activiti:formProperty id="fullName" name="请输入姓名" type="string"></activiti:formProperty>
                <activiti:formProperty id="age" name="请输入年龄" type="long" required="true"></activiti:formProperty>
            </extensionElements>
        </userTask>
        <!-- 连接开始事件和输入信息的流程线 -->
        <sequenceFlow id="sid-1337EA98-7364-4198-B5D9-30F5341D6918" sourceRef="startLogon" targetRef="inputUserInfo"></sequenceFlow>

        <!-- 唯一的判断网关, 默认未满18岁处理 -->
        <exclusiveGateway id="decision" name="判断年龄是否满18岁" default="youngManPath"></exclusiveGateway>
        <!-- 输入用户信息, 判断 -->
        <sequenceFlow id="sid-42BE5661-C3D5-4DE6-96F5-73D34822727A" sourceRef="inputUserInfo" targetRef="decision"></sequenceFlow>

        <!--<scriptTask id="automatedIntro" name="Generic and Automated Data Entry" scriptFormat="javascript" activiti:autoStoreVariables="false">-->
            <!--<script><![CDATA[var dateAsString = new Date().toString();-->
<!--execution.setVariable("autoWelcomeTime", dateAsString);]]></script>-->
        <!--</scriptTask>-->
        <!-- 未成年分支 -->
        <sequenceFlow id="youngManPath" sourceRef="decision" targetRef="youngManIntro"></sequenceFlow>
        <serviceTask id="youngManIntro" name="对不起,你未成年,不能登录此网站" activiti:class="samples.activiti.YoungManProcess"></serviceTask>
        <sequenceFlow id="sid-37A73ACA-2E23-400B-96F3-71F77738DAFA" sourceRef="youngManIntro" targetRef="endLogon"></sequenceFlow>


        <!-- 如果已成年,欢迎之 -->
        <sequenceFlow id="manPath" name="&gt;18" sourceRef="decision" targetRef="manIntro">
            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${age >= 18}]]></conditionExpression>
        </sequenceFlow>
        <userTask id="manIntro" name="用户已成年,欢迎其进入成人世界" activiti:assignee="${initiator}" activiti:candidateGroups="managers">
            <extensionElements>
                <activiti:formProperty id="welcomeManTime" name="欢迎您,你已通过验证,输入你的生日,开启一段愉快旅程" type="date" datePattern="MM-dd-yyyy hh:mm"></activiti:formProperty>
            </extensionElements>
        </userTask>
        <sequenceFlow id="sid-BA6F061B-47B6-428B-8CE6-739244B14BD6" sourceRef="manIntro" targetRef="endLogon"></sequenceFlow>
        <!-- 结束事件 -->
        <endEvent id="endLogon" name="End"></endEvent>
    </process>
    <bpmndi:BPMNDiagram id="BPMNDiagram_onboarding">
        <bpmndi:BPMNPlane bpmnElement="yellow-site-logon" id="BPMNPlane_onboarding">
            <bpmndi:BPMNShape bpmnElement="startLogon" id="BPMNShape_startOnboarding">
                <omgdc:Bounds height="30.0" width="30.0" x="155.0" y="145.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="inputUserInfo" id="BPMNShape_enterOnboardingData">
                <omgdc:Bounds height="80.0" width="100.0" x="240.0" y="120.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="decision" id="BPMNShape_decision">
                <omgdc:Bounds height="40.0" width="40.0" x="385.0" y="140.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="manIntro" id="BPMNShape_personalizedIntro">
                <omgdc:Bounds height="80.0" width="100.0" x="519.0" y="15.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="endLogon" id="BPMNShape_endOnboarding">
                <omgdc:Bounds height="28.0" width="28.0" x="725.0" y="165.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="youngManIntro" id="BPMNShape_automatedIntro">
                <omgdc:Bounds height="80.0" width="100.0" x="520.0" y="255.0"></omgdc:Bounds>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNEdge bpmnElement="sid-37A73ACA-2E23-400B-96F3-71F77738DAFA" id="BPMNEdge_sid-37A73ACA-2E23-400B-96F3-71F77738DAFA">
                <omgdi:waypoint x="570.0" y="255.0"></omgdi:waypoint>
                <omgdi:waypoint x="570.0" y="179.0"></omgdi:waypoint>
                <omgdi:waypoint x="725.0" y="179.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="sid-1337EA98-7364-4198-B5D9-30F5341D6918" id="BPMNEdge_sid-1337EA98-7364-4198-B5D9-30F5341D6918">
                <omgdi:waypoint x="185.0" y="160.0"></omgdi:waypoint>
                <omgdi:waypoint x="240.0" y="160.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="automatedIntroPath" id="BPMNEdge_automatedIntroPath">
                <omgdi:waypoint x="405.0" y="180.0"></omgdi:waypoint>
                <omgdi:waypoint x="405.0" y="295.0"></omgdi:waypoint>
                <omgdi:waypoint x="520.0" y="295.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="personalizedIntroPath" id="BPMNEdge_personalizedIntroPath">
                <omgdi:waypoint x="405.0" y="140.0"></omgdi:waypoint>
                <omgdi:waypoint x="405.0" y="55.0"></omgdi:waypoint>
                <omgdi:waypoint x="519.0" y="55.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="sid-42BE5661-C3D5-4DE6-96F5-73D34822727A" id="BPMNEdge_sid-42BE5661-C3D5-4DE6-96F5-73D34822727A">
                <omgdi:waypoint x="340.0" y="160.0"></omgdi:waypoint>
                <omgdi:waypoint x="385.0" y="160.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="sid-BA6F061B-47B6-428B-8CE6-739244B14BD6" id="BPMNEdge_sid-BA6F061B-47B6-428B-8CE6-739244B14BD6">
                <omgdi:waypoint x="619.0" y="55.0"></omgdi:waypoint>
                <omgdi:waypoint x="739.0" y="55.0"></omgdi:waypoint>
                <omgdi:waypoint x="739.0" y="165.0"></omgdi:waypoint>
            </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
    </bpmndi:BPMNDiagram>
</definitions>

1.6. 运行结果

1.6.1. 未成年处理

19:02:45.299 [main] INFO  o.a.engine.impl.db.DbSqlSession - performing create on engine with resource org/activiti/db/create/activiti.h2.create.engine.sql
19:02:45.361 [main] INFO  o.a.engine.impl.db.DbSqlSession - performing create on history with resource org/activiti/db/create/activiti.h2.create.history.sql
19:02:45.376 [main] INFO  o.a.engine.impl.db.DbSqlSession - performing create on identity with resource org/activiti/db/create/activiti.h2.create.identity.sql
19:02:45.382 [main] INFO  o.a.engine.impl.ProcessEngineImpl - ProcessEngine default created
获取流程引擎对象完成: ProcessEngine Name: [ default ] Version: [ 5.22.0.0 ]
19:02:45.409 [main] INFO  o.a.e.i.bpmn.deployer.BpmnDeployer - Processing resource logon-bpmn20.xml
发现流程定义, 名称:[YellowSiteLogon] Id:[yellow-site-logon:1:4]
登录判断流程开始,流程实例ID:[yellow-site-logon:1:4] key:[yellow-site-logon]
此流程共有任务数量: [ 1]
开始执行流程任务: [请输入用户信息:]
请输入姓名?
zilaiye
请输入年龄? (Must be a whole number)
12
未成年处理流程: 对不起:[zilaiye], 你还未成年,再长大点再来吧。
流程处理完成, 现在开始回放处理过程:
流程处理开始, 实例名称:[YellowSiteLogon] Key:[yellow-site-logon] 开始处理时间: [Sun Oct 29 19:02:47 CST 2017]
-- Start [startLogon] 7 ms
-- 请输入用户信息: [inputUserInfo] 17307 ms
-- 判断年龄是否满18岁 [decision] 8 ms
-- 对不起,你未成年,不能登录此网站 [youngManIntro] 1 ms
-- End [endLogon] 0 ms
流程处理完成 YellowSiteLogon [yellow-site-logon] Sun Oct 29 19:03:04 CST 2017

1.6.2. 已成年处理

19:04:00.745 [main] INFO  o.a.engine.impl.db.DbSqlSession - performing create on engine with resource org/activiti/db/create/activiti.h2.create.engine.sql
19:04:00.808 [main] INFO  o.a.engine.impl.db.DbSqlSession - performing create on history with resource org/activiti/db/create/activiti.h2.create.history.sql
19:04:00.822 [main] INFO  o.a.engine.impl.db.DbSqlSession - performing create on identity with resource org/activiti/db/create/activiti.h2.create.identity.sql
19:04:00.827 [main] INFO  o.a.engine.impl.ProcessEngineImpl - ProcessEngine default created
获取流程引擎对象完成: ProcessEngine Name: [ default ] Version: [ 5.22.0.0 ]
19:04:00.853 [main] INFO  o.a.e.i.bpmn.deployer.BpmnDeployer - Processing resource logon-bpmn20.xml
发现流程定义, 名称:[YellowSiteLogon] Id:[yellow-site-logon:1:4]
登录判断流程开始,流程实例ID:[yellow-site-logon:1:4] key:[yellow-site-logon]
此流程共有任务数量: [ 1]
开始执行流程任务: [请输入用户信息:]
请输入姓名?
zilaiye
请输入年龄? (Must be a whole number)
20
流程处理完成, 现在开始回放处理过程:
流程处理开始, 实例名称:[YellowSiteLogon] Key:[yellow-site-logon] 开始处理时间: [Sun Oct 29 19:04:02 CST 2017]
-- Start [startLogon] 6 ms
-- 请输入用户信息: [inputUserInfo] 5685 ms
-- 判断年龄是否满18岁 [decision] 8 ms
此流程共有任务数量: [ 1]
开始执行流程任务: [用户已成年,欢迎其进入成人世界]
欢迎您,你已通过验证,输入你的生日,开启一段愉快旅程? (Must be a date m/d/yy)
1/1/94
流程处理完成, 现在开始回放处理过程:
流程处理开始, 实例名称:[YellowSiteLogon] Key:[yellow-site-logon] 开始处理时间: [Sun Oct 29 19:04:02 CST 2017]
-- Start [startLogon] 6 ms
-- 请输入用户信息: [inputUserInfo] 5685 ms
-- 判断年龄是否满18岁 [decision] 8 ms
-- 用户已成年,欢迎其进入成人世界 [manIntro] 7513 ms
-- End [endLogon] 1 ms
流程处理完成 YellowSiteLogon [yellow-site-logon] Sun Oct 29 19:04:16 CST 2017

2. 参考资料

Copyright © wychuan.com 2017 all right reserved,powered by Gitbook该文件修订时间: 2017-10-30 14:39:20

results matching ""

    No results matching ""