---
tags: Drools
---
# Master Drools - Turn Complex Logic into Simple to Read Rules
## Section 5: 5. Cross Products - Drools Version of SQL
I cloned the project presented to follow the course and when I executed Step 1 from Section 5, the results were different from the one shown in the lesson: Visa Applications with id 1 and 2 are verified and received FAILED as Validation, but they are re-checked and considered PASSED (as shown in the green square), even being in a stateful session.
## Local output vs. Lesson output
**Local output**

**Lesson output**



### Environment setup
Operating System: Ubuntu 20.04.3 LTS
JVM: 16.0.2+7-67
JDK: "11.0.10" 2021-01-19
Drools: 7.58.0.Final
### Code I ran vs. Lesson code
Both source code looks the same to me.
#### VisaAppliationValidation.drl
Mine: https://github.com/aasaru/drools-training/blob/master/src/main/resources/io/github/aasaru/drools/section05/step1/VisaApplicationValidation.drl
From lesson:

<!--
```java=
package io.github.aasaru.drools.section05.step1
import io.github.aasaru.drools.domain.Passport;
import io.github.aasaru.drools.domain.Validation;
import io.github.aasaru.drools.domain.VisaApplication;
import java.time.LocalDate;
rule "Invalidate visa application with invalid passport"
dialect "mvel"
when
$passport: Passport( validation == Validation.FAILED )
$visaApplication: VisaApplication( passportNumber == $passport.passportNumber )
then
System.out.println( "Set " + $visaApplication + " invalid as " + $passport + " hasn't passed validation");
modify($visaApplication) {
setValidation( Validation.FAILED )
}
end
rule "Set application without validation info as passed"
dialect "mvel"
when
$visaApplication: VisaApplication( validation == Validation.UNKNOWN )
then
System.out.println( $visaApplication + " is without validation info, consider OK for now" );
modify($visaApplication) {
setValidation( Validation.PASSED )
}
end
```
-->
#### PassportValidation.drl
mine: https://github.com/aasaru/drools-training/blob/master/src/main/resources/io/github/aasaru/drools/section05/step1/PassportValidation.drl
From lesson:

<!--
```java=
package io.github.aasaru.drools.section05.step1
import io.github.aasaru.drools.domain.Passport;
import io.github.aasaru.drools.domain.Validation;
import java.time.LocalDate;
rule "Expired passport"
dialect "mvel"
when
$passport: Passport( isExpired() )
then
System.out.println( $passport + " is INVALID because it is expired" );
modify($passport) {
setValidation( Validation.FAILED ),
setCause( "passport is expired" )
}
end
rule "Full passport"
dialect "mvel"
when
$passport: Passport( unusedVisaPages == 0 )
then
System.out.println( $passport + " is INVALID because it has no space for visa" );
modify($passport) {
setValidation( Validation.FAILED ),
setCause( "passport has no space for visa" )
}
end
rule "Valid passport"
dialect "mvel"
when
$passport: Passport( validation == Validation.UNKNOWN )
then
System.out.println( $passport + " is without validation info, consider CORRECT for now" );
modify($passport) {
setValidation( Validation.PASSED )
}
end
```
-->

## VisaApplicationValidation.java
mine: https://github.com/aasaru/drools-training/blob/master/src/main/java/io/github/aasaru/drools/section05/VisaApplicationValidation.java
from lesson: 