Drools5 Community Training: Module 1.5 - Drools Expert First Example
Drools5 Community Training
Sponsored by Plugtree
Module 1.5: Drools Expert
First Example
Drools5 Community Training
version: 1.0-SNAPSHOT
Release Date: 03/16/2011
Under The Creative Common License
Module 1.5: Drools Expert First
Example
Drools5 Community Training Course
by Mauricio "Salaboy" Salatino and
Esteban Aliverti is licensed under a
Creative Commons Attribution 3.0
Unported License.
Based on a work at salaboy.wordpress.
com.
Permissions beyond the scope of this
license may be available at http:
//salaboy.wordpress.com/.
Drools Expert in 2 slides
The core of Drools
Lets us express our Knowledge -> Business Rules
Lets us create Sessions -> Our World
It will be in charge of making inferences between them and
firing the correspondent actions.
Let's see how it works!
Example Model
We can define that a Pet will have a name, type and a position.
For this example a Person will have a Pet which he/she can call. And
this Person can also call the fire department.
The Firefighter will know how to retrieve a Cat from a Tree.
Example Rules
Rule "Call Cat when it is in a tree"
When my Cat is on a limb in a tree
Then I will call my Cat
Rule "Call the fire department"
When my Cat is on a limb and
it doesn't come down when I call
Then call the Fire Department
Rule "Firefighter gets the cat down"
When the Firefighter can reach the Cat
Then the Firefighter retrieves the Cat
Technical View of the Rules
rule "Call Cat when it is in a tree"
when
$p: Person($pet: pet, petCallCount == 0)
$cat: Pet(this == $pet,
position == "on a limb",
type == PetType.CAT)
then
//$cat.getName() + " come down!"
$p.setPetCallCount($p.getPetCallCount()+1);
update($p);
end
Rule "Call Cat when it is in a tree"
When my Cat is on a limb in a tree
Then I will call my Cat
Technical View of the Rules
rule "Call the fire department"
when
$p: Person($pet: pet, petCallCount > 0)
$cat: Pet(this == $pet,
position == "on a limb",
type == PetType.CAT)
then
Firefighter firefighter
= new Firefighter("Fred");
insert(firefighter);
end
Rule "Call the fire department"
When my Cat is on a limb and
it doesn't come down when I call
Then call the Fire Department
Technical View of the Rules
rule "Firefighter gets the cat down"
when
$f: Firefighter()
$p: Person($pet: pet, petCallCount > 0)
$cat: Pet(this == $pet,
position == "on a limb",
type == PetType.CAT)
then
$cat.setPosition("on the street");
retract($f);
update($cat);
end
Rule "Firefighter gets the cat down"
When the Firefighter can reach the Cat
Then the Firefighter retrieves the Cat
Active Scenario in Java
For the previous rules to fire in our Java world we need to have:
An instance of a Person that contains a relation to its Pet
An instance of a Pet that is on a limb
Person person = new Person("Salaboy!");
Pet pet = new Pet("mittens", "on a limb",
Pet.PetType.CAT);
person.setPet(pet);
Hands On
Project Name: drools5/00-Drools5-FirstExample
Sources: https://github.com/Salaboy/Drools_jBPM5-Training-
Examples
Characteristics:
Java Project (jar)
Uses Maven (pom.xml)
Drools Dependencies (core, api, compiler)
DRL File (src/test/resources/rules.drl)
To do:
Run the test (src/test/java/org/plugtree/example/FirstExampleTest.java)
Get familiar with the output
Hands On
Exercise 1:
Create a new rule that inserts a Dog (on the street) when
there is Cat on the street too.
Create a new rule for the situation when a Cat and a Dog are
on the street, the Dog should chase it up to the tree and then
the Cat should climb the limb.
Hands On - Solution
rule "Cat on the street"
when
Pet(position == "on the street", type == PetType.CAT)
then
Pet dog = new Pet("doggy", "on the street" , PetType.DOG);
insert (dog);
end
rule "Cat on the street and a dog is around"
when
$cat: Pet(position == "on the street", type == PetType.CAT)
$dog: Pet(position == "on the street", type == PetType.DOG)
then
modify($cat){
setPosition("on the limb");
}
modify($dog){
setPosition("under the tree");
}
end
Hands On - What Happen?
Exercise 1:
What happens with the execution? Why?
Try to find a solution
Briefing Up
Covered Topics:
Quick review about Drools Expert
Project Dependencies
A simple example that shows the key things that we need
to have to use Drools