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

📄 taskvariableaccessdbtest.java

📁 jbpm demo 是一款非常不错的开源工作流,简单易用,适合扩张开发!
💻 JAVA
字号:
package org.jbpm.taskmgmt.exe;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.jbpm.context.exe.ContextInstance;
import org.jbpm.db.AbstractDbTestCase;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;

public class TaskVariableAccessDbTest extends AbstractDbTestCase {

  /**
   * verifies task local variables. 
   */
  public void testVarUpdate() {
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
      "<process-definition name='panem et circenses'>" +
      "  <start-state name='start'>" +
      "    <transition to='f' />" +
      "  </start-state>" +
      "  <fork name='f'>" +
      "    <transition name='left'  to='panem' />" +
      "    <transition name='right' to='circenses' />" +
      "  </fork>" +
      "  <task-node name='panem'>" +
      "    <task name='bake bread'>" +
      "      <controller>" +
               // empty access means this is a task instance local variable with no counterpart in the process variables.
      "        <variable name='hero' access='' />" +
      "      </controller>" +
      "    </task>" +
      "    <transition to='j' />" +
      "  </task-node>" +
      "  <task-node name='circenses'>" +
      "    <task name='play monopoly'>" +
      "      <controller>" +
               // empty access means this is a task instance local variable with no counterpart in the process variables.
      "        <variable name='hero' access='' />" +
      "      </controller>" +
      "    </task>" +
      "    <transition to='j' />" +
      "  </task-node>" +
      "  <join name='j'>" +
      "    <transition to='end' />" +
      "  </join>" +
      "  <end-state name='end' />" +
      "</process-definition>"
    );
    jbpmContext.deployProcessDefinition(processDefinition);
    
    newTransaction();

    ProcessInstance processInstance = jbpmContext.newProcessInstanceForUpdate("panem et circenses");
    processInstance.signal();

    newTransaction();

    TaskInstance breadTaskInstance = findTask("bake bread");
    breadTaskInstance.setVariable("hero", "asterix");
    jbpmContext.save(breadTaskInstance);
    long breadTokenId = breadTaskInstance.getToken().getId();

    newTransaction();

    Token breadToken = jbpmContext.loadToken(breadTokenId);
    ContextInstance contextInstance = breadToken.getProcessInstance().getContextInstance();
    assertNull(contextInstance.getVariable("hero", breadToken));

    newTransaction();

    breadTaskInstance = jbpmContext.loadTaskInstance(breadTaskInstance.getId());
    assertEquals("asterix", breadTaskInstance.getVariable("hero"));

    newTransaction();

    TaskInstance monopolyTaskInstance = findTask("play monopoly");
    monopolyTaskInstance.setVariable("hero", "obelix");
    jbpmContext.save(monopolyTaskInstance);
    long monopolyTokenId = monopolyTaskInstance.getToken().getId();

    newTransaction();

    monopolyTaskInstance = jbpmContext.loadTaskInstance(monopolyTaskInstance.getId());
    assertEquals("obelix", monopolyTaskInstance.getVariable("hero"));

    newTransaction();

    Token monopolyToken = jbpmContext.loadToken(monopolyTokenId);
    contextInstance = monopolyToken.getProcessInstance().getContextInstance();
    assertNull(contextInstance.getVariable("hero", monopolyToken));
    
    newTransaction();
    
    breadTaskInstance = jbpmContext.loadTaskInstanceForUpdate(breadTaskInstance.getId());
    breadTaskInstance.end();

    newTransaction();

    monopolyTaskInstance = jbpmContext.loadTaskInstanceForUpdate(monopolyTaskInstance.getId());
    monopolyTaskInstance.end();

    newTransaction();

    breadToken = jbpmContext.loadToken(breadTokenId);
    monopolyToken = jbpmContext.loadToken(monopolyTokenId);
    contextInstance = breadToken.getProcessInstance().getContextInstance();
    assertNull(contextInstance.getVariable("hero", breadToken));
    assertNull(contextInstance.getVariable("hero", monopolyToken));
  }

  TaskInstance findTask(String taskName) {
    Session session = jbpmContext.getSession();
    Criteria criteria = session.createCriteria(TaskInstance.class);
    criteria.add(Restrictions.eq("name", taskName));
    List taskInstances = criteria.list();
    return (TaskInstance) taskInstances.get(0);
  }
}

⌨️ 快捷键说明

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