リファレンス activation-group

各ルールにactivation-groupというグループ名を宣言できます。同名が宣言されたルールの間で実行時に何が行われるかというと、ほとんどXORです。2つのルールで同名のグループ名を宣言して実行し、まず片方がマッチングして処理されるとします。次にもう片方が条件がマッチしてたとしてもactivation-group宣言されていると、そのもう片方のルールはキャンセルされて何も実行されません。

前回の例でいうと

rule "right1"
    salience 10
    agenda-group "right"
    activation-group "group-1"
    auto-focus true
    when
        $p : Person()
    then     
        System.out.println("右通行1");
        drools.setFocus("left");
end

rule "right2"
    agenda-group "right"
    activation-group "group-1"
    when
    	$p : Person()
    then     
        System.out.println("右通行2");
		
end

右通行1,2をコンソール出力してたのですが、上記のように"group-1"という名前でactivation-group宣言をすると、"右通行1"しか出力されなくなります。salience指定が聞いてるので先にright1をひっかけます。そのあとでright2のルールを無効化(キャンセル)する、というのがactivation-groupの挙動になります。ま、いくつか並べてどれか最初の一つを選択!という時に有効ですね。