流氓与规则流组

时间:2017-06-08 14:49:49

标签: drools

我是Drools的新手,从基本的例子开始。我有如下非常简单的规则,它工作正常。

rule "One"
    when
        m : Message( status == Message.HELLO, myMessage : message )
    then
        System.out.println( myMessage );
        m.setMessage( "Goodbye cruel world" );
        m.setStatus( Message.GOODBYE );
        update( m );
end

rule "Two"
    when
        Message( status == Message.GOODBYE, myMessage : message )
    then
        System.out.println( myMessage );
end


KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");

Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);    
kSession.insert(message);    
int rulesFired = kSession.fireAllRules();

但是当我添加ruleflow-group时,规则没有被执行。

rule "One"
  ruleflow-group "dog"
    when
        m : Message( status == Message.HELLO, myMessage : message )
    then
        System.out.println( myMessage );
        m.setMessage( "Goodbye cruel world" );
        m.setStatus( Message.GOODBYE );
        update( m );
end

rule "Two"
  ruleflow-group "dog"
    when
        Message( status == Message.GOODBYE, myMessage : message )
    then
        System.out.println( myMessage );
end

添加了规则流组名称,相同的代码规则不会被触发。

1 个答案:

答案 0 :(得分:1)

当您使用ruleflowGroup / agendaGroup时,我们必须将焦点设置在自定义规则流组上。在您的代码中添加以下行:

kSession.getAgenda()getAgendaGroup("狗&#34)。。的setFocus();

尝试这种方法.. !!