初试JBPM,异常如下org.jbpm.JbpmException: task node does not have leaving transition 'r

本文分享了一个关于JBPM工作流引擎中任务流转异常的问题排查过程。问题源于流程定义XML中的transition名称与数据库中记录不一致导致的任务结束操作失败。通过调整数据库中jbpm_taskinstance表的状态,并确保transition名称的一致性,最终解决了问题。
org.jbpm.JbpmException: task node does not have leaving transition 'reject'
原因:没有找到名字是'reject'的transition.但是processdefinition.xml文件里面确实有这个transition的,
<transition name="reject" to="d1">
<action class="com.xxx.xxx.xxx" />
</transition>

为什么呢?
因为我再第一次编写processdefinition.xml的时候我的这个transition是中文的name="拒绝",并且我已经吧这个工作流发布到数据库中了,因为我查数据库表:jbpm_transition 发现里面的name是以前的"拒绝",难怪会提示找不到transition 'reject',因为数据库中根本就没有name=reject的transition
所以我就用新的processdefinition.xml重新发布了一次工作流到数据库中.再次运行,还是报同样的错.......
这次我再看代码,发现处理任务的代码:

List<TaskInstance> list = context.getTaskList(actorId);
for(TaskInstance ti : list ){
if(pas){
ti.end("approve");
}else{
ti.end("reject");
}
}


我觉得问题再List<TaskInstance> list = context.getTaskList(actorId);
这一句,我查数据库,发现再jbpm_taskinstance 表中分配给actorId的,并且isopen='1'的有4条,这是因为我上次报错的程序运行了4次,每次流程都停留再这个节点没有走下去.因为有多条,所以找出来的第一条对应的任务就有可能没有对应的name='reject'的transition,这里有是循环,每条记录都会来一次ti.end("approve")或者ti.end("reject"); 所以会报原来一样的错.把jbpm_taskinstance 表中,所有分配给我要找的actorId记录的isopen都改为'0'.
再次运行,正确,问题解决.

PS:我也是第一次运行JBPM发现这个错,再网上找答案,只看到问题,没看到答案,所以把自己的解决方法写出来.希望对其它人有帮助.
java.lang.IllegalArgumentException: id to load is required for loading at org.hibernate.event.spi.LoadEvent.<init>(LoadEvent.java:93) at org.hibernate.event.spi.LoadEvent.<init>(LoadEvent.java:63) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.doLoad(SessionImpl.java:2878) at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2855) at org.hibernate.internal.SessionImpl.get(SessionImpl.java:1093) at com.supcon.orchid.orm.dao.hibernate.BaseDaoImpl.get(BaseDaoImpl.java:112) at com.supcon.orchid.foundation.internal.services.UserServiceImpl.load(UserServiceImpl.java:708) at com.supcon.orchid.foundation.internal.services.UserServiceImpl.load(UserServiceImpl.java:54) at com.supcon.orchid.foundation.internal.services.UserServiceImpl$$FastClassBySpringCGLIB$$360bd70e.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:295) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688) at com.supcon.orchid.foundation.internal.services.UserServiceImpl$$EnhancerBySpringCGLIB$$1413c4a8.load(<generated>) at org.jbpm.pvm.internal.history.model.HistoryAutomaticInstanceImpl.<init>(HistoryAutomaticInstanceImpl.java:68) at org.jbpm.pvm.internal.history.events.AutomaticEnd.createHistoryActivityInstance(AutomaticEnd.java:39) at org.jbpm.pvm.internal.history.events.ActivityStart.process(ActivityStart.java:63) at org.jbpm.pvm.internal.history.HistorySessionImpl.process(HistorySessionImpl.java:32) at org.jbpm.pvm.internal.history.HistoryEvent.fire(HistoryEvent.java:67) at org.jbpm.pvm.internal.model.ExecutionImpl.historyAutomatic(ExecutionImpl.java:1386) at com.supcon.orchid.workflow.engine.internal.activity.StartActivity.execute(StartActivity.java:42) at org.jbpm.pvm.internal.model.op.ExecuteActivity.perform(ExecuteActivity.java:64) at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:896) at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperation(ExecutionImpl.java:856) at org.jbpm.pvm.internal.model.ExecutionImpl.start(ExecutionImpl.java:401) at org.jbpm.pvm.internal.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:101) at org.jbpm.pvm.internal.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:39) at org.jbpm.pvm.internal.svc.DefaultCommandService.execute(DefaultCommandService.java:43) at org.jbpm.pvm.internal.tx.SpringCommandCallback.doInTransaction(SpringCommandCallback.java:46) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140) at org.jbpm.pvm.internal.tx.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:51) at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:55) at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:42) at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:58) at org.jbpm.pvm.internal.svc.ExecutionServiceImpl.startProcessInstanceById(ExecutionServiceImpl.java:45) at com.supcon.orchid.workflow.engine.services.impl.InstanceServiceImpl.start(InstanceServiceImpl.java:101) at com.supcon.orchid.workflow.engine.services.impl.InstanceServiceImpl$$FastClassBySpringCGLIB$$54065527.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
最新发布
08-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值