Jbpm4实现会签

本文介绍了一个基于JBPM的工作流系统中实现会签功能的方法。通过在会签节点创建子任务,并根据不同情况触发退回流程,实现了串行和并行的工作流支持。详细探讨了在不同事务管理模式下创建子任务的最佳时机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说实话,之前对会签是没有具体概念的,查过jbpm3实现会签的例子,没有太大的体会。
这次有个系统一定要用到会签,用大家的话说,工作流要支持串行和并行;所以准备写一个demo实现一下简单的会签例子。

思路是这样的,流程有两个节点:申请和会签。在会签节点任务创建后,通过程序按会签人数创建出对应的会签子任务,对应到具体的审批人上。

这里有3种情况退回流程:1) 会签中某一个人不同意,就马上退回节点到申请;2) 全部会签结束后,如果有不同意的,则退回节点到申请;3) 全部会签结束后,超过半数不同意的,退回节点到申请。

关键点在于什么时候去创建子任务。
1)我试用了<on event="start">,这个时候task还没有创建出来。
2)使用了<assignment-handler>,可能成功,有两种不同的结果:
2.1) 如果jbpm的所有事务,都是有spring来管理,即jbpm.cfg.xml中是<spring-transaction-interceptor current="true" /><hibernate-session current="true" />这样的设置话,在AssignmentHandler的assign中,是可以创建出subtask的。这里注意不要申明式调用saveTask,让hibernate判读是否去保存。
2.2) 如果jbpm自己管理事务,即去掉current="true"属性,那么就无法保存创建出的subtask,因为在保存的时候,要用到parent task的historytask,而historytask这个时候还没有创建。
当然,针对2.2,我在想,是否可以使用另一个线程来处理创建subtask。类似于会签task全部创建结束后,再触发监听,去创建subtask。所以继续尝试下面的实现方法。
3) 使用<on event="timeout">好像也不行,至少我使用job后,调试遇到了一点问题。

突然回过头来一想,我想这么多方法,无非就是想要实现在恰当的时候去createtask,那么我在“申请”提交后,得到“会签”task,这个时候去create sub task,不就可以了?
不接管jbpm的事务,我还是搞不定。
接下来只能通过接管事务再来试试了。

接管事务,在AssignmentHandler的assign中实现subtask,测试通过。

demo暂时不上传了,如果确实有需要的,再说了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值