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
<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>
Rule Runner
src/main/java
com.skills421.examples.drools.controller.RuleRunner
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; } }
RuleRunnerException
src/main/java
com.skills421.examples.drools.exceptions.RuleRunnerException
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); } }
Fact
src/main/java
com.skills421.examples.drools.facts.Fact
package com.skills421.examples.drools.facts; public interface Fact { }
RuleResponse
src/main/java
com.skills421.examples.drools.facts.RuleResponse
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; } }
Person
src/main/java
com.skills421.examples.drools.facts.Person
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; } }
Rules
src/main/resources/com/skills421/examples/drools/people
DrinkingRules.drl
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
kmodule.xml
src/main/resources/META-INF
kmodule.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>
Main
src/main/java
com.skills421.examples.drools.Main
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()); } }
Output
Jon Doe is old enough to drink
[…] This post has been updated to the very latest Drools6.x – the new post can be found here: Drools6.x Basic Example […]
[…] This post has been updated to the very latest Drools6.x – the new post can be found here: Drools6.x Basic Example […]