Drools5.4 Basic Example
Creating the Project
- Open Eclipse (Kepler)
- New -> Maven Project
- Simple Project
- Group Id: com.skills421.examples.drools
- Artifact Id: Drools5.4Example
- Finish
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>
<groupId>com.skills421.examples.drools</groupId>
<artifactId>Drools5.4Example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>5.4.0.CR1</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>knowledge-api</artifactId>
<version>5.4.0.CR1</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>5.4.0.CR1</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.Collection;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.definition.KnowledgePackage;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
public class RuleRunner
{
public RuleRunner()
{
}
public void runRules(String[] rules, Object[] facts)
{
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
for (int i = 0; i < rules.length; i++)
{
String ruleFile = rules[i];
System.out.println(“Loading file: ” + ruleFile);
kbuilder.add(ResourceFactory.newClassPathResource(ruleFile, RuleRunner.class), ResourceType.DRL);
}
Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
kbase.addKnowledgePackages(pkgs);
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
for (int i = 0; i < facts.length; i++)
{
Object fact = facts[i];
System.out.println(“Inserting fact: ” + fact);
ksession.insert(fact);
}
ksession.fireAllRules();
}
}
[/code]
Person
src/main/java
com.skills421.examples.drools.model.Person
[code language=”java”]
package com.skills421.examples.drools.model;
public class Person
{
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]
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.model.Person;
public class Main
{
public static void main(String[] args)
{
RuleRunner runner = new RuleRunner();
String[] rules = { “test1.drl” };
Object[] facts = { new Person(“Jon Doe”, 21) };
runner.runRules(rules,facts);
}
}
[/code]
Rules
src/main/resources
test1.drl
[code language=”java”]
package com.skills421.examples.drools5_4
import com.skills421.examples.drools.model.Person
dialect “mvel”
/*
* This rule checks that a person is >= 21
*/
rule “Person is 21”
when
$person : Person(age>=21)
then
System.out.println($person.name);
end
[/code]
Output
[code]
Loading file: test1.drl
Inserting fact: com.skills421.examples.drools.model.Person@5480e605
Jon Doe
[/code]