`
学会做人
  • 浏览: 118563 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JBPM封装类

    博客分类:
  • JBPM
阅读更多

package net.sweet.service.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import net.sweet.dao.JbpmObjectUtilsDAO;
import net.sweet.jbpm.form.item.Item;
import net.sweet.jbpm.variable.VariableKey;
import net.sweet.log.level.Logger;
import net.sweet.service.DataBaseProber;
import net.sweet.service.WorkflowDriver;
import net.sweet.util.Constants;
import net.sweet.util.comparator.TaskInstanceComparator;

import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
import org.jbpm.context.exe.variableinstance.StringInstance;
import org.jbpm.db.GraphSession;
import org.jbpm.db.TaskMgmtSession;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.taskmgmt.def.Task;
import org.jbpm.taskmgmt.exe.TaskInstance;
import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
import org.springframework.transaction.annotation.Transactional;
import org.springmodules.workflow.jbpm31.JbpmCallback;
import org.springmodules.workflow.jbpm31.JbpmTemplate;

@SuppressWarnings("unchecked")
public class JbpmWorkflowDriver implements WorkflowDriver {

 private JbpmTemplate jbpmTemplate;

 private DataBaseProber dataBaseProber;

 private JbpmObjectUtilsDAO jbpmObjectUtilsDao;

 public void setJbpmObjectUtilsDao(JbpmObjectUtilsDAO jbpmObjectUtilsDao) {
  this.jbpmObjectUtilsDao = jbpmObjectUtilsDao;
 }

 public void setJbpmTemplate(JbpmTemplate jbpmTemplate) {
  this.jbpmTemplate = jbpmTemplate;
 }

 public void setDataBaseProber(DataBaseProber dataBaseProber) {
  this.dataBaseProber = dataBaseProber;
 }

 /**
  * 返回当前系统所有流程定义
  */
 @Transactional(readOnly = true)
 public List<?> listAllProcessDefinition() {
  return (List<?>) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    Logger.debug("go into listAllProcessDefinition");
    return jbpmContext.getGraphSession()
      .findAllProcessDefinitions();
   }
  });
 }

 /**
  * 开始流程实例,并设置流程发起者
  */
 @Transactional
 public Long startProcessInstance(final Long processDefinitionId,
   final String username) {
  return (Long) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    GraphSession graphSession = jbpmContext.getGraphSession();
    ProcessDefinition processDefinition = graphSession
    // .findLatestProcessDefinition("Approve");
      .loadProcessDefinition(processDefinitionId);

    ProcessInstance processInstance = new ProcessInstance(
      processDefinition);
    // 设置流程发起人
    processInstance.getContextInstance().setVariable(
      VariableKey.PROCESS_STARTER.name(), username);

    processInstance.signal();

    TaskInstance taskInstance = (TaskInstance) processInstance
      .getTaskMgmtInstance().getTaskInstances().iterator()
      .next();

    // taskInstance.getComments()
    Logger.debug("Task name is :" + taskInstance.getName());
    taskInstance.setActorId(username);
    taskInstance.setVariable(VariableKey.PROCESS_STARTER.name(),
      username);
    /*
     * taskInstance.setDescription("This is a [" + username + "]
     * '制单' task");
     */

    taskInstance.setDueDate(Constants.TASK_DUE_DATE);
    // taskInstance.end();
    // Save the process instance along with the task instance
    jbpmContext.save(processInstance);
    return processInstance.getId();
   }
  });
 }

 /**
  * 根据流程定义名字开启流程实例
  */
 @Transactional
 public Long startProcessInstance(final String processDefinitionName,
   final String username) {
  return (Long) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    GraphSession graphSession = jbpmContext.getGraphSession();
    ProcessDefinition processDefinition = graphSession
      .findLatestProcessDefinition(processDefinitionName);

    ProcessInstance processInstance = new ProcessInstance(
      processDefinition);
    // 设置流程发起人
    processInstance.getContextInstance().setVariable(
      VariableKey.PROCESS_STARTER.name(), username);

    processInstance.signal();

    /*
     * TaskInstance taskInstance = (TaskInstance) processInstance
     * .getTaskMgmtInstance().getTaskInstances().iterator() .next();
     * taskInstance.setActorId(username);
     */
    // taskInstance.setVariable(VariableKey.PROCESS_STARTER.name(),
    // username);
    // taskInstance.end();
    // Save the process instance along with the task instance
    jbpmContext.save(processInstance);
    return processInstance.getId();
   }
  });
 }

 /**
  * 根据流程实例获得当前流程的当前任务实例
  */
 @Transactional(readOnly = true)
 public TaskInstance getCurrentTaskInstance(final Long processInstanceId) {
  return (TaskInstance) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    ProcessInstance processInstance = jbpmContext
      .loadProcessInstance(processInstanceId);
    return processInstance.getTaskMgmtInstance().getTaskInstances()
      .iterator().next();
   }
  });
 }

 /**
  * 保存流程实例
  */
 @Transactional
 public void saveProcessInstance(final Long processInstanceId) {
  jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    ProcessInstance processInstance = jbpmContext
      .loadProcessInstance(processInstanceId);
    jbpmContext.save(processInstance);
    return null;
   }
  });
 }

 /**
  * 根据流程实例获得当前流程的当前任务实例
  */
 @Transactional(readOnly = true)
 public Task getCurrentTask(final Long processInstanceId) {
  return (Task) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    ProcessInstance processInstance = jbpmContext
      .loadProcessInstance(processInstanceId);
    return ((TaskInstance) processInstance.getTaskMgmtInstance()
      .getTaskInstances().iterator().next()).getTask();
   }
  });
 }

 /**
  * 取得当前任务实例所在的实例管理上下文中所有任务实例
  *
  * @param taskInstanceId
  * @return
  */
 @Transactional(readOnly = true)
 public Collection getAllTaskInstances(final Long taskInstanceId) {
  return (Collection) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    TaskInstance task = jbpmContext.getTaskInstance(taskInstanceId);
    List sortList = new ArrayList();
    sortList.addAll(task.getTaskMgmtInstance().getTaskInstances());
    Collections.sort(sortList, new TaskInstanceComparator());
    return sortList;
   }
  });
 }

 /**
  * 完成任务实例,并保存流程实例变量
  */
 @Transactional
 public void endTaskInstance(final Long taskInstanceId,
   final Map formParams, final String opinion, final String transition) {
  jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    TaskInstance task = jbpmContext.getTaskInstance(taskInstanceId);
    Set keySet = formParams.keySet();
    for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
     String key = (String) iterator.next();
     if (key.startsWith(Item.ITEM_PREFIX)
       && !key
         .endsWith(Item.FILE_PARAMETER_APPEND_POSTFIX)) {// 判断需要保存在流程实例中的变量
      String value = getValue(((String[]) formParams.get(key)));
      if (!isLargeString(value))// 判断是否为长字符串,如果是,则以byte[]形式保存,否则直接保存字符串
       task.getContextInstance().setVariable(key, value);
      else
       task.getContextInstance().setVariable(key,
         value.getBytes());
     }
    }
    // task.setVariable("opinion", opinion);
    task.setVariableLocally(VariableKey.TASK_OPINION.name(),
      opinion);
    // task.getVariablesLocally()
    // task.addComment(new Comment(opinion));
    task.end(transition);
    // task.getPooledActors();
    jbpmContext.save(task);
    return null;
   }
  });
 }

 /**
  * 完成任务实例
  */
 @Transactional
 public void endTaskInstance(final Long taskInstanceId,
   final String opinion, final String transition,
   final String taskProcessPerson) {
  jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    TaskInstance task = jbpmContext.getTaskInstance(taskInstanceId);
    task.setVariableLocally(VariableKey.TASK_OPINION.name(),
      opinion);
    task.setVariableLocally(VariableKey.TASK_PROCESS_PERSON.name(),
      taskProcessPerson);
    task.end(transition);
    jbpmContext.save(task);
    return null;
   }
  });
 }

 /**
  * 判断当前字符串是否属于长字符串,具体参照标准为‘jbpm_variableinstance’表中的‘STRINGVALUE_’字段长度
  *
  * @param str
  * @return
  */
 private boolean isLargeString(String str) {
  if (str.length() >= dataBaseProber.getFieldPrecision(
    "jbpm_variableinstance", "STRINGVALUE_"))
   return true;
  return false;
 }

 /**
  * 将字符数组的空间值循环构成字符串
  *
  * @param values
  * @return
  */
 private String getValue(String[] values) {
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < values.length; i++) {
   sb.append(values[i]);
   if (i != values.length - 1)
    sb.append(Item.MUTIPUL_VALUE_SPLIT);
  }
  return sb.toString();
 }

 /**
  * 完成任务,并结束任务
  */
 /*
  * @Transactional public void doTaskWithTaskEnd(final Long
  * processInstanceId, final String transition) { jbpmTemplate.execute(new
  * JbpmCallback() { public Object doInJbpm(JbpmContext jbpmContext) throws
  * JbpmException { ProcessInstance processInstance = jbpmContext
  * .loadProcessInstance(processInstanceId); TaskInstance task =
  * (TaskInstance) processInstance
  * .getTaskMgmtInstance().getTaskInstances().iterator() .next();
  * task.end(transition); jbpmContext.save(processInstance); return null; }
  * }); }
  */

 /**
  * 根据参与者名称获得当前所有非池任务实例
  */
 @SuppressWarnings("unchecked")
 @Transactional
 public List<Object> getTaskList(final String username) {
  return (List<Object>) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    /*
     * ProcessInstance processInstance = jbpmContext
     * .loadProcessInstance(processInstanceId);
     */
    TaskMgmtSession taskMgmtSession = new TaskMgmtSession(
      jbpmContext.getSession());
    // return taskMgmtSession.findPooledTaskInstances(username);
    return taskMgmtSession.findTaskInstances(username);
   }
  });
 }

 /**
  * 根据参与者名称获得当前所有池任务实例
  */
 @SuppressWarnings("unchecked")
 @Transactional
 public List<Object> getPooledTaskList(final String username) {
  return (List<Object>) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    TaskMgmtSession taskMgmtSession = new TaskMgmtSession(
      jbpmContext.getSession());
    return taskMgmtSession.findPooledTaskInstances(username);
   }
  });
 }

 /**
  * 结束任务,并跳转到指定节点
  */
 @Transactional
 public void endTask(final Long taskInstanceId, final String transition) {
  jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    TaskInstance taskInstance = jbpmContext
      .getTaskInstance(taskInstanceId);
    taskInstance.end(transition);
    return null;
   }
  });
 }

 /**
  * 判断流程实例是否结束
  */
 @Transactional(readOnly = true)
 public Boolean isFinish(final Long processInstanceId) {
  return (Boolean) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    ProcessInstance processInstance = jbpmContext
      .loadProcessInstance(processInstanceId);
    return processInstance.hasEnded();
   }
  });
 }

 /**
  * 获得当前任务节点的所有可能流向
  */
 @Transactional(readOnly = true)
 public List<?> getTransitionByTaskNode(final Long taskInstanceId) {
  return (List<?>) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    TaskInstance ti = jbpmContext.getTaskInstance(taskInstanceId);
    Logger.debug(ti.getContextInstance().getVariables());
    List<?> transitions = ti.getTask().getTaskNode()
      .getLeavingTransitionsList();
    return transitions;
   }
  });
 }

 /**
  * 获得当前任务实例对应的任务节点名称
  */
 @Transactional(readOnly = true)
 public String getTaskNodeName(final Long taskInstanceId) {
  return (String) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    TaskInstance ti = jbpmContext.getTaskInstance(taskInstanceId);
    Logger.debug(ti.getContextInstance().getVariables());
    return ti.getTask().getTaskNode().getName();
   }
  });
 }

 /**
  * 获得流程实例信息
  */
 @Transactional(readOnly = true)
 public ProcessInstance getProcessInstance(final Long processInstanceId) {
  return (ProcessInstance) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.getProcessInstance(processInstanceId);
   }
  });
 }

 /**
  * 获得流程实例变量集合
  */
 @Transactional(readOnly = true)
 public Map<String, String> getProcessInstanceVariables(
   final Long processInstanceId) {
  return (Map<String, String>) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.getProcessInstance(processInstanceId)
      .getContextInstance().getVariables();
   }
  });
 }

 /**
  * 获得任务实例信息
  */
 @Transactional(readOnly = true)
 public TaskInstance getTaskInstance(final Long taskInstanceId) {
  return (TaskInstance) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.getTaskInstance(taskInstanceId);
   }
  });
 }

 /**
  * 根据流程定义,获得所有流程实例
  */
 @Transactional(readOnly = true)
 public List<?> getProcessInstances(final Long processDefinitionId) {
  return (List<?>) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.getGraphSession().findProcessInstances(
      processDefinitionId);
   }
  });
 }

 /**
  * 根据流程实例得到当前所有任务实例
  */
 @Transactional(readOnly = true)
 public Collection<?> getTaskInstances(final Long processInstanceId) {
  return (Collection<?>) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    ProcessInstance processInstance = jbpmContext
      .loadProcessInstance(processInstanceId);
    List sortList = new ArrayList();
    sortList.addAll(processInstance.getTaskMgmtInstance()
      .getTaskInstances());
    Collections.sort(sortList, new TaskInstanceComparator());
    return sortList;
   }
  });
 }

 /**
  * 根据流程定义ID获得流程定义名称
  *
  * @param processDefinitionId
  * @return
  */
 @Transactional(readOnly = true)
 public String getProcessDefinitionName(final Long processDefinitionId) {
  return (String) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.getGraphSession().getProcessDefinition(
      processDefinitionId).getName();
   }
  });
 }

 /**
  * 根据流程定义获得任务列表
  *
  * @param processDefinitionId
  * @return
  */
 @Transactional(readOnly = true)
 public Map findTaskNode(final Long processDefinitionId) {
  return (Map) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.getGraphSession().getProcessDefinition(
      processDefinitionId).getTaskMgmtDefinition().getTasks();
   }
  });
 }

 /**
  * 根据任务实例获得当前流程定义
  *
  * @param processDefinitionId
  * @return
  */
 @Transactional(readOnly = true)
 public ProcessDefinition findProcessDefinition(final Long taskInstanceId) {
  return (ProcessDefinition) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.getTaskInstance(taskInstanceId)
      .getContextInstance().getProcessInstance()
      .getProcessDefinition();
   }
  });
 }

 /**
  * 获得流程实例中的变量值
  *
  * @param processInstanceId
  * @param key
  * @return
  */
 @Transactional(readOnly = true)
 public Object getVariable(final Long processInstanceId, final String key) {
  return jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.loadProcessInstance(processInstanceId)
      .getContextInstance().getVariable(key);
   }
  });
 }

 /**
  * 根据任务实例标识得到流程实例的变量值
  *
  * @param processInsanceId
  * @param key
  *            变量key
  * @param value
  *            变量值
  */
 @Transactional(readOnly = true)
 public Object getVariableByTaskInstance(final Long taskInstanceId,
   final String key) {
  return jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.loadTaskInstance(taskInstanceId)
      .getContextInstance().getVariable(key);
   }
  });
 }

 /**
  * 向流程实例中保存流程变量
  *
  * @param processInsanceId
  * @param key
  *            变量key
  * @param value
  *            变量值
  */
 @Transactional
 public void insertVariable(final Long processInstanceId, final String key,
   final Object value) {
  jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    jbpmContext.loadProcessInstance(processInstanceId)
      .getContextInstance().setVariable(key, value);
    return null;
   }
  });
 }

 /**
  * 获得令牌实例对象
  *
  * @param tokenInstanceId
  * @return
  */
 @Transactional(readOnly = true)
 public Token getTokenInstance(final Long tokenInstanceId) {
  return (Token) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    return jbpmContext.loadToken(tokenInstanceId);
   }
  });
 }

 /**
  * 根据流程定义名字开启流程实例并停留在开始节点手动往下流转
  */
 @Transactional
 public Long startProcessInstanceNoSignal(
   final String processDefinitionName, final String username) {
  return (Long) jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    GraphSession graphSession = jbpmContext.getGraphSession();
    ProcessDefinition processDefinition = graphSession
      .findLatestProcessDefinition(processDefinitionName);

    ProcessInstance processInstance = new ProcessInstance(
      processDefinition);
    // 设置流程发起人
    processInstance.getContextInstance().setVariable(
      VariableKey.PROCESS_STARTER.name(), username);

    /*
     * TaskInstance taskInstance = (TaskInstance) processInstance
     * .getTaskMgmtInstance().getTaskInstances().iterator() .next();
     * taskInstance.setActorId(username);
     */
    // taskInstance.setVariable(VariableKey.PROCESS_STARTER.name(),
    // username);
    // taskInstance.end();
    // Save the process instance along with the task instance
    jbpmContext.save(processInstance);
    return processInstance.getId();
   }
  });
 }

 /**
  * 根据流程实例结束掉这个实例中所有未完成的任务
  *
  * @param processInsanceId
  */
 @Transactional
 public void endUnfinishedTasksByProcessInstanceId(
   final Long processInstanceId) {
  jbpmTemplate.execute(new JbpmCallback() {
   public Object doInJbpm(JbpmContext jbpmContext)
     throws JbpmException {
    TaskMgmtInstance tmi = jbpmContext.loadProcessInstance(
      processInstanceId).getTaskMgmtInstance();
    Collection<TaskInstance> taskInstanceCollection = tmi
      .getTaskInstances();
    for (TaskInstance taskInstance : taskInstanceCollection) {
     // 如果任务实例没有结束就结束掉该任务
     if (!taskInstance.hasEnded()) {
      taskInstance.end();
      jbpmContext.save(taskInstance);
     }
    }
    return null;
   }
  });
 }

 /**
  * 得到流程发起者的所有流程实例
  *
  * @param processStarter
  * @return
  */
 @Transactional
 public List getProcessInstances(String processStarter,
   String processDefinitionName, Boolean hasEnded) {
  String hql = "FROM StringInstance WHERE name = ? AND value = ? "
    + "AND processInstance.processDefinition.name = ? ";
  if (hasEnded != null) {
   if (hasEnded)
    hql = hql + "AND processInstance.end IS NOT NULL ";
   else
    hql = hql + "AND processInstance.end IS NULL ";
  }
  List list = jbpmObjectUtilsDao.find(hql, new Object[] {
    VariableKey.PROCESS_STARTER.name(), processStarter,
    processDefinitionName });
  List processInstances = new ArrayList();
  for (Iterator iterator = list.iterator(); iterator.hasNext();) {
   StringInstance si = (StringInstance) iterator.next();
   processInstances.add(this.getProcessInstance(si
     .getProcessInstance().getId()));
  }
  return processInstances;
 }
}

分享到:
评论
3 楼 wocsok 2009-10-09  
您好 楼主 请问  任务实例的begin() 和 end()  与 过程实例的  pi.signal()有什么区别与联系啊
2 楼 学会做人 2009-09-20  
processInstance.getContextInstance().setVariable("key","value")与taskInstance.("key","value")不一样的!
一个是将变量放到上下文实例中;另一个是将变量放到任务实例中!
如果是放到任务实例当中,取 变量也必须先得到该任务实例,再从中去变量!


至于你为什么流转时数据库会无数据:
是和你的事务有关的,如:<property name="transactionAttributes">
<props>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="upd*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="submit*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
</props>
</property>

这是你spring里的配置事务的,如果你的service里的方法名不是以你配置中的为开
头,就无法的往数据库里插入数据.
如你service里的方法名为:public void submitToWorkflow(String userId, String gongdId, String transitionName),所以你的spring配置文件里必须配置<prop key="submit*">PROPAGATION_REQUIRED</prop>,.
1 楼 dongyeyun 2009-09-17  
我接触jbpm的时间不长,processInstance.getContextInstance().setVariable("key","value")与taskInstance.("key","value")一样吗?都可以通过processInstance.getContextInstance().getVariable("key");的方式获取到吗?在jbpm当中关于JbpmContext对象该怎么管理啊?在节点流转的时候经常报错,通过查看jbpm的数据库发现里边的数据并没有更新,例如:在taskInstance.end("transitionName");后节点并没有流转而是任然停留在上一节点,Token表中绑定的还是上一节点,请你帮我指点一下。谢谢

相关推荐

    jbpm 封装

    这个是自己把一些jbpm的封装,比较不错啊

    jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍

    jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    jbpm简介\jbpm简介

    \jbpm简介\jbpm简介\jbpm简介\jbpm简介\jbpm简介

    jbpm 数据库jbpm 数据库

    jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库

    jbpm 案例 jbpm jbpm

    jbpm使用案例,非常不错,大家都来看看吧。

    jbpm4jbpm5

    jbpm应用开发指面(胡奇) jbpm4.3表结构和表字段说明 [jBPM开发指南].高杰.文字版 jBPM5_用户手册-中文版

    JBPM工作原理及表结构详解

    本文件从JBPM的原理、实现方法、实例等方面详细讲解了JBPM的原理,包括以下内容: 1、JBPM特色: 3 2、流程图的组成: 3 2.1流转 (TRANSITION) 3 2.2活动 (ACTIVITY) 3 3、所用到的表: 4 3.1资源库与运行时表结构:...

    jbpm开发指南--jbpm全面介绍

    通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...

    jbpm4源码jbpm4源码jbpm4源码

    jbpm4源码jbpm4源码jbpm4源码

    JBPM采购申请系统——08_JBPM流程节点.7z

    JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...

    jbpm创建数据库jbpm创建数据库

    jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库

    JBPM4 SSH EXTJS JBPM SSH EXTJS

    JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。

    JBPM开发指南JBPM开发指南

    JBPM开发指南JBPM开发指南JBPM开发指南

    jbpm3.2表说明

    JBPM_DELEGATION JBPM_DELEGATION FK_DELEGATION_PRCD PROCESSDEFINITION_ 一个流程可能存在很多的流程代理类 JBPM_PROCESSINSTANCE JBPM_PROCESSINSTANCE FK_PROCIN_PROCDEF PROCESSDEFINITION_ 一个流程模板可能...

    JBPM数据库表说明.doc

    1.6 JBPM_DELEGATION:流程代理类表(用于实例化jbpm中的action类) 6 1.7 JBPM_TASK:流程任务表 6 1.8 JBPM_TASKCONTROLLER:流程任务控制器 7 1.9 JBPM_VARIABLEACCESS:流程变量表 7 1.10 JBPM_MODULEDEFINITION...

    jBPM源码分析jBPM源码分析

    jBPM源码分析jBPM源码分析jBPM源码分析jBPM源码分析

    jbpm-3.1.2.zip_jbpm_jbpm 3.1.2_jbpm-3.1.2.rar_jbpm3.1.2_工作流

    jBpm是一个灵活可扩展的工作流管理系统。作为jBpm运行时server输入的业务流程使用简单强大的语言表达并打包在流程档案中

    jbpm学习资料,jbpm教程

    jbpm学习资料,jBPM-jPDL学习笔记,很详细。。。。。。。。。。。jbpm教程

    JBPM采购申请系统——06_JBPM版本控制及Token对象.7z

    JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z ...

Global site tag (gtag.js) - Google Analytics