Drools - debugowanie
Istnieją różne sposoby debugowania projektu Drools. Tutaj napiszemy klasę Utility, aby poinformować Cię, które reguły są wyzwalane lub uruchamiane.
Dzięki takiemu podejściu możesz sprawdzić, jakie reguły są uruchamiane w Twoim projekcie Drools. Oto nasza klasa użytkowa
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());
}
}
Pierwsza metoda help wypisuje wyzwoloną regułę wraz z dodatkowymi informacjami, które można przekazać jako ciąg znaków w pliku DRL.
Druga zasada helper wypisuje, czy dana reguła została wyzwolona, czy nie.
Dodaliśmy jedną z metod narzędziowych w każdym pliku DRL. Dodaliśmy również funkcję importu w pliku DRL (Pune.drl). wthenczęścią reguły, dodaliśmy wywołanie funkcji narzędziowej. Zmodyfikowany plik Pune.drl podano poniżej. Zmiany są zaznaczone na niebiesko.
Zmodyfikowany 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
Podobnie, dodaliśmy drugą funkcję narzędzia w drugim pliku DRL (Nagpur.drl). Oto zmodyfikowany kod -
Zmodyfikowany plik 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
Uruchom program ponownie i powinien wygenerować następujące dane wyjściowe -
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
Obie funkcje narzędziowe są wywoływane i pokazuje, czy dana reguła została wywołana, czy nie. W powyższym przykładzie wywoływane są wszystkie reguły, ale w aplikacji korporacyjnej ta funkcja narzędziowa może być naprawdę przydatna do debugowania i sprawdzania, czy dana reguła została uruchomiona, czy nie.
Korzystanie z perspektywy debugowania w środowisku Eclipse
Możesz debugować reguły podczas wykonywania aplikacji Drools. Możesz dodać punkty przerwania w konsekwencjach swoich reguł, a za każdym razem, gdy taki punkt przerwania zostanie napotkany podczas wykonywania reguł, wykonanie jest tymczasowo zatrzymywane. Następnie można sprawdzić znane w tym momencie zmienne, podobnie jak w aplikacji Java, i użyć zwykłych opcji debugowania dostępnych w Eclipse.
Aby utworzyć punkt przerwania w pliku DRL, po prostu kliknij dwukrotnie wiersz, w którym chcesz utworzyć punkt przerwania. Pamiętaj, że możesz utworzyć punkt przerwania tylko wthenczęść reguły. Punkt przerwania można usunąć, klikając dwukrotnie punkt przerwania w edytorze DRL.
Po zastosowaniu punktów przerwania należy debugować aplikację jako aplikację Drools. Punkty przerwania Drools (punkty przerwania w pliku DRL) będą działać tylko wtedy, gdy aplikacja jest debugowana jako aplikacja Drools. Oto, jak musisz zrobić to samo -
Po debugowaniu aplikacji jako aplikacji Drools zobaczysz kontrolkę w pliku DRL, jak pokazano na poniższym zrzucie ekranu -
Możesz zobaczyć zmienne i bieżące wartości obiektu w tym punkcie debugowania. Ta sama funkcja F6, aby przejść do następnego wiersza i F8, aby przejść do następnego punktu debugowania, ma również zastosowanie tutaj. W ten sposób możesz debugować swoją aplikację Drools.
Note - Perspektywa debugowania w aplikacji Drools działa tylko wtedy, gdy dialektem jest MVEL do wersji Drools 5.x.