2016-11-17 3 views
1

У меня есть некоторые сомнения относительно порядка, в котором действуют правила, если им присваивается атрибут auto-focus.Порядок активации правила при использовании автофокуса

Например, если у меня есть следующее правило-файл:

rule "Rule1" salience 2 
agenda-group "group1" 
auto-focus 
    when 
     ... 
    then 
     ... 
end 

rule "Rule2" salience 1 
agenda-group "group2" 
auto-focus 
    when 
     ... 
    then 
     ... 
end 

и я прохожу факт, который активирует оба правила, я наблюдаю, что повестка дня группы сложены в следующем порядке:

group2 
group1 

Это означает, что сначала выполняется Rule2.

Теперь, если я изменить порядок правил:

rule "Rule2" salience 1 
agenda-group "group2" 
auto-focus 
    when 
     ... 
    then 
     ... 
end 

rule "Rule1" salience 2 
agenda-group "group1" 
auto-focus 
    when 
     ... 
    then 
     ... 
end 

Я наблюдаю, что Rule1 запускаемого первое предприятия.

Означает ли это, что значимость не влияет на порядок активации в случае auto-focus, но вместо этого это зависит от порядка, в котором правила написаны в файле правил?

Я прошел через this discussion по этой теме, но не нашел удовлетворительных ответов.

Если поведение, которое я описал, верное, оно документировано где угодно?

Я использую Drools 6.2.0.

ответ

1

Многие атрибуты правил являются ad-hoc расширениями, которые были изобретены, чтобы авторы правил могли уменьшить логику своих правил. Вы должны быть очень осторожны, когда функция SW объявляет «auto (matic)».

Если активация (который является не такими же, как выполнение) устанавливает повестки-группу, то выпуклость будет решать только в пределах этой группы. С другой стороны, внешность не регулирует порядок оценки.

Удалите автофокус и группу участников, если вам необходимо принять решение между двумя или более группами участников по правилу. Вызов, например.

drools.setFocus("group1"); 

с правой стороны правила, делающего выбор.