让我直接来看看用例。
我在我的过程中有很多工作项目说A,B,C
。它以A--->B--->C
顺序开始。
就我而言,B
是对3rd party
网络服务的调用。 C
只有在B
成功的情况下才能处理。如果对Web服务的调用失败,系统应在5 min
之后重试。重试次数仅限于3
。
如何使用Jbpm6
实现这一目标。
我从doc中理解的一些选项是,
1)我可以使用工作项处理程序。在工作项目内部,我将启动另一个将执行重试的线程,最后调用completeWrokItem()
方法。但在这种情况下,我的进程引擎线程将不必要地等待completeWrokItem()
调用。 2)我可以使用command
进行重试。但是如果我调用command
它将在另一个线程中执行,并且进程线程将执行C
。这不是一种理想的方式
我如何创建一个进程,以便B
将在后端执行并通知引擎它可以继续执行C
?
请指教。
提前致谢。
如果我的问题不够明确,请发表评论。
你的问题并不完全清楚;但是,我提供了一个答案,希望能提供一些清晰度:
public ExecutionResults execute(CommandContext ctx) throws Exception {
// Set results if exist. Otherwise, return empty ExecutionResults.
ExecutionResults results = new ExecutionResults();
// This would match the name of an output parameter for the work item.
// results.setData("result", "result data");
logger.info("Command finished execution: " + this.getClass());
logger.debug("Results of executing command: ", results);
return results;
}
`在节点B之后添加XOR网关,向节点B添加脚本并设置web服务的状态和retry_count(如果成功,status_b = true;如果失败,status_b = false和retry_count ++),
如果retry_count> = 3或status_b == true,XOR转到C,否则再次转到B.