Существуют разные способы отладки проекта 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, как показано на следующем снимке экрана:
Вы можете увидеть переменные и текущие значения объекта в этой точке отладки. То же управление F6 для перехода к следующей строке и F8 для перехода к следующей точке отладки применимы и здесь. Таким образом, вы можете отлаживать приложение Drools.
Примечание . Перспектива отладки в приложении Drools работает только в том случае, если диалект MVEL до версии Drools 5.x.