流口水与规则流组

Drools with Rule Flow Group

我是 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();

但是当我添加规则流组时,规则没有被执行。

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

添加了规则流组名称,但没有触发具有相同代码的规则。

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

kSession.getAgenda().getAgendaGroup("dog").setFocus();

试试这个方法..!!