For all those wondering how agenda groups work. I just commited the
integration test that shows agenda groups and autofocus working. this is
a much more powerful way to do execution flow control. This will be part
of the beta 2 release later today.
public void testAgendaGroups() throws Exception {
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader(
getClass().getResourceAsStream( "test_AgendaGroups.drl" ) ) );
Package pkg = builder.getPackage();
RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
WorkingMemory workingMemory = ruleBase.newWorkingMemory();
List list = new ArrayList();
workingMemory.setGlobal( "list", list );
Cheese brie = new Cheese( "brie", 12 );
workingMemory.assertObject( brie );
workingMemory.fireAllRules();
assertEquals( 7, list.size() );
assertEquals( "group3", list.get( 0 ) );
assertEquals( "group4", list.get( 1 ) );
assertEquals( "group3", list.get( 2 ) );
assertEquals( "MAIN", list.get( 3 ) );
assertEquals( "group1", list.get( 4 ) );
assertEquals( "group1", list.get( 5 ) );
assertEquals( "MAIN", list.get( 6 ) );
}
-----------------------------------------
package org.drools.test;
import org.drools.Cheese;
global java.util.List list;
rule "test MAIN 1"
salience 10
when
Cheese( )
then
list.add( "MAIN" );
drools.setFocus( "group1" );
end
rule "test MAIN 2"
when
Cheese( )
then
list.add( "MAIN" );
end
rule "test group1 1"
agenda-group "group1"
when
Cheese( )
then
list.add( "group1" );
end
rule "test group1 2"
agenda-group "group1"
when
Cheese( )
then
list.add( "group1" );
end
rule "test group2"
agenda-group "group2"
when
Cheese( )
then
list.add( "group2" );
end
rule "test group3 1"
salience 5
agenda-group "group3"
auto-focus true
when
Cheese( )
then
list.add( "group3" );
drools.setFocus( "group4" );
end
rule "test group3 2"
agenda-group "group3"
when
Cheese( )
then
list.add( "group3" );
end
rule "test group4"
agenda-group "group4"
when
Cheese( )
then
list.add( "group4" );
end