Число, возвращаемое методом kieSession.fireAllRules()
, - это число правил, которые фактически соответствуют и были выполнены механизмом Drools. Если левая часть правила (предложение «когда») не соответствует входным данным, оно не соответствует и не будет выполнено.
В приведенных примерах правил тестовое правило проверяет только наличие наличие ValidacijaDiagnoze
в рабочей памяти. Два других правила требуют, чтобы ValidacijaDiagnoze
включал дочерние элементы (экземпляр Lek
или SastojakLeka
), а также экземпляр Pacijent
также в рабочей памяти.
Однако в коде, который запускает правила, в рабочую память добавляется только ValidacijaDiagnoze
, например:
ValidacijaDiagnoze vd = new ValidacijaDiagnoze();
vd.setMessage("PATIENT IS NOT ALLERGIC");
vd.setValid(true);
Поскольку этот экземпляр не связан с Lek
или SastojakLeka
, он не будет запускать другие правила , Кроме того, поскольку в рабочей памяти нет Pacijent
, эти другие правила также не сработают.
Следовательно, поскольку только первое правило может вызвать, fireAllRules
возвращает 1 потому что это количество правил, которые фактически выполняются.