记录自己在学习和使用jbpm过程中遇到的一些问题和解决方法以及一些jbpm的学习资料
Aug 15
《jBPM 4视频教程》:基于jBPM 4.3,发布日期2010-3-5。
NO.分级标题
01《配置开发环境》:下载jBPM 4和eclipse,安装GPD流程设计器,设计简单流程。  下载   提意见
02《管理流程定义》:将流程定义发布到流程引擎中,实现查看和删除流程定义的功能。  下载   提意见
03《管理流程实例》:发起新流程,使暂停的流程继续运行,实现终止和删除流程实例。  下载   提意见
04《设计请假流程》:以请假审批流程为例,以web的方式发布新流程定义。  下载   提意见
05《发起新流程》:在流程定义中设置任务分配,提供接收和完成任务的功能。  下载   提意见
06《流程驳回》:实现流程驳回和重新提交申请的功能。  下载   提意见
07《组织机构》:介绍jBPM 4中默认提供的组织机构。  下载   提意见
08《监听事件》:为流程定义设置事件,监听流程执行时触发的事件。  下载   提意见
09《跟踪流程图》:显示流程图,跟踪当前路程实例的状态。  下载   提意见
May 5
JBoss Goup 目前已经发布了 jBPM4 Alpha1 版本,在版本 4 中最大的变化就是引入 PVM (流程虚拟机)的概念,而引擎内部的调度算法中重要的 Token 机制,在新版中也去掉了,纵观整个代码,变化可以说非常的大,笔者接下来就试着来比较一下这种变化,让大家能有个直观的认识。当然 Jbpm4 在 JBoss 的官方网站上的 Road map 中,在今年的 7 月 1 号才会发布第一个正式版本,因此后续可能还会有变化。

1、   流程定义对象的变化:

Jbpm3 流程定义对象关系图:

点击在新窗口中浏览此图片

图一 jbpm3流程定义对象关系图


从上图我们可以看出这 jbpm3 中, GraphElement 是流程图中所有流程元素的父对象,而整个流程是由 ProcessDefinition 、 Node 、 Transition 三个主要对象构成;

点击在新窗口中浏览此图片

图二 PVM 实体对象关系图      
Tags:
Apr 13
启动流程:
Ø 获取最新的流程定义:
JbpmContext.getCurrentJbpmContext().getGraphSession().findLatestProcessDefinitions();//返回List
Ø 获取指定流程定义:
ProcessDefinition processDefinition =
graphSession.loadProcessDefinition(processDefinitionId);
Ø 创建流程实例:
ProcessInstance processInstance = new ProcessInstance(processDefinition);
Ø 开始任务节点:
TaskInstance taskInstance =
processInstance.getTaskMgmtInstance().createStartTaskInstance();
Ø 获取指定任务实例(ID):
TaskMgmtSession taskMgmtSession;
taskMgmtSession = jbpmContext.getTaskMgmtSession();
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(taskInstanceId);
Ø 获取任务列表:
taskMgmtSession.findTaskInstances(userName);//userName为指派的人名(或角色名)

Ø 获取任务变量:
TaskController taskController = taskInstance.getTask().getTaskController();
List variableAccesses = taskController.getVariableAccesses();
注:TaskController 有两个关键的函数 initializeVariables,submitParameters,一个用来从流程中把变量置入task实例,另一个则相反,把task中变量更新到流程变量

Ø 根据流程定义找到相关的任务定义
ProcessDefinition pd = jbpmContext.getGraphSession().getProcessDefinition(id);
List tasklist = pd.getTaskMgmtDefinition().getTasks();

Ø 根据流程实例找到任务实例
taskMgmtSession.findTaskInstancesByProcessInstance(processInstance);  


原文地址 http://orz.javaeye.com/blog/89885  
Tags:
Apr 13
    在集成SSH+jbpm的过程中,遇到了错误,“ERROR org.jbpm.persistence.db.DbPersistenceService  - hibernate commit failed”,在网上搜了很多资料没有找到解决方法,没有办法只能自己调试程序试着找原因了,最终发现了问题所在。特记录如下:
    我在集成过程中,部署流程已经成功,但是在使用spring自动生成的jbpmTemplate bean来保存流程实例ProcessInstance时却报错,调试跟踪错误是出在了“jbpmContext.close()”这里。原因是这样的:
    springmodules提供的“org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean”类来创建ProcessDefinition流程定义实例,并且注入到JbpmTemplate实例中,而在创建ProcessDefinition流程实例时只是从xml读取流程实例,并不是从数据库中找到流程定义的最后版本,所以导致创建的流程定义的id是0,也就是没有进行持久化,所以我们使用该流程定义创建了流程实例后,又要对该流程实例保存时,流程实例和流程定义有外键关系,导致提交失败。
    错误出现在“jbpmContext.close()”,是因为在这句才结束事务,实际提交数据,也就出现了hibernate commit failed的错误。
    解决方法:

  JbpmContext jbpmContext = jbpmTemplate.getJbpmConfiguration().createJbpmContext();
  try{
    GraphSession graphSession = jbpmContext.getGraphSession();
    //获取流程实例,这样是从数据库中解析流程实例的最后版本
    ProcessDefinition definition = graphSession.findLatestProcessDefinition("simple");
    
    //这里注释掉的是原来使用的代码,这样的话用的是spring生成的流程定义对象,是从xml解析来的
//    ProcessInstance pi = new ProcessInstance(jbpmTemplate.getProcessDefinition());
    ProcessInstance pi = definition.createProcessInstance();
    jbpmContext.save(pi);
  }
  finally{
    jbpmContext.close();
  }


    如果哪里还没有明白,可以去参考下org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean的源代码,就明白为什么spring获取的流程定义对象不能创建能保存到数据库的流程实例了。

    最后再说明下,spring自己创建的流程对象如果当次部署过的话是可以创建流程实例并保存到数据库的,这是因为部署流程后流程定义就有id了,也就是持久化过了,这关系到jbpm和SSH的集成的方法,这方面的资料网上可以找到一些,大家就参考下网上其他的资料吧。
Tags: ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]