Search code examples
drools

Drools with Rule Flow Group


I am new to Drools and started with basic example. I have very simple rule as below and it works fine.

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

But when I added ruleflow-group, rule is not getting executed.

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

with the rule flow group name added, with the same code rule is not getting fired.


Solution

  • When you use ruleflowGroup/agendaGroup we have to set focus on custom ruleflowgroup. In your code add below line:

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

    Try with this approach..!!