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