jBPM是否具有用于异步工作流的固定大小的线程池?

时间:2017-06-02 15:15:46

标签: multithreading java-ee wildfly jbpm

我有jBPM 5.4,我发现无论我在standalone.xml的线程池大小上发生什么变化,jBPM对wildfly以异步方式通过大量工作流转储所需的时间都是相同的。

我担心jBPM如何做到这一点是通过一个固定的池大小。任何人都可以确认或否认这个吗?

2 个答案:

答案 0 :(得分:1)

免责声明:我最近没有尝试过,这是对旧项目的回忆(6.0即将出现,未使用,但已经讨论过),并通过查看文档来回忆我的记忆。此外,我不期待这里有“工作流程”的特殊内容,应该适用相同的原则。

jBPM的引擎是single-thread

  

我们选择使用一个线程实现逻辑多线程:包含逻辑多线程的jBPM进程只能在一个技术线程中执行。

对于v5中的异步任务,您必须自己处理线程,如本例中的doc所示:

public class MyServiceTaskHandler implements WorkItemHandler {

    public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
        new Thread(new Runnable() {
            public void run() {
                // Do the heavy lifting here ...
            }
        }).start();
    }

    public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {

    }
}

我的理解是,如果您不这样做,您的异步任务只是可能异步。如果你这样做,你就无法控制并发性。这是一个可怕的例子,他们至少应该展示如何使用ExecutorService或合理的东西。

无论如何,版本6仍然有一个单线程核心引擎,但是offers its own executor for async workloads

  

在版本6中,jBPM引入了一个名为jbpm executor的新组件,它为异步执行提供了相当高级的功能。它为后台执行命令提供了通用环境。

可以使用系统属性org.kie.executor.pool.size配置其内部线程池(在上面链接的页面底部提到)。

答案 1 :(得分:0)

这已在jBPM 6中修复:见https://issues.jboss.org/browse/JBPM-4275