产生工作

  • 异步任务 -- 工作数据写到一般工作表 act_ru_job 中
  • 定时事件 -- 数据写到定时工作表act_ru_timer_job 中
  • 暂停的工作 -- 当定时任务被暂停时,会将数据写到暂停工作表act_ru_suspended_job 中
  • 无法执行的工作 -- 如果有一个任务被执行多次仍然无法执行,就会写到无法执行工作表 act_ru_deadletter_job 中,

一、测试 异步任务 产生的工作 -- 工作数据写到一般工作表 act_ru_job 中

     步骤

     1.1 新建一个 service_task.bpmn

复习步骤9-Activiti工作的产生与管理

    1.2  创建一个 Sevice Task 这个节点的 异步处理类

MyJavaDelegate 实现 JavaDelegate 接口

package com.xiangshuai.act.c13;

 

import org.activiti.engine.delegate.DelegateExecution;

import org.activiti.engine.delegate.JavaDelegate;

 

public class MyJavaDelegate implements JavaDelegate {

 

    @Override

    public void execute(DelegateExecution arg0) {

       System.out.println("这是异步处理类");

    }

 

}

 

1.3 改 service_task.bpmn

复习步骤9-Activiti工作的产生与管理

1.4 改 activiti.cfg.xml

复习步骤9-Activiti工作的产生与管理

 

1.5 测试方法

//测试 异步任务 产生的工作 -- 工作数据写到一般工作表 act_ru_job

    public static void servieTaskTest(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

         // 存储服务

         RepositoryService rs = engine.getRepositoryService();

         // 运行时服务

         RuntimeService runService = engine.getRuntimeService();

         // 任务服务

         TaskService taskService = engine.getTaskService();

        

         Deployment dep = rs.createDeployment().addClasspathResource("service_task.bpmn").deploy();

         ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        

         ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

         System.out.println(pi.getId());

    }

 

二、测试 定时事件 产生的工作-- 数据写到定时工作表act_ru_timer_job 中

2.1 新建一个 timer_test.bpmn

 

复习步骤9-Activiti工作的产生与管理

 

2.2改 activiti.cfg.xml

这里也必须设置异步执行,否则即使改了timer_test.bpmn

设置了1分钟后会删掉act_ru_timer_job中的数据,也不会执行

 

复习步骤9-Activiti工作的产生与管理

 

2.3  改 timer_test.bpmn

  下图1分钟后会执行act_ru_timer_job中定时任务 执行完会删掉act_ru_timer_job中的数据

复习步骤9-Activiti工作的产生与管理

 

2.4 测试方法

//二、测试 定时事件 产生的工作-- 数据写到定时工作表act_ru_timer_job

    public static void timerTaskTest(){

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

       // 存储服务

       RepositoryService rs = engine.getRepositoryService();

       // 运行时服务

       RuntimeService runService = engine.getRuntimeService();

       // 任务服务

       TaskService taskService = engine.getTaskService();

      

       Deployment dep = rs.createDeployment().addClasspathResource("timer_test.bpmn").deploy();

       ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

      

       ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

       System.out.println(pi.getId());

    }

 

 

三、测试 当定时任务被暂停时,会将数据从act_ru_timer_job写到暂停工作表act_ru_suspended_job 中,当任务**又会 从act_ru_suspended_job写回act_ru_timer_job表

3.1 新建一个 suspend_test.bpmn(也可以直接COPY timer_test.bpmn

)

复习步骤9-Activiti工作的产生与管理

 

 

3.2 和测试定时事件一样在suspend_test.bpmn加  <timeDuration>PT5M</timeDuration> 这个标签,用5M5分钟,不会过短的时间就跳到 User Task 节点,方便我们观察act_ru_timer_job 工作数据和act_ru_suspended_job工作数据的 切换

复习步骤9-Activiti工作的产生与管理

3.3 测试方法

/*

   测试 当定时任务被暂停时,会将数据从act_ru_timer_job写到暂停工作表act_ru_suspended_job 中,

    当任务**又会 act_ru_suspended_job写回act_ru_timer_job

    */

    public static void suspendTestTest(){

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

       // 存储服务

       RepositoryService rs = engine.getRepositoryService();

       // 运行时服务

       RuntimeService runService = engine.getRuntimeService();

       // 任务服务

       TaskService taskService = engine.getTaskService();

      

       Deployment dep = rs.createDeployment().addClasspathResource("suspend_test.bpmn").deploy();

       ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

      

       ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

      

       try {

           Thread.sleep(10000);//10秒看 act_ru_suspended_jobact_ru_timer_job表数据

           runService.suspendProcessInstanceById(pi.getId());//定时任务被暂停,工作数据从act_ru_timer_job表写到act_ru_suspended_job

           Thread.sleep(10000);//10秒看 act_ru_suspended_jobact_ru_timer_job表数据变化

           runService.activateProcessInstanceById(pi.getId());//定时任务被**,工作数据从表写到act_ru_suspended_job写到act_ru_timer_job

           // act_ru_suspended_jobact_ru_timer_job表数据变化

           //最后因为设置了<timeDuration>PT5M</timeDuration> 5分钟后会执行这个定时任务,从act_ru_timer_job表删除数据,调到下一个节点

       } catch (InterruptedException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

      

    }

 

 

四、测试 无法执行的工作-- 如果有一个任务被执行多次仍然无法执行,就会写到无法执行工作表 act_ru_deadletter_job 中

4.1  创建error_task.bpmn

复习步骤9-Activiti工作的产生与管理

4.2创建一个 Sevice Task 这个节点的 异步处理类

ExceptionDelegate 实现 JavaDelegate 接口

package com.xiangshuai.act.c13;

 

import org.activiti.engine.delegate.DelegateExecution;

import org.activiti.engine.delegate.JavaDelegate;

 

public class ExceptionDelegate implements JavaDelegate {

 

    @Override

    public void execute(DelegateExecution arg0) {

        System.out.println("这是处理类");

        throw new RuntimeException("always exception");

    }

}

4.3 改error_task.bpmn 复习步骤9-Activiti工作的产生与管理

4.4 改 activiti.cfg.xml

复习步骤9-Activiti工作的产生与管理

 

4.5 测试方法

public static void errorServieTaskTest(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

         // 存储服务

         RepositoryService rs = engine.getRepositoryService();

         // 运行时服务

         RuntimeService runService = engine.getRuntimeService();

         // 任务服务

         TaskService taskService = engine.getTaskService();

         ManagementService managementService = engine.getManagementService();

        

        

         Deployment dep = rs.createDeployment().addClasspathResource("error_task.bpmn").deploy();

         ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        

         ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

         System.out.println(pi.getId());

        

         Job job = managementService.createJobQuery().singleResult();

         managementService.setJobRetries(job.getId(), 2); //设置如果有一个任务  执行多次(2次,执行MyJavaDelegate两次execute方法,报两次异常,默认是三次)仍然无法执行,就会写到无法执行工作表 act_ru_deadletter_job

        /* managementService.executeJob(job.getId()); -- activiti.cfg.xml 如果不设置<property name="asyncExecutorActivate" value="true"></property>

         才需手动执行工作*/

 

 

 

 

JobGenTest.java

package com.xiangshuai.act.c13;

 

import org.activiti.engine.ManagementService;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.TaskService;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.activiti.engine.runtime.Job;

import org.activiti.engine.runtime.ProcessInstance;

 

/**

 * * @author lqx

 * 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤9-Activiti工作的产生与管理

 * 或 我的网盘\我的笔记学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤9-Activiti工作的产生与管理

 *

 */

public class JobGenTest {

    public static void main(String[] args) {

                  //servieTaskTest();//输出结果 System.out.println(pi.getId()),MyJavaDelegate中的System.out.println("这是异步处理类");

             //timerTaskTest();//设置好 timer_test.bpmn, activiti.cfg.xml后会执行定时任务

             //suspendTestTest();

             errorServieTaskTest();//执行完act_ru_deadletter_job 就有数据了

         }

   

   //测试 异步任务 产生的工作 -- 工作数据写到一般工作表 act_ru_job 中

    public static void servieTaskTest(){

              ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

         // 存储服务

         RepositoryService rs = engine.getRepositoryService();

         // 运行时服务

         RuntimeService runService = engine.getRuntimeService();

         // 任务服务

         TaskService taskService = engine.getTaskService();

        

         Deployment dep = rs.createDeployment().addClasspathResource("service_task.bpmn").deploy();

         ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        

         ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

         System.out.println(pi.getId());

    }

   

    //二、测试 定时事件 产生的工作-- 数据写到定时工作表act_ru_timer_job 中

    public static void timerTaskTest(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

             // 存储服务

             RepositoryService rs = engine.getRepositoryService();

             // 运行时服务

             RuntimeService runService = engine.getRuntimeService();

             // 任务服务

             TaskService taskService = engine.getTaskService();

            

             Deployment dep = rs.createDeployment().addClasspathResource("timer_test.bpmn").deploy();

             ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

            

             ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

             System.out.println(pi.getId());

    }

   

   /*

   测试 当定时任务被暂停时,会将数据从act_ru_timer_job写到暂停工作表act_ru_suspended_job 中,

    当任务**又会 从act_ru_suspended_job写回act_ru_timer_job表

    */

    public static void suspendTestTest(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

             // 存储服务

             RepositoryService rs = engine.getRepositoryService();

             // 运行时服务

             RuntimeService runService = engine.getRuntimeService();

             // 任务服务

             TaskService taskService = engine.getTaskService();

            

             Deployment dep = rs.createDeployment().addClasspathResource("suspend_test.bpmn").deploy();

             ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

            

             ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

            

             try {

                          Thread.sleep(10000);//睡10秒看 act_ru_suspended_job和act_ru_timer_job表数据

                          runService.suspendProcessInstanceById(pi.getId());//定时任务被暂停,工作数据从act_ru_timer_job表写到act_ru_suspended_job

                          Thread.sleep(10000);//睡10秒看 act_ru_suspended_job和act_ru_timer_job表数据变化

                          runService.activateProcessInstanceById(pi.getId());//定时任务被**,工作数据从表写到act_ru_suspended_job写到act_ru_timer_job

                          //看 act_ru_suspended_job和act_ru_timer_job表数据变化

                          //最后因为设置了<timeDuration>PT5M</timeDuration> 5分钟后会执行这个定时任务,从act_ru_timer_job表删除数据,调到下一个节点

                  } catch (InterruptedException e) {

                          // TODO Auto-generated catch block

                          e.printStackTrace();

                  }

            

    }

   

    public static void errorServieTaskTest(){

              ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

         // 存储服务

         RepositoryService rs = engine.getRepositoryService();

         // 运行时服务

         RuntimeService runService = engine.getRuntimeService();

         // 任务服务

         TaskService taskService = engine.getTaskService();

         ManagementService managementService = engine.getManagementService();

        

        

         Deployment dep = rs.createDeployment().addClasspathResource("error_task.bpmn").deploy();

         ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        

         ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

         System.out.println(pi.getId());

        

         Job job = managementService.createJobQuery().singleResult();

         managementService.setJobRetries(job.getId(), 2); //设置如果有一个任务  执行多次(2次,执行MyJavaDelegate两次execute方法,报两次异常,默认是三次)仍然无法执行,就会写到无法执行工作表 act_ru_deadletter_job 中

        /* managementService.executeJob(job.getId()); --在 activiti.cfg.xml 如果不设置<property name="asyncExecutorActivate" value="true"></property>

         才需手动执行工作*/

    }

   

}

相关文章: