I'm not quite sure howDrools processes and partitions Agenda based on
agenda-groups as the documentation conflicts with a real example. As per the
documentation in Drools site and Michael Bali's book, page 102
"Drools maintains a stack of Agenda groups. Whenever the focus is set to
true, the active agenda-group is automatically changed to rule's agenda
group. Drools maintains a stack of agenda groups. Whenever the focus is set
to a different group, Drools adds this group to a stack. When there are no
rules to fire from the agenda group, Drools pops from the stack and sets the
agenda group to the next one."
However, when I run a simple example with two rules having agenda groups
set, none of the rules are fired unless the agenda-group is explicitly set
to runtime. Based on the above example, I would expect Drools Agenda to run
all rules under "MAIN" and since there are none, it should pop it out and
point to the next available group and so on.
Am I missing something here?
package com.sample
import com.sample.DroolsTest.Message;
rule "Hello World"
agenda-group "group1" # comment this and rule fires
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 "GoodBye"
agenda-group "group 2" # comment this and rule fires
when
Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( myMessage );
end
DroolsTest:-
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
ksession.insert(message);
// ksession.getAgenda().getAgendaGroup("group1").setFocus(); // enable
this only group1 is fired, not // group2
ksession.fireAllRules();
--
View this message in context:
http://n3.nabble.com/Understanding-agenda-group-doesn-t-work-as-documente...
Sent from the Drools - User mailing list archive at
Nabble.com.