我们正在开发一个应用程序,用户可以在其中设计自己的工作流(在webui中),然后提交执行。我们选择jbpm作为我们的执行和工作流管理器引擎。用户提交的工作流将转换为jbpm(bpmn2)工作流。我们正在使用版本6.1.0.final。由于这是一个多用户应用程序,因此支持并发工作流执行是一个主要需求。为了方便起见,我们正在storm之上构建jbpm,例如,在这里,每个提交的工作流(由喷口提供)将在一个单独的bolt中执行。
在再次阅读文档之后,我们发现使用每个流程示例来指示运行时管理器在kie会话和流程示例之间保持严格的关系是有意义的。尽管在看了更多的示例和代码片段之后,我们对获取会话示例的正确方法感到困惑。到目前为止,我们已经看到了两种方法:
1.
# Get a new KieBase and KieSession for every workflow submitted.
KieHelper kieHelper = new KieHelper();
KieBase kieBase = kieHelper
.addResource(ResourceFactory.newClassPathResource("MyProcess.bpmn"))
.build();
KieSession ksessionFromBase = kbase.newKieSession();
# using same manager instance for all workflows; get a new session
manager = (RuntimeManager) applicationContext.getBean("runtimeManager"); # per process instance runtime manager
RuntimeEngine engine = manager.getRuntimeEngine(ProcessInstanceIdContext.get());
KieSession ksessionFromEngine = engine.getKieSession();
在第一种方法中,我们需要为提交的每个工作流创建新的kiebase和kiesession。此外,这种方法不使用运行时环境、运行时管理器或运行时引擎。在第二种方法中,我们创建一个每进程运行时管理器,并为每个提交的工作流从中获取一个新会话。但是使用这种方法,我们不知道如何在运行时添加进程定义。
此外,文档倾向于使用运行时管理器,我们不知道不使用该方法的优点/缺点以及添加流程定义的问题。
如有任何澄清,将不胜感激。
2条答案
按热度按时间kxeu7u2r1#
推荐使用运行时管理器,因为它设置了处理业务流程可能需要的所有服务。因此,如文档所述,使用运行时管理器。我想建议您看看jbpm kie services项目,它基本上是提供jbpm工具的层,您应该考虑将其作为如何创建自己的应用程序的蓝图,因为您为应用程序描述的目标与jbpm控制台ng提供的目标几乎相同。
当做
rkttyhzu2#
最近我也遇到了同样的问题,每次添加新的流程定义时,我都会使用knowledgebuilder方法从生成器中创建一个新的kiebase:
样品:
注意:这只是一个示例,特别是与同步相关的:)