我有jBPM 5.4,我发现无论我在standalone.xml的线程池大小上发生什么变化,jBPM对wildfly以异步方式通过大量工作流转储所需的时间都是相同的。
我担心jBPM如何做到这一点是通过一个固定的池大小。任何人都可以确认或否认这个吗?
答案 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