2015-08-26 4 views
0

В настоящее время я пишу пример на Drools, в котором я пытаюсь проверить состояние сустава, основанное на меньшем и равном оператору.Drool Условие не соответствует

My Drools .drl файл:

//created on: May 7, 2015 
package inlife.rules.controller 

//list any import classes here. 
import inlife.rules.model.StudentRuleBean; 

//declare any global variables here 

rule "Check if Student age is below limit" 

    when 
     //conditions 
     o: StudentRuleBean (studentName == "Peter" && age < 5 && age > 18) 
    then 
     //actions 
     o.setStudentEligible("false"); 

end 

rule "Check for Range" 

when 
     //conditions 
     o: StudentRuleBean (studentName == "Peter" && age > 5 && age <= 18) 
    then 
     //actions 
     o.setStudentEligible("true"); 

end 

Сейчас в вышеприведенном .drl FLE я пытаюсь проверить, если имя студента Питера и его возраст больше, чем пять и менее 18, чем он имеет право перейти в школу еще не он.

Но мое состояние не удовлетворено. Наверное, я делаю что-то не так в моем файле слюни.

Ниже мой Java Bean Class

public class StudentRuleBean { 

    private String studentName; 
    private double age; 
    private String studentEligible; 

    public String getStudentName() { 
     return studentName; 
    } 
    public void setStudentName(String studentName) { 
     this.studentName = studentName; 
    } 
    public double getAge() { 
     return age; 
    } 
    public void setAge(double age) { 
     this.age = age; 
    } 
    public String getStudentEligible() { 
     return studentEligible; 
    } 
    public void setStudentEligible(String studentEligible) { 
     this.studentEligible = studentEligible; 
    } 

} 

плохо застрял .. Нужна помощь по этому вопросу.

С нетерпением жду ответа ypur. Заранее спасибо.

+0

Вы уверены, что правила компилируются успешно? Кроме того, первое правило не может быть активировано, поскольку условие не может быть правдой: возраст < 5 && age > 18 ... он не может быть меньше 5 И больше 18. Возможно, это должно быть studentName == «Peter && (возраст <5 || age > 18) или что-то в этом роде – Sebastian

+0

Да, правила успешно скомпилированы Да, первое правило не активируется, но второе правило должно срабатывать. Правильно? – Roy

+1

на первый взгляд, по крайней мере, я не вижу проблемы с самим правилом. конечно, только активируется, если есть вставленный факт, который соответствует правилу. Не могли бы вы добавить дополнительный код того, как вы вызываете сессию слюни и как вы устанавливаете факты (и создаете факты)? – Sebastian

ответ

1

Как я знаю, все элементы в предикате логичны И. Тогда вам не нужно вводить & & для каждого условия. Отделите их от комы.

 o: StudentRuleBean (studentName == "Peter" , age < 5 && age > 18) 

The документации говорит:

Хотя & & и операторы имеют ту же семантику, что они будут решены с различными приоритетами: & & оператор предшествует || оператор. И & & и || оператор предшествует оператору. См. Список приоритетов операторов ниже.

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

копия паста изhttps://docs.jboss.org/drools/release/5.2.0.Final/drools-expert-docs/html/ch05.html#d0e3962 (5.8.3.3.4. Запятая отделенный И)