0
need to achieve:


将处理分叉到多个任务

<fork name="customFork" >
  <transition to="task1" />
  <transition to="task2" />        
  <transition to="task3" />
       ... ... ...
  <transition to="taskN" />         
</fork>

jBPM 解决方案应该并行执行任务,而不是默认的顺序执行任务。

我已经阅读了建议async="true"在节点/任务上使用的 jBPM 文档,但是不清楚应该如何实现它。建议之一是将其保存在数据库中,并将任务发送到 JMS 队列,而不是处理自定义多线程管理。但是我发现 jBPM 没有一个简单的解决方案太奇怪了。

我希望有人在这里证明我错了,并向我展示使用 jBPM 3.2.6 的简单而优雅的解决方案[因为这是 Red Hat 支持的最新版本]

谢谢你。

4

1 回答 1

4

您可能已经注意到,jBPM 对流程实例数据没有并发控制。例如,流程变量在访问时不能被锁定,它们也不会被引擎隐式锁定。因此,真正的并行执行会导致竞争条件。

当涉及到 BPM 引擎时,这是一种常见的设计权衡。您可以通过每个流程实例的单个执行线程避免所有并发控制陷阱(死锁、竞争条件、饥饿、一致性问题......)。业务流程应该是长时间运行的,但也应该在大部分时间等待某些事件发生,并且它们本身不应该是计算密集型的。因此,在执行单个流程实例时,CPU 绝不应该成为瓶颈。

You can work around this limitation by splitting parallel workload out of the process as you described. You can also keep it inside the process by creating a java activity and manually spawns threads, though this is highly discouraged. For starters, you'll block the jBPM thread that's executing the instance and you won't be able to monitor progress of your parallelised workload.

于 2010-11-17T15:41:55.250 回答