У меня есть следующий набор правил:
rule "Default Margin By Grade"
ruleflow-group "MarginByGrade"
enabled false
when
$mg : MarginByGrade()
$u : PriceUnit( resale==null, trimGrade memberOf $mg.grades )
then
end
rule "Grade Margin By Group, Style" extends "Default Margin By Grade"
activation-group "Margin By Grade"
salience 500
when
MarginByGrade(this == $mg, $u.model memberOf $mg.models, $u.style memberOf $mg.styles)
then
System.out.println("Found match : " + $mg);
end
rule "Grade Margin By Style" extends "Default Margin By Grade"
activation-group "Margin By Grade"
salience 100
when
MarginByGrade(this == $mg, models == null, $u.style memberOf $mg.styles)
then
System.out.println("Found match : " + $mg);
end
rule "Grade Margin By Group" extends "Default Margin By Grade"
activation-group "Margin By Grade"
salience 50
when
MarginByGrade(this == $mg, prefixes memberOf prefixes, styles == null)
then
System.out.println("Found match : " + $mg);
end
rule "Margin by Grade" extends "Default Margin By Grade"
salience 5
activation-group "Margin By Grade"
when
MarginByGrade(this == $mg, prefixes == null, styles == null)
then
System.out.println("Found match : " + $mg);
end
Правила запускаются на основе потока правил (отсюда и атрибут 'ruleflow-group'. Мое требование заключается в том, что как только правило с наивысшей значимостью срабатывает, правила с меньшей значимостью не должны срабатывать. Тем не менее, когда я запускаю факт, который активирует несколько правил, все активированные правила запускаются:
Start Process: Mon Sep 19 15:58:39 EDT 2011
Found match : MarginByGrade( prefixes=null, styles=null, grades=[C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S], margin=26.0000 )
Found match : MarginByGrade( prefixes=[015, 215], styles=[572], grades=[A, B, D], margin=25.5000 )
Found match : MarginByGrade( prefixes=[015, 010], styles=[515, 215, 572], grades=[C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S], margin=24.5000 )
015572 D 015572 D933079 FN 175->null
Dispose Session: Mon Sep 19 15:58:39 EDT 2011
Что я делаю не так? Я использую Drools Expert 5.2.0-Final.