Учебники

Слюни – отладка

Существуют разные способы отладки проекта Drools. Здесь мы напишем класс Utility, чтобы вы знали, какие правила запускаются или запускаются.

При таком подходе вы можете проверить, какие все правила запускаются в вашем проекте Drools. Вот наш полезный класс

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());
   }
}

Первый метод help печатает сработавшее правило вместе с некоторой дополнительной информацией, которую вы можете передать как String через файл DRL.

Второй помощник правила печатает, было ли вызвано конкретное правило или нет.

Мы добавили один из методов Utility в каждый файл DRL. Мы также добавили функцию импорта в файл DRL (Pune.drl). В тогдашнюю часть правила мы добавили вызов служебной функции. Модифицированный Pune.drl приведен ниже. Изменения выделены синим цветом.

Модифицированный 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

Точно так же мы добавили другую вспомогательную функцию во второй файл DRL (Nagpur.drl). Вот модифицированный код –

Модифицированный 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

Запустите программу еще раз, и она должна выдать следующий результат:

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

Обе функции полезности вызываются, и это показывает, было ли вызвано определенное правило или нет. В приведенном выше примере вызываются все правила, но в корпоративном приложении эта служебная функция может быть действительно полезна для отладки и определения, было ли выполнено определенное правило или нет.

Использование перспективы отладки в Eclipse

Вы можете отлаживать правила во время выполнения вашего приложения Drools. Вы можете добавить точки останова в последствия ваших правил, и всякий раз, когда такая точка останова встречается во время выполнения правил, выполнение временно останавливается. Затем вы можете проверить переменные, известные на тот момент, как в Java-приложении, и использовать обычные параметры отладки, доступные в Eclipse.

Чтобы создать точку останова в вашем файле DRL, просто дважды щелкните строку, где вы хотите создать точку останова. Помните, что вы можете создать точку останова только в тогдашней части правила. Точку останова можно удалить, дважды щелкнув точку останова в редакторе DRL.

После применения точек останова вам необходимо отладить ваше приложение как приложение Drools. Точки останова Drools (точки останова в файле DRL) будут работать только в том случае, если ваше приложение отлаживается как приложение Drools. Вот как вам нужно сделать то же самое –

Слюни Применение

Как только вы отладите свое приложение как приложение Drools, вы увидите элемент управления в файле DRL, как показано на следующем снимке экрана:

Eclipse Platform

Вы можете увидеть переменные и текущие значения объекта в этой точке отладки. То же управление F6 для перехода к следующей строке и F8 для перехода к следующей точке отладки применимы и здесь. Таким образом, вы можете отлаживать приложение Drools.

Примечание . Перспектива отладки в приложении Drools работает только в том случае, если диалект MVEL до версии Drools 5.x.