Wednesday, 31 August 2016

Installing Drools in Eclipse and Creating Simple Hello World Application in Drools

Drools

    • Drools is a Business rule management system
    • It is used to separate the data from logic.
    • It allow us to write logic (rules) in more layman readable form. This allow business people to create their own rules instead of depending on programmers and developers.

Rules

Rules are pieces of knowledge often expressed as, "When some conditions occur, then do some tasks."
The most important part of a Rule is it’s when part. If the when part is satisfied, the then part is triggered
rule <rule_name>
<attribute> <value>
when
<conditions>
then
<actions>
end
view raw sample.drl hosted with ❤ by GitHub

Installing Drools in Eclipse

Drools comes with plugin for eclipse to create and manage the project from eclipse itself.

Prerequisites to install Drools Plugin:

  • Java 1.5 (or higher)
  • Eclipse 4.2

Installation Step

Drools Runtime

Drool runtime is needed to create and execute drool rules.
  • Click on Windows -> Preference -> Drools -> Installed Drools Runtime -> Add -> Browse.
  • Browse to the downloaded binaries folder and Add.

Example Project

  1. File -> New -> Drool Project -> Create an empty project.
  2. Enter project name -> finish.
  3. The project follow maven folder structure. Two primary folder are
    1. src/main/java – Java code would go here.
    2. src/main/resources – Drool files would go here.
  4. Create a new java class file in src/main/java. Say ‘Hello.java’ in package ‘com.example’.
    package com.example;
    import org.kie.api.KieServices;
    import org.kie.api.runtime.KieContainer;
    import org.kie.api.runtime.KieSession;
    public class Hello {
    private String hellostr = "Hello World";
    public String getHellostr() {
    return hellostr;
    }
    public void setHellostr(String hellostr) {
    this.hellostr = hellostr;
    }
    public static void main(String[] args) {
    Hello hello = new Hello();
    System.out.println("String before firing rule: "+hello.getHellostr());
    // Create knowledge base from default drool file.
    // The default folder from where knowledge base will read
    // drool file is defined /src/main/resources/META-INF/kmodule.xml
    // The default value in this generated file is /src/main/resources/rules
    KieServices ks = KieServices.Factory.get();
    KieContainer kContainer = ks.getKieClasspathContainer();
    KieSession kSession = kContainer.newKieSession("ksession-rules");
    kSession.insert(hello);
    kSession.fireAllRules();
    System.out.println("String after firing rule: "+hello.getHellostr());
    }
    }
    view raw Hello.java hosted with ❤ by GitHub
  5. Create a new drool file in src/main/resources/rules. Say ‘ReplaceHello.drl’.
    import com.example.Hello;
    rule "SayGoodBye"
    when
    h : Hello(hellostr.contains("Hello"))
    then
    h.setHellostr(h.getHellostr().replace("Hello","Goodbye"));
    end
  6. Result.
    String before firing rule: Hello World
    String after firing rule: Goodbye World
    view raw Result hosted with ❤ by GitHub
Apart from creating the rules file in resources folder, we can import the rules files from classpath as well as file system. Below example show an example of reading the rule file from classpath.
KieServices ks = KieServices.Factory.get();
KieFileSystem kieFileSystem = ks.newKieFileSystem();
kieFileSystem.write(ResourceFactory.newClassPathResource("myrule/HelloRule.drl"));
KieBuilder builder = ks.newKieBuilder(kieFileSystem).buildAll();
KieContainer kContainer = ks.newKieContainer(ks.getRepository().getDefaultReleaseId());
KieSession kSession = kContainer.newKieSession();
if(builder.getResults().hasMessages(Level.ERROR)) {
throw new RuntimeException(builder.getResults().toString());
}
view raw Hello.java hosted with ❤ by GitHub

No comments:

Post a Comment