我们正面临错误'流程实例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
之一中提出的如果有人有任何线索,请提供帮助。
答案 0 :(得分:1)
经过大量研究和发现(包括不同的社区讨论),该问题的解决方案几乎没有。
以下是其主要原因:
在JTA事务中使用(运行时管理器)Singleton策略 不建议使用(UserTransaction或CMT),因为有比赛 使用时的状态。这种竞争状况可能会导致 IllegalStateException,带有类似于“流程实例XXX”的消息 已断开连接。”
如果您使用的是Singleton Strategy,请确保将呼叫同步到JBPM。
解决方案
更好地使用每个流程运行时策略,以便JBPM引擎确保流程实例和会话之间的严格关系。会话将保持关联,直到流程实例的整个生命周期。这还将确保不会共享会话。我认为这是JBPM中可用的最先进的策略。
答案 1 :(得分:0)
最后,我能够解决这个问题。
为了遇到问题的人的利益: - 只要您没有妥善管理交易,就会出现此问题
有些地方我们管理的交易不正确,不知何故JBPM内部的InternalKnowledgeRuntime设置为null。
顺便说一句,这个错误会从
中抛出方法: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 ...........
}
}
}
}