リファレンス 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の挙動になります。ま、いくつか並べてどれか最初の一つを選択!という時に有効ですね。