Drools - Debuggen
Es gibt verschiedene Möglichkeiten, ein Drools-Projekt zu debuggen. Hier schreiben wir eine Utility-Klasse, um Ihnen mitzuteilen, welche Regeln ausgelöst oder ausgelöst werden.
Mit diesem Ansatz können Sie überprüfen, welche Regeln in Ihrem Drools-Projekt ausgelöst werden. Hier ist unsere Utility-Klasse
Utility.java
package com.sample;
import org.drools.spi.KnowledgeHelper;
public class Utility {
public static void help(final KnowledgeHelper drools, final String message){
System.out.println(message);
System.out.println("\nrule triggered: " + drools.getRule().getName());
}
public static void helper(final KnowledgeHelper drools){
System.out.println("\nrule triggered: " + drools.getRule().getName());
}
}
Die erste Methode help Gibt die ausgelöste Regel zusammen mit einigen zusätzlichen Informationen aus, die Sie als String über die DRL-Datei übergeben können.
Die zweite Regel helper Gibt aus, ob die bestimmte Regel ausgelöst wurde oder nicht.
Wir haben jeder DRL-Datei eine der Utility-Methoden hinzugefügt. Wir haben auch die Importfunktion in die DRL-Datei (Pune.drl) aufgenommen. In demthenAls Teil der Regel haben wir den Funktionsaufruf des Dienstprogramms hinzugefügt. Die modifizierte Pune.drl ist unten angegeben. Änderungen werden blau hervorgehoben.
Geänderte Pune.drl
//created on: Dec 24, 2014
package droolsexample
//list any import classes here.
import com.sample.ItemCity;
import java.math.BigDecimal;
import com.sample.HelloCity;
import function com.sample.Utility.helper;
// declare any global variables here
dialect "java"
rule "Pune Medicine Item"
when
item : ItemCity(purchaseCity == ItemCity.City.PUNE,
typeofItem == ItemCity.Type.MEDICINES)
then
BigDecimal tax = new BigDecimal(0.0);
item.setLocalTax(tax.multiply(item.getSellPrice()));
HelloCity.writeHello(item.getPurchaseCity().toString());
helper(drools);
end
rule "Pune Groceries Item"
when
item : ItemCity(purchaseCity == ItemCity.City.PUNE,
typeofItem == ItemCity.Type.GROCERIES)
then
BigDecimal tax = new BigDecimal(2.0);
item.setLocalTax(tax.multiply(item.getSellPrice()));
helper(drools);
end
In ähnlicher Weise haben wir die andere Dienstprogrammfunktion in die zweite DRL-Datei (Nagpur.drl) aufgenommen. Hier ist der geänderte Code -
Geänderte Nagpur.drl
// created on: Dec 26, 2014
package droolsexample
// list any import classes here.
import com.sample.ItemCity;
import java.math.BigDecimal;
import function com.sample.Utility.help;
//declare any global variables here
dialect "java"
rule "Nagpur Medicine Item"
when
item : ItemCity(purchaseCity == ItemCity.City.NAGPUR,
typeofItem == ItemCity.Type.MEDICINES)
then
BigDecimal tax = new BigDecimal(0.0);
item.setLocalTax(tax.multiply(item.getSellPrice()));
help(drools,"added info");
end
rule "Nagpur Groceries Item"
when
item : ItemCity(purchaseCity == ItemCity.City.NAGPUR,
typeofItem == ItemCity.Type.GROCERIES)
then
BigDecimal tax = new BigDecimal(1.0);
item.setLocalTax(tax.multiply(item.getSellPrice()));
help(drools,"info");
end
Führen Sie das Programm erneut aus und es sollte die folgende Ausgabe erzeugen -
info
rule triggered: Nagpur Groceries Item
added info
rule triggered: Nagpur Medicine Item
rule triggered: Pune Groceries Item
HELLO PUNE!!!!!!
rule triggered: Pune Medicine Item
PUNE 0
PUNE 20
NAGPUR 0
NAGPUR 10
Beide Dienstprogrammfunktionen werden aufgerufen und es wird angezeigt, ob die bestimmte Regel aufgerufen wurde oder nicht. Im obigen Beispiel werden alle Regeln aufgerufen. In einer Unternehmensanwendung kann diese Dienstprogrammfunktion jedoch sehr nützlich sein, um zu debuggen und herauszufinden, ob eine bestimmte Regel ausgelöst wurde oder nicht.
Verwenden der Debug-Perspektive in Eclipse
Sie können die Regeln während der Ausführung Ihrer Drools-Anwendung debuggen. Sie können Haltepunkte zu den Konsequenzen Ihrer Regeln hinzufügen. Wenn während der Ausführung der Regeln ein solcher Haltepunkt auftritt, wird die Ausführung vorübergehend gestoppt. Sie können dann die zu diesem Zeitpunkt bekannten Variablen wie in einer Java-Anwendung überprüfen und die in Eclipse verfügbaren normalen Debugging-Optionen verwenden.
Um einen Haltepunkt in Ihrer DRL-Datei zu erstellen, doppelklicken Sie einfach auf die Zeile, in der Sie einen Haltepunkt erstellen möchten. Denken Sie daran, dass Sie nur einen Haltepunkt in der erstellen könnenthenTeil einer Regel. Ein Haltepunkt kann durch Doppelklicken auf den Haltepunkt im DRL-Editor entfernt werden.
Nach dem Anwenden der Haltepunkte müssen Sie Ihre Anwendung als Drools-Anwendung debuggen. Drools-Haltepunkte (Haltepunkte in der DRL-Datei) funktionieren nur, wenn Ihre Anwendung als Drools-Anwendung debuggt wird. Hier ist, wie Sie dasselbe tun müssen -
Sobald Sie Ihre Anwendung als Drools-Anwendung debuggen, wird das Steuerelement in der DRL-Datei angezeigt (siehe folgenden Screenshot).
Sie können die Variablen und die aktuellen Werte des Objekts an diesem Debugpunkt anzeigen. Die gleiche Steuerung von F6, um zur nächsten Zeile zu gelangen, und F8, um zum nächsten Debug-Punkt zu springen, gilt auch hier. Auf diese Weise können Sie Ihre Drools-Anwendung debuggen.
Note - Die Debug-Perspektive in der Drools-Anwendung funktioniert nur, wenn der Dialekt MVEL bis Drools 5.x ist.