Drools 6.x Basic Example
Creating the Project
- Open Eclipse
- New -> Maven Project (simple project)
- Simple Project
- Group Id: com.skills421.examples.drools
- Artifact Id: Drools6.xExample
- Finish
Structure

pom.xml
[code language=”xml”]
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!– This Project –>
<groupId>com.skills421.examples.drools</groupId>
<artifactId>Drools6.xExample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!– Properties –>
<properties>
<!– Drools –>
<drools.version>6.3.0.Final</drools.version>
<!– maven-compiler-plugin –>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.source>1.8</maven.compiler.source>
</properties>
<!– Dependencies –>
<dependencies>
<!– https://mvnrepository.com/artifact/org.drools/drools-core –>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools.version}</version>
</dependency>
<!– https://mvnrepository.com/artifact/org.drools/drools-compiler –>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools.version}</version>
</dependency>
</dependencies>
</project>
[/code]
Rule Runner
src/main/java
com.skills421.examples.drools.controller.RuleRunner
[code language=”java”]
package com.skills421.examples.drools.controller;
import java.util.ArrayList;
import java.util.List;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import com.skills421.examples.drools.exceptions.RuleRunnerException;
import com.skills421.examples.drools.facts.Fact;
import com.skills421.examples.drools.facts.RuleResponse;
public class RuleRunner
{
private List<Fact> facts = new ArrayList<>();
public RuleRunner()
{
}
public RuleRunner insertFact(Fact fact)
{
facts.add(fact);
return this;
}
public RuleResponse runRules(String ruleset) throws RuleRunnerException
{
RuleResponse response = null;
try
{
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession(ruleset);
for (Fact fact : facts)
{
kSession.insert(fact);
}
kSession.fireAllRules();
for (Object fact : kSession.getObjects())
{
if (fact instanceof RuleResponse)
{
response = (RuleResponse) fact;
}
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
return response;
}
}
[/code]
RuleRunnerException
src/main/java
com.skills421.examples.drools.exceptions.RuleRunnerException
[code language=”java”]
package com.skills421.examples.drools.exceptions;
public class RuleRunnerException extends Exception
{
private static final long serialVersionUID = 1L;
public RuleRunnerException()
{
super();
}
public RuleRunnerException(String message, Throwable cause,
boolean enableSuppression, boolean writableStackTrace)
{
super(message, cause, enableSuppression, writableStackTrace);
}
public RuleRunnerException(String message, Throwable cause)
{
super(message, cause);
}
public RuleRunnerException(String message)
{
super(message);
}
public RuleRunnerException(Throwable cause)
{
super(cause);
}
}
[/code]
Fact
src/main/java
com.skills421.examples.drools.facts.Fact
[code language=”java”]
package com.skills421.examples.drools.facts;
public interface Fact
{
}
[/code]
RuleResponse
src/main/java
com.skills421.examples.drools.facts.RuleResponse
[code language=”java”]
package com.skills421.examples.drools.facts;
public class RuleResponse implements Fact
{
private String message;
public String getMessage()
{
return message;
}
public void setMessage(String message)
{
this.message = message;
}
}
[/code]
Person
src/main/java
com.skills421.examples.drools.facts.Person
[code language=”java”]
package com.skills421.examples.drools.facts;
public class Person implements Fact
{
private String name;
private int age;
public Person()
{
}
public Person(String name, int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
}
[/code]
Rules
src/main/resources/com/skills421/examples/drools/people
DrinkingRules.drl
[code language=”java”]
package com.skills421.examples.drools.people
import com.skills421.examples.drools.facts.Person
import com.skills421.examples.drools.facts.RuleResponse
dialect "mvel"
/*
* This rule checks for a RuleResponse fact
*/
rule "Ensure Response Object"
when
not RuleResponse()
then
insert(new RuleResponse());
end
/*
* This rule checks that a person is >= 21
*/
rule "Person is 21"
when
$person : Person($name:name,age>=21)
$response:RuleResponse()
then
$response.setMessage($name+" is old enough to drink");
end
[/code]
kmodule.xml
src/main/resources/META-INF
kmodule.xml
[code language=”xml”]
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="test" packages="com.skills421.examples.drools.people">
<ksession name="people-rules"/>
</kbase>
</kmodule>
[/code]
Main
src/main/java
com.skills421.examples.drools.Main
[code language=”java”]
package com.skills421.examples.drools;
import com.skills421.examples.drools.controller.RuleRunner;
import com.skills421.examples.drools.exceptions.RuleRunnerException;
import com.skills421.examples.drools.facts.Person;
import com.skills421.examples.drools.facts.RuleResponse;
public class Main
{
public static void main(String[] args) throws RuleRunnerException
{
RuleRunner runner = new RuleRunner();
RuleResponse response = runner.insertFact(new Person("Jon Doe",21)).runRules("people-rules");
System.out.println(response.getMessage());
}
}
[/code]
Output
[code]
Jon Doe is old enough to drink
[/code]
1 Comment