Jboss jBPM中的真正并行处理

Jboss jBPM中的真正并行处理,jboss,workflow,jbpm,Jboss,Workflow,Jbpm,将处理分岔到多个任务 ... ... ... jBPM解决方案应该并行执行任务,而不是按顺序执行默认的执行方式 我已经阅读了jBPM文档,其中建议在节点/任务上使用async=“true”,但是不清楚应该如何具体实现。其中一个建议是将其保存在数据库中,并将任务发送到JMS队列,而不是处理自定义多线程管理。然而,我发现jBPM并没有一个简单的解决方案,这太奇怪了 我希望有人能在这里证明我错了,并向我展示jBPM 3.2.6的简单而优雅的解决方案[因为这是红帽支持的最新版本] 谢谢。您可能已经注


将处理分岔到多个任务

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

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

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


谢谢。

您可能已经注意到,jBPM没有用于流程实例数据的并发控制。例如,流程变量在访问时不能被锁定,也不能被引擎隐式锁定。因此,真正的平行处决将导致种族状况

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


正如您所描述的,您可以通过将并行工作负载从流程中分离出来来解决此限制。您还可以通过创建java活动并手动生成线程将其保留在流程中,尽管这是非常不鼓励的。对于初学者,您将阻止正在执行实例的jBPM线程,并且您将无法监视并行工作负载的进度。

正如您可能已经注意到的,jBPM没有针对流程实例数据的并发控制。例如,流程变量在访问时不能被锁定,也不能被引擎隐式锁定。因此,真正的平行处决将导致种族状况

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


正如您所描述的,您可以通过将并行工作负载从流程中分离出来来解决此限制。您还可以通过创建java活动并手动生成线程将其保留在流程中,尽管这是非常不鼓励的。对于初学者,您将阻止执行实例的jBPM线程,并且您将无法监视并行工作负载的进度。

在我发布此问题后,我们实际上删除了jBPM。主要是因为JBOSS社区。如果有人刚开始选择BPM,我会推荐,或者一个非常简单的方法是使用Spring与Spring对话API的集成/在我发布这个问题后,我们实际上放弃了jBPM。主要是因为JBOSS社区。如果有人刚开始选择BPM,我会推荐,或者一个非常简单的方法是使用Spring与Spring对话API的集成/安纳托利
need to achieve:
<fork name="customFork" >
  <transition to="task1" />
  <transition to="task2" />        
  <transition to="task3" />
       ... ... ...
  <transition to="taskN" />         
</fork>