0

我们在项目中经常遇到错误“流程实例 XXX 已断开连接”并阻止任务操作。

我们使用SynchronizedTaskService进行任务操作:

代码片段如下:

final RuntimeManager runtimeManager = RuntimeEngineFacory.getRuntimeManager();
final RuntimeEngine engine = runtimeManager.getRuntimeEngine(EmptyContext.get());
SynchronizedTaskService taskService = (SynchronizedTaskService) engine.GetTaskService();

它是在 JBPM bugzilla https://bugzilla.redhat.com/show_bug.cgi?id=1161574之一中提出的

如果有人有任何线索,请帮忙。

4

2 回答 2

2

经过大量的研究和发现(包括不同的社区讨论),这个问题的解决方案几乎没有接近。

以下是造成这种情况的主要原因:

不建议将(运行时管理器)单例策略与 JTA 事务(UserTransaction 或 CMT)一起使用,因为使用此策略时存在竞争条件。这种竞争条件可能会导致 IllegalStateException,并带有类似于“进程实例 XXX 已断开连接”的消息。

如果您使用的是单例策略,请确保您正在同步您对 JBPM 的调用。

解决方案

最好使用Per Process Runtime Strategy,这样 JBPM 引擎将确保 Process Instance 和 Session 之间的严格关系。会话将保持关联,直到流程实例的整个生命周期。这也将确保 Session 不会被共享。这是我认为 JBPM 中最先进的策略。

于 2018-08-07T16:37:48.567 回答
0

最后我能够解决这个问题。

为了任何面临问题的人的利益: - 只要您没有正确管理交易,就会出现此问题

在某些地方,我们的事务管理不正确,并且不知何故 JBPM 在内部将 InternalKnowledgeRuntime 设置为 null。

顺便说一下,这个错误是从

  • 类:ProcessInstanceImpl
  • 方法:getProcess()

    public Process getProcess(){
       if(this.process == null){
         if(processXml == null){
           if(kruntime == null){
              throw new RuntimeException("Process instance " + id + "[" + processId + "] is disconnected. "));
          }else{
             other code ...........
          }
        }
      }
    }
    
于 2017-12-06T19:48:53.000 回答