⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 endtasksdbtest.java

📁 jBpm是一个灵活可扩展的工作流管理系统。作为jBpm运行时server输入的业务流程使用简单强大的语言表达并打包在流程档案中
💻 JAVA
字号:
package org.jbpm.taskmgmt.exe;

import java.util.Collection;
import java.util.Iterator;

import org.jbpm.db.AbstractDbTestCase;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.exe.ProcessInstance;

public class EndTasksDbTest extends AbstractDbTestCase {
  
  public static class Buzz implements ActionHandler {
    private static final long serialVersionUID = 1L;
    public void execute(ExecutionContext executionContext) throws Exception {
      throw new RuntimeException("buzz");
    }
  }

  public void testCancel() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition name='endtasksprocess'>" +
      "  <start-state>" +
      "    <transition to='approval' />" +
      "  </start-state>" +
      "  <task-node name='approval' end-tasks='true'>" +
      "    <task name='approve' description='Review order'>" +
      "      <assignment pooled-actors='reviewers' />" +
      "    </task>" +
      "    <transition name='approve' to='process'>" +
      "      <action class='"+Buzz.class.getName()+"' />" +
      "    </transition>" +
      "    <transition name='cancel'  to='cancelled'/>" +
      "  </task-node>" +
      "  <state name='process' />" +
      "  <state name='cancelled' />" +
      "</process-definition>"
    );
    jbpmContext.deployProcessDefinition(processDefinition);
    newTransaction();

    ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("endtasksprocess");
    processInstance.signal();

    processInstance = saveAndReload(processInstance);

    assertEquals("approval", processInstance.getRootToken().getNode().getName());
    processInstance = saveAndReload(processInstance);
    processInstance.signal("cancel");
    assertEquals("cancelled", processInstance.getRootToken().getNode().getName());
  }

  public void testApprove() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition name='endtasksprocess'>" +
      "  <start-state>" +
      "    <transition to='approval' />" +
      "  </start-state>" +
      "  <task-node name='approval' end-tasks='true'>" +
      "    <task name='approve' description='Review order'>" +
      "      <assignment pooled-actors='reviewers' />" +
      "    </task>" +
      "    <transition name='approve' to='process'/>" +
      "    <transition name='reject'  to='cancelled'/>" +
      "    <transition name='cancel'  to='cancelled'/>" +
      "  </task-node>" +
      "  <state name='process' />" +
      "  <state name='cancelled' />" +
      "</process-definition>"
    );
    jbpmContext.deployProcessDefinition(processDefinition);
    newTransaction();

    ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("endtasksprocess");
    processInstance.signal();

    processInstance = saveAndReload(processInstance);

    assertEquals("approval", processInstance.getRootToken().getNode().getName());
    TaskInstance taskInstance = (TaskInstance) processInstance
        .getTaskMgmtInstance()
        .getTaskInstances()
        .iterator()
        .next();
    
    taskInstance.end("approve");
    assertEquals("process", processInstance.getRootToken().getNode().getName());
  }

  public void testReject() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition name='endtasksprocess'>" +
      "  <start-state>" +
      "    <transition to='approval' />" +
      "  </start-state>" +
      "  <task-node name='approval' end-tasks='true'>" +
      "    <task name='approve' description='Review order'>" +
      "      <assignment pooled-actors='reviewers' />" +
      "    </task>" +
      "    <transition name='approve' to='process'/>" +
      "    <transition name='reject'  to='cancelled'/>" +
      "    <transition name='cancel'  to='cancelled'/>" +
      "  </task-node>" +
      "  <state name='process' />" +
      "  <state name='cancelled' />" +
      "</process-definition>"
    );
    jbpmContext.deployProcessDefinition(processDefinition);
    newTransaction();

    ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("endtasksprocess");
    processInstance.signal();

    processInstance = saveAndReload(processInstance);

    assertEquals("approval", processInstance.getRootToken().getNode().getName());
    TaskInstance taskInstance = (TaskInstance) processInstance
        .getTaskMgmtInstance()
        .getTaskInstances()
        .iterator()
        .next();
    
    taskInstance.end("reject");
    assertEquals("cancelled", processInstance.getRootToken().getNode().getName());
  }

  public void testTaskInstancesAfterCancellation() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition name='endtasksprocess'>" +
      "  <start-state>" +
      "    <transition to='approval' />" +
      "  </start-state>" +
      "  <task-node name='approval' end-tasks='true'>" +
      "    <task name='approve' description='Review order'>" +
      "      <assignment pooled-actors='reviewers' />" +
      "    </task>" +
      "    <transition name='approve' to='process'/>" +
      "    <transition name='reject'  to='cancelled'/>" +
      "    <transition name='cancel'  to='cancelled'/>" +
      "  </task-node>" +
      "  <state name='process' />" +
      "  <state name='cancelled' />" +
      "</process-definition>"
    );
    jbpmContext.deployProcessDefinition(processDefinition);
    newTransaction();

    ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("endtasksprocess");
    processInstance.signal();

    processInstance = saveAndReload(processInstance);
    processInstance = saveAndReload(processInstance);
    processInstance.signal("cancel");

    Collection taskInstances = processInstance.getTaskMgmtInstance().getTaskInstances();
    Iterator iter = taskInstances.iterator();
    while(iter.hasNext()) {
      TaskInstance taskInstance = (TaskInstance) iter.next();
      assertTrue(taskInstance.getName()+" ended", taskInstance.hasEnded());
      assertFalse(taskInstance.getName()+" not cancelled", taskInstance.isCancelled());
      assertFalse(taskInstance.getName()+" not blocking", taskInstance.isBlocking());
      assertFalse(taskInstance.getName()+" not signalling", taskInstance.isSignalling());
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -