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.