`
liveam
  • 浏览: 3576 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

jbpm的子流程发布与删除

    博客分类:
  • jbpm
阅读更多

jbpm的流程deploy方法之一是:

JbpmConfiguration.getInstance().createJbpmContext().deployProcessDefinition(processDefinition);

如果流程中涉及子流程的话,deploy需要注意先后顺序,否则父流程会找不到子流程.

发布流程遵循的顺序是先子后父

举例:

process
|--sub process
|--|--sub sub process

发布的顺序是:

1:deploy "sub sub process"
2:deploy "sub process"
3:deploy "process"

 删除亦然.


 

流程实例结束后删除流程实例的方法之一是:

JbpmConfiguration.getInstance().createJbpmContext().getGraphSession().deleteProcessInstance(processInstance.getId());

如果流程涉及子流程的话,删除流程实例同样需要注意先后顺序,否则会报约束错误.

删除流程实例的顺序也是先子后父

举例:

processInstance
|--sub processInstance
|--|--sub sub processInstance

删除的顺序是:

1:delete "sub sub processInstance"
2:delete "sub processInstance"
3:delete "processInstance"

 


 

在存在子流程的情况下,如果子流程未结束,此时调用

JbpmConfiguration.getInstance().createJbpmContext().getGraphSession().deleteProcessInstance(rootProcessInstance.getId());

可以正常删除流程实例树.

如果子流程已结束,父流程尚未结束,此时调用该方法会报约束错误,主要原因是Token表中的SubProcessInstance_字段在流程运行中指向ProcessInstance表的id,而ProcessInstance表的RootToken字段指向本实例的根token,SuperProcessToken字段指向父Token;在子流程结束时,Token表中父流程的SubProcessInstance字段会自动清空,此时虽然可以根据ProcessInstance表中找到子流程的父Token,但是根据此父Token确找不到该已结束的子流程ProcessInstance,因此在删除时会出现约束错误.具体的代码分析如下:

deleteProcessInstance()方法的递归删除子流程部分内容在GraphSession.class的deleteSubProcesses()方法内,该方法的内容为:

  void deleteSubProcesses(Token token) {
    ProcessInstance subProcessInstance = token.getSubProcessInstance();
    if (subProcessInstance!=null){
      subProcessInstance.setSuperProcessToken(null);
      token.setSubProcessInstance(null);
      deleteProcessInstance(subProcessInstance);
    }
    if (token.getChildren()!=null) {
      Iterator iter = token.getChildren().values().iterator();
      while (iter.hasNext()) {
        Token child = (Token) iter.next();
        deleteSubProcesses(child);
      }
    }
  }

上面提到,在子流程已结束的情况下父流程的Token中SubProcessInstance字段会被清空,此时token.getSubProcessInstance()为null,因此永远也删除不掉已完成的子流程,而在删除父流程Token的时候即会因为子流程尚未删除,而子流程的SuperProcessToken字段却指向父流程Token而出现约束错误.

解决方案就是先删除已完成的子流程,然后再删除rootProcessInstance即可.

分享到:
评论
3 楼 liveam 2011-10-25  
好久不搞jbpm了~
2 楼 daifeng130 2008-12-16  
学习了,liveam什么时候把相关资料传到博客里啊,我们新手都等着学习呢
1 楼 spiritfrog 2008-04-15  
参考参考

相关推荐

    JBPM实践之:并发子流程的实现.doc

    发布这些流程定义的顺序并不影响并发子流程的实现。主流程用于协调整个并发过程,而子流程则代表并发执行的任务单元。 关键在于TaskNode的使用。TaskNode在流程图中表示一个任务节点,通常用于分配工作项给用户或...

    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...

    jbpm4流程提交及执行完整代码

    通过编写Java代码并与jbpm4引擎交互,可以实现流程的动态启动、任务分配、流程监控等功能,从而提高工作效率,规范业务流程。而上述提供的代码和文档,就是实现这一目标的基础。对于开发者来说,深入学习和理解这些...

    JBPM流程引擎资料

    包括了流程的开始(start)、状态节点(State)、决定节点(decision)、并发(concurrency)、结束(end)、任务(task)、子流程(sub-process)、自定义活动(custom)以及事件(Events)等。这些节点的处理方式,例如如何通过...

    jbpm 请假流程定义发布项目

    总结,jbpm请假流程定义发布项目是一个实用的学习和实践案例,涵盖了jbpm的基本使用、数据库集成、流程定义以及流程的监控与管理。通过对该项目的研究,开发者不仅可以了解jbpm的工作原理,还能掌握如何在实际环境中...

    jbpm工作流程的说明文档

    通过将数据管理与业务逻辑分离,jbpm能够专注于流程处理,从而提高了效率。在使用jbpm开发工作流时,通常需要以下步骤: 1. 选择并配置支持Hibernate的数据库,可使用ant脚本来生成数据库表结构。 2. 使用jPdl定义...

    JBPM5流程图设计规则

    - **子流程**:子流程应当有明确的入口和出口,且内部逻辑清晰。避免过深的嵌套,以保持流程图的层次结构。 - **多实例**:在使用多实例时,应定义触发多实例的条件,如数量、条件等,并确保所有实例的结束条件都...

    JBPM 流程 监控 的实现

    4. **集成第三方监控工具**:可以将JBPM与像Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)等监控工具集成,通过这些工具的强大分析能力来实现对JBPM流程的性能监控和故障排查。 5. **扩展jbpm-console...

    jbpm业务流程

    6. **集成能力**:jbpm能够与其他系统如CRM、ERP集成,实现跨系统的流程自动化。 7. **API和工具**:jbpm提供了丰富的API和开发工具,如jbpm Workbench,使得开发者能够方便地进行流程建模、部署和调试。 在...

    jbpm工作流程

    - **规则集成**:jbpm可以与Drools规则引擎结合,根据业务规则影响流程执行。 2. **jbpm架构**: - **jbpm执行引擎**:负责执行流程定义,管理流程实例、任务和变量。 - **持久化层**:使用Hibernate进行数据...

    JBPM Web流程设计器

    - **监控与跟踪**: JBPM提供了监控工具,可以追踪流程实例的状态,分析性能,帮助优化流程。 综上所述,【JBPM Web流程设计器】是一个强大且灵活的工具,它利用JavaScript和ExtJS的优势,为业务流程管理提供了直观...

    JBPM流程监控的实现过程

    本文将深入探讨如何通过手工编码方式在JBPM中实现流程监控,包括如何监控已发布流程的状态、流程实例的动态以及任务实例的执行情况。 #### 一、理解流程监控的核心需求 流程监控的核心目标在于实时掌握系统内流程...

    jbpm4.4流程图

    jbpm4.4是JBoss企业级业务流程管理(Business Process Management)套件的一个版本,它主要用于设计、执行和管理业务流程。在这个“jbpm4.4流程图”中,我们关注的是如何通过图形化的方式来理解和操作这些流程。 ...

    揭秘jbpm流程引擎内核设计思想及构架.doc

    jbpm流程引擎内核的设计思想和结构是jbpm流程引擎的核心部分,掌握了jbpm流程引擎内核的设计思想和结构,才能真正理解jbpm流程引擎的工作原理,并且能够更好地应用jbpm流程引擎来解决实际问题。 流程引擎内核的设计...

    JBPM流程引擎设计 工作流资料

    6. **监控与调试**:JBPM提供了强大的监控工具,如Kie Workbench,可以实时查看流程实例的状态、跟踪流程执行路径、分析性能指标。这对于优化流程和解决问题非常有帮助。 7. **服务整合**:JBPM支持服务组件的集成...

    jbpm流程自定义

    jbpm流程自定义 jbpm(Java Business Process Management)是一个开源的工作流和业务流程管理系统,它允许开发者设计、执行和管理业务流程。jbpm的核心功能包括工作流引擎、流程建模工具、流程实例管理和监控、任务...

    jbpm流程设计器

    4. **集成开发环境**:jbpm流程设计器可以与Eclipse等IDE集成,提供更丰富的开发辅助功能,如代码提示、自动完成、版本控制等,提高开发效率。 5. **元数据支持**:它允许用户为流程中的各个元素添加元数据,如任务...

    ExtJs+jbpm智能流程WEB设计器

    7. **集成能力**:jbpm可以轻松地与企业资源规划(ERP)、客户关系管理(CRM)或其他业务系统集成,实现全面的业务流程自动化。 8. **权限和角色管理**:在基于ExtJs的设计器中,可能还包括对用户和角色的管理,以...

    extjs jbpm4流程设计器

    6. **调试与执行**:集成jBPM4的执行环境,允许用户在设计环境中直接启动和调试流程实例。 7. **集成API**:与后端服务交互,实现流程实例的创建、查询、终止等操作。 8. **权限管理**:对流程设计的访问和修改...

Global site tag (gtag.js) - Google Analytics