JBPM - 流程实例XXX已断开连接

时间:2017-11-20 22:02:09

标签: jboss drools redhat jbpm drools-flow

我们正面临错误'流程实例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

之一中提出的

如果有人有任何线索,请提供帮助。

2 个答案:

答案 0 :(得分:1)

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

以下是其主要原因:

  

在JTA事务中使用(运行时管理器)Singleton策略   不建议使用(UserTransaction或CMT),因为有比赛   使用时的状态。这种竞争状况可能会导致   IllegalStateException,带有类似于“流程实例XXX”的消息   已断开连接。”

     

如果您使用的是Singleton Strategy,请确保将呼叫同步到JBPM。

解决方案

更好地使用每个流程运行时策略,以便JBPM引擎确保流程实例和会话之间的严格关系。会话将保持关联,直到流程实例的整个生命周期。这还将确保不会共享会话。我认为这是JBPM中可用的最先进的策略。

答案 1 :(得分:0)

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

为了遇到问题的人的利益:   - 只要您没有妥善管理交易,就会出现此问题

有些地方我们管理的交易不正确,不知何故JBPM内部的InternalKnowledgeRuntime设置为null。

顺便说一句,这个错误会从

中抛出
  • class: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 ...........
          }
        }
      }
    }