2017-02-12 60 views
0

我从Jbpm的过程执行业务规则只执行一次,规则很简单:业务规则的jBPM流程

package com.test.flow; 

rule "sample" 
    ruleflow-group "test" 
    when 

    then 
     System.out.println("Hello World"); 
end 

但是,我不无原因,这一规则只执行一次,实例中,我运行了一个新的进程实例,并在jbpm控制台中打印“Hello World”,但是当我运行该进程的第二个实例时不再打印“Hello World”,有人能帮助我吗?或者说为什么会发生这种情况?

Screen Jbpm console

+0

是否使用同一个会话的所有流程实例?如果您为每个实例使用单独的会话会发生什么? –

+0

感谢您的回复,我不舒服,我正在使用Java Remote API,并且每次拨打电话时,我都会创建一个'RuntimeEngine engine = RemoteRuntimeEngineFactory.newRestBuilder()。addUrl(baseUrl)...'以获得一个新的KieSession 'engine.getKieSession()'并启动进程,如果我从jbpm-console web执行该操作,则运行一个新实例会发生相同的情况。 –

+0

@EstebanAliverti非常感谢!我找到了解决方案,你是对的,问题是会话,但不是在我的代码,否则在jbpm项目的配置,我没有配置“项目编辑器”“部署描述符”我改变了值“运行时策略“对于”PER_REQUEST“或”PER_PROCESS_INSTANCE“是”SINGLETON“,我解决了这个问题。 非常感谢! –

回答

0

对于这种“你好,世界”的规则,使用规则流组是最有可能只是造成混乱。你是否控制这个组被激活?怎么样? - 指示省略此规则属性。

一个空的左边的规则只会在会话中执行一次(正如Esteban指出的那样)。

如果你想为每个插入的事实触发一次规则,请使用

rule "new fact" 
when 
    Object() 
then 
    System.out.println("new fact inserted"); 
end 
+0

Hi @laune,非常感谢你的回复和提示,是的,你和Esteban是对的,我的请求是在一个唯一的会话中运行,因为jbpm项目设置为“SINGLETON”我将其更改为“PER_PROCESS_INSTANCE”,而我解决了我的问题。非常感谢双方的回复。 –