diff --git a/drools/backward-chaining/pom.xml b/drools/backward-chaining/pom.xml new file mode 100644 index 0000000000..bda0cf2abc --- /dev/null +++ b/drools/backward-chaining/pom.xml @@ -0,0 +1,38 @@ + + + + 4.0.0 + + drools-backward-chaining + 1.0 + drools-backward-chaining + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + 6.4.0.Final + + + + + org.kie + kie-api + ${runtime.version} + + + org.drools + drools-core + ${runtime.version} + + + org.drools + drools-decisiontables + ${runtime.version} + + + diff --git a/drools/backward-chaining/src/main/java/com/baeldung/BackwardChainingBeatles.java b/drools/backward-chaining/src/main/java/com/baeldung/BackwardChainingBeatles.java new file mode 100644 index 0000000000..7fc5bd3685 --- /dev/null +++ b/drools/backward-chaining/src/main/java/com/baeldung/BackwardChainingBeatles.java @@ -0,0 +1,28 @@ +package com.baeldung; + +import org.kie.api.KieServices; +import org.kie.api.runtime.KieContainer; +import org.kie.api.runtime.KieSession; + +import com.baeldung.model.Beatle; + +public class BackwardChainingBeatles { + public static void main(String[] args) { + + KieServices ks = KieServices.Factory.get(); + KieContainer kContainer = ks.getKieClasspathContainer(); + KieSession kSession = kContainer.newKieSession("ksession-backward-chaining"); + // drools session base on the xml configuration (kmodule.xml) + + // graph population + kSession.insert(new Beatle("Starr", "drums")); + kSession.insert(new Beatle("McCartney", "bass")); + kSession.insert(new Beatle("Lennon", "guitar")); + kSession.insert(new Beatle("Harrison", "guitar")); + + kSession.insert("Ringo"); // invoke the rule that calls the query implentation of backward chaining + kSession.fireAllRules(); // invoke all the rules + + } + +} \ No newline at end of file diff --git a/drools/backward-chaining/src/main/java/com/baeldung/model/Beatle.java b/drools/backward-chaining/src/main/java/com/baeldung/model/Beatle.java new file mode 100644 index 0000000000..4b219b3a69 --- /dev/null +++ b/drools/backward-chaining/src/main/java/com/baeldung/model/Beatle.java @@ -0,0 +1,33 @@ +package com.baeldung.model; + +import org.kie.api.definition.type.Position; + +public class Beatle { + + @Position(0) + private String lastName; + @Position(1) + private String instrument; + + public Beatle(String lastName, String instrument) { + this.lastName = lastName; + this.instrument = instrument; + } + + public String getInstrument() { + return instrument; + } + + public void setInstrument(String instrument) { + this.instrument = instrument; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + +} \ No newline at end of file diff --git a/drools/backward-chaining/src/main/resources/META-INF/kmodule.xml b/drools/backward-chaining/src/main/resources/META-INF/kmodule.xml new file mode 100644 index 0000000000..6498e26343 --- /dev/null +++ b/drools/backward-chaining/src/main/resources/META-INF/kmodule.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/drools/backward-chaining/src/main/resources/backward_chaining/Beatles.drl b/drools/backward-chaining/src/main/resources/backward_chaining/Beatles.drl new file mode 100644 index 0000000000..8d0d06a79e --- /dev/null +++ b/drools/backward-chaining/src/main/resources/backward_chaining/Beatles.drl @@ -0,0 +1,44 @@ +package com.baeldung + +import com.baeldung.model.Beatle; + + +query whichBeatle(String lastName, String instrument) + Beatle(lastName, instrument;) + or + (Beatle(lastName, null;) + and + whichBeatle(null, instrument;)) //recursive call to the function that allows to search in a derivation tree structure +end + +rule "Ringo" + when + String(this == "Ringo") + whichBeatle("Starr", "drums";) + then + System.out.println("The beatle is Ringo Starr"); +end + +rule "Paul" + when + String(this == "Paul") + whichBeatle("McCartney", "bass";) + then + System.out.println("The beatle is Paul McCartney"); +end + +rule "John" + when + String(this == "John") + whichBeatle("Lennon", "guitar";) + then + System.out.println("The beatle is John Lennon"); +end + +rule "George" + when + String(this == "George") + whichBeatle("Harrison", "guitar";) + then + System.out.println("The beatle is George Harrison"); +end