我的camunda进程有问题,看起来像this。 此过程在步骤SetId和CreateObjectsForId(都是JavaDelegates)中以非确定性方式无休止地循环。
我正在使用camunda 7.5。
我有一些BaseJavaDelegate实现如下:
@Override
public void execute( DelegateExecution aExecution ) throws Exception
{
logBefore( aExecution );
try
{
executeInTry( aExecution );
}
catch( Throwable aEx )
{
aEx.printStackTrace();
throw new BpmnError( "GENERIC_ERROR_CODE", aEx.getMessage() );
}
logAfter( aExecution );
}
从示例执行中记录:
01.06.2017 15:32:53,902;pool-6-thread-2:...wf.base.BaseJavaDelegate;callExecuteInTry;DEBUG;
Starting task:
ProcessDefinitionId: ...Process1:1:1
ProcessInstanceId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ExecutionId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ActivityId: SetId
TransactionId: null
...
01.06.2017 15:32:54,664;pool-6-thread-2:...wf.base.BaseJavaDelegate;callExecuteInTry;DEBUG;
Ended task:
ProcessDefinitionId: ...Process1:1:1
ProcessInstanceId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ExecutionId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ActivityId: SetId
TransactionId: null
...
Starting task:
ProcessDefinitionId: ...Process1:1:1
ProcessInstanceId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ExecutionId: d161958b-46ce-11e7-8483-005056b37c6b
ActivityId: CreateObjectsForId
TransactionId: null
...
01.06.2017 15:37:53,886;pool-6-thread-3:...wf.base.BaseJavaDelegate;callExecuteInTry;DEBUG;
Starting task:
ProcessDefinitionId: ...Process1:1:1
ProcessInstanceId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ExecutionId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ActivityId: SetId
TransactionId: null
...
01.06.2017 15:37:53,893;pool-6-thread-3:...wf.base.BaseJavaDelegate;callExecuteInTry;DEBUG;
Ended task:
ProcessDefinitionId: ...Process1:1:1
ProcessInstanceId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ExecutionId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ActivityId: SetId
TransactionId: null
...
Starting task:
ProcessDefinitionId: ...Process1:1:1
ProcessInstanceId: ae2ecf43-46ce-11e7-8483-005056b37c6b
ExecutionId: d161958b-46ce-11e7-8483-005056b37c6b
ActivityId: CreateObjectsForId
TransactionId: null
从日志中可以看到SetId第二次启动,而CreateObjectsForId从未完成。 执行期间不会抛出异常。 前面的步骤也都在同一个线程中执行,但是当循环开始时,进程开始使用另一个线程/两个线程。
我试图通过设计像this这样的流程来绕过这个问题。 这次SetId步骤的实现知道它是第二次进入,并且独占门进程应该更进一步。
不幸的是,这个过程仍然循环!我的代码也不例外。没有OptimisticLockException。 camunda没有任何其他例外。 我不知道还有什么可以导致进程像这样循环。
答案 0 :(得分:0)
也许我错过了什么,但看起来你在这里有递归代码。 您的委托执行,然后执行并在executeInTry()中再次执行....冲洗并重复。
我错过了什么吗? 格雷格
答案 1 :(得分:0)
我找到了解决问题的方法。 我一直在运行嵌入式camunda引擎。
有一次,我决定尝试在应用服务器上运行相同的代码(在我的情况下是wildfly)。现在我在日志中得到了明确的消息,我的交易我们花了太长时间。 Here您可以找到此问题的解决方案(事务超时和作业执行程序lockTimeInMillis)