`
lydawen
  • 浏览: 471643 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jbpm4.3不删除子流程"bug"解决

 
阅读更多

jbpm4.3一个著名的bug https://jira.jboss.org/browse/JBPM-2856 即:主流程中包含子流程,当子流程结束后,子流程相关的数据不会删除;主流程结束时,这部分数据也不会被删除,影响的表有3个:JBPM4_EXECUTION,JBPM4_VARIABLE ,JBPM4_LOB,这三个表中,最让人忌讳的莫过于JBPM4_LOB表了,它保存着JBPM中的流程定义(少部分数据,毕竟没事也不会老改流程)以及流程运行过程中存储的变量信息,即使用setVariable来保存的java对象都将序列化保存到该表中,如果子流程多且业务大,这个表在这样的BUG下,一段时间就可以到几十G甚至更大,像我们的应用,每天有N多的流程启动,一般两个月这个表就能到达60~80G,给数据库维护带来的非常大的麻烦。 

 

回到正题,因为jbpm4.4与jbpm4.3除有个位数的类换了包名,其余完全一样(最主要是数据库),所以直接升级到jbpm4.4,同时我们的代码侵入了StartActivity,EndActivity,以及TaskActivity 三个类的public void execute(ActivityExecution execution) {},其中因为StartActivity及TaskActivity不会删除数据,没出问题。在EndActivity侵入中,我们的业务代码会先执行个查询,再执行删除,这样在有子流程结束时,我们的业务代码执行的查询会导致hibernate执行flush操作,提交sql到数据库。业务代码执行完毕返回到jbpm中时,导致出错

 

 

2012-8-24 18:00:35 org.hibernate.event.def.DefaultDeleteEventListener deleteTransientEntity

信息: handling transient entity in delete processing

 

 

2012-8-21 18:29:39 org.hibernate.event.def.AbstractFlushingEventListener performExecutions

严重: Could not synchronize database state with session

org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbpm.pvm.internal.model.ExecutionImpl#2620040]

 

很显然是因为业务代码的查询导致了hibernate的flush操作,并最终导致hibernate 出现数据库与session同步错误并最终流程异常。因为我们的业务代码执行的操作是查询出一个实体,再删除它。于是在这里修改为直接执行删除语句,这样就不会导致flush了。修改完毕,测试,成功!

 

以前一个小流程走完,在BPM4_EXECUTION,JBPM4_VARIABLE ,JBPM4_LOB将分别流下2,27,18 条数据(因为我们流程中保存的流程数据变量非常多),这些数据全都是没用的数据,现在修改后,跑完流程,3个表最终记录没有变化,流程结束就全部把对应流程相关的数据都删除完了。

 

做完这一步,接下来就只要把上面三个表中之前的脏数据删除一下就行了,先删除JBPM4_LOB,再删除JBPM4_VARIABLE,最后删除JBPM4_EXECUTION。

 

 

经过测试发现,流程如果人工不干预,还是线程问题,并最终导致事务不一致,流程失败。当然这与对jbpm4.4代码侵入,以及事务没隔离导致,最终只好将此事暂搁。

分享到:
评论
2 楼 lydawen 2013-06-26  
-惜帅- 写道
请问如何侵入代码呢?如何删除 JBPM4_VARIABLE ,JBPM4_LOB表的记录?能放上代码吗


请见https://jira.jboss.org/browse/JBPM-2856  上面有补丁,如果是jbpm4.3 ,打上这个补丁,新的流程都OK的。
如果是老的数据想清理,我这有代码,原理非常简单。
就是找一段时间前,例如3个月前的流程,这样的流程上从业务上来说肯定已经结束或者没意义了,尤其是状态为"ended"的,这样的可以认为是垃圾数据,用jbpm的api把流程实例取出来,并使用jbpm的api级联结束它就行了,对应的垃圾数据也就删除了。
1 楼 -惜帅- 2013-06-26  
请问如何侵入代码呢?如何删除 JBPM4_VARIABLE ,JBPM4_LOB表的记录?能放上代码吗

相关推荐

    SSH+JBPM4.3的整合 JBPM4.3

    SSH+JBPM4.3的整合是企业级应用开发中的一种常见组合,SSH指的是Spring、Struts和Hibernate这三个开源框架的集成,而JBPM4.3则是一个强大的工作流管理系统,用于实现业务流程自动化。这篇内容将深入探讨这两个技术...

    jbpm4.3工作流程管理例子

    jbpm4.3是JBoss Business Process Management (BPM) Suite的一个版本,它是一个开源的企业级BPM平台,用于设计、执行和管理业务流程。在这个"jbpm4.3工作流程管理例子"中,我们将深入探讨jbpm4.3的核心特性和如何...

    开源工具 jbpm4.3

    总结来说,jbpm4.3是一款强大而灵活的开源工作流解决方案,它通过图形化设计、内置工作流引擎、业务规则支持以及丰富的扩展能力,为企业和开发者提供了全面的业务流程管理工具。无论是在中小型企业还是大型组织中,...

    JBPM4.3培训学习视频, 包含了JBPM4.3的eclipse插件

    【JBPM4.3培训学习视频】是一套针对初学者设计的教程,旨在帮助学习者掌握JBPM4.3这一企业级工作流管理系统的核心概念和技术。JBPM是Java Business Process Management的缩写,是一个开源的工作流和业务流程管理平台...

    jbpm4.3问题解决

    在解决jbpm4.3问题时,常见的问题包括但不限于: 1. **流程定义问题**:流程定义XML文件(.bpmn2或.bpmn)可能存在语法错误或逻辑问题,导致流程无法启动或执行。 2. **数据问题**:数据库中的流程实例、任务和变量...

    jbpm4.3视频教程+代码

    1. **Jbpm介绍**:介绍Jbpm的起源、目标和在业务流程管理(BPM)领域的地位,解释为何选择Jbpm4.3作为开发工具。 2. **安装与配置**:详述如何在开发环境中安装Jbpm4.3,包括所需的Java环境、数据库设置以及Eclipse ...

    jbpm4.3与spring整合

    ### jbpm4.3与Spring框架的整合指南 在企业级应用开发中,流程管理引擎JBPM(JBoss Business Process Management)与Spring框架的结合使用是常见的一种技术方案。JBPM是一个灵活、强大的业务流程管理工具,而Spring...

    jBPM4.3.rar_JBPM4.3

    jbPM 4.3 使用Drools Flow作为其流程建模工具,提供图形化的流程编辑器,支持拖放操作,可创建复杂的业务流程图。流程图包含各种元素,如任务(Tasks)、决策(Decisions)、网关(Gateways)和事件(Events)。 **...

    jbpm jbpm4 jbpm4.3 工作流

    9. **社区支持**:jbpm4.3拥有活跃的社区支持,用户可以在论坛、邮件列表等平台上获取帮助,分享经验和解决方案。 在《jbpm jbpm4 jbpm4.3 工作流》这本书中,作者可能会详细讲解上述知识点,并通过实例演示如何...

    jbpm jbpm4.3.jar

    jbpm jbpm4.3.jar DDDDDDDD

    jbpm4.3环境搭建

    1. **jbpm4.3**:jbpm(Java Business Process Management)是一个开源的工作流管理系统,版本4.3是其历史版本之一,用于业务流程自动化,支持BPMN2.0标准。 2. **集成环境**:jbpm4.3需要与应用服务器如Tomcat或...

    JBPM4.3-例子(简单使用)

    在JBPM4.3版本中,它提供了一系列增强的功能和优化,使得开发者能够更高效地设计、执行和监控复杂的业务流程。在这个例子中,我们将深入探讨JBPM4.3的简单使用,特别是通过一个名为“leave_web”的Web应用程序来展示...

    jbpm4.3、ssh环境搭建

    - 注意,jBPM4.3不支持ehcache,需使用其自带的Hibernate包。 3. **主要配置文件**: - **jbpm.hibernate.cfg.xml**:这是jBPM与Hibernate集成的核心配置文件。配置了多个映射文件,如`jbpm.repository.hbm.xml`...

    jbpm4.3 修复 fork join bug

    NULL 博文链接:https://sunlujing.iteye.com/blog/914429

    jbpm4.3 - demo

    7. **流程模拟和调试**:jbpm4.3提供了流程模拟功能,允许开发者在不实际执行流程的情况下预览流程行为。同时,调试工具帮助开发者找出流程执行过程中的问题。 8. **表单管理**:jbpm4.3可以通过MVEL或EL表达式定义...

    jbpm4.3所需jar包

    **jbpm4.3所需jar包** JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于业务流程的建模、执行和管理。在JBPM 4.3版本中,为了实现完整功能,需要一系列的jar包来支持其运行环境。...

    JBPM4.3使用说明.doc

    JBPM4.3 是一个基于工作流程管理的系统,旨在帮助用户更好地管理和自动化业务流程。下面是 JBPM4.3 的使用说明和相关知识点。 安装和整合 JBPM4.3 的安装包结构目录包括 doc、Example、Install、lib、Migration、...

    jbpm4.3 请假流程实例示例

    jbpm4.3是JBoss Business Process Management (BPM) Suite的一个版本,它是一个开源的企业级BPM平台,用于设计、执行和管理业务流程。在这个"jbpm4.3 请假流程实例示例"中,我们将深入探讨如何利用jbpm4.3构建一个...

    jbpm4.3 中文文档

    jbpm4.3是JBoss企业级业务流程管理(Business Process Management)平台的一个版本,它提供了全面的工作流和业务流程自动化解决方案。这个中文文档集合旨在帮助中国开发者和IT专业人士更好地理解和使用jbpm4.3的功能...

Global site tag (gtag.js) - Google Analytics