Почему не исполняются правила при запуске kieSession.fireAllRules()?
Не исполняются правила при запуске kieSession.fireAllRules()
, что делать? (используетcя maven
и drools
).
Не выводятся System.out.println("The product is on promotion!")
в файле с правилами.
Проект находится здесь.
Код проекта:
main.java:
package com.javainuse.main;
import org.drools.core.base.RuleNameEqualsAgendaFilter;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.internal.io.ResourceFactory;
import com.javainuse.model.Product;
public class Main {
public static void main(String[] args) {
KieServices kieServices = KieServices.Factory.get();
// Создание объекта KieFileSystem и добавление файла правил в файловую систему
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(ResourceFactory.newClassPathResource("./rules.drl"));
// Создание объекта KieBuilder для компиляции файлов правил и построения KieModule
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieModule kieModule = kieBuilder.getKieModule();
// Создание KieContainer из KieModule и получение KieSession из контейнера
KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());
KieSession kieSession = kieContainer.newKieSession();
// Вставка фактов (facts) в KieSession
Product product = new Product("soda", 5, true, 2);
kieSession.insert(product);
// Запуск правил в KieSession
kieSession.fireAllRules();
}
}
Product.java:
package com.javainuse.model;
public class Product {
public String name;
public int quantity;
public boolean onPromotion;
public int emptyBottles;
public Product(String name, int quantity, boolean onPromotion, int emptyBottles) {
this.name = name;
this.quantity = quantity;
this.onPromotion = onPromotion;
this.emptyBottles = emptyBottles;
}
}
Rules.drl:
import com.javainuse.model.Product
rule "Check promotion"
when
$p : Product(name == "soda", onPromotion == true)
then
System.out.println("The product is on promotion!");
end
rule "Check number of bottles"
when
$p : Product(name == "soda", quantity >= 2)
then
System.out.println("You can exchange two empty bottles for one new bottle!");
end
rule "Check number of empty bottles"
when
$p : Product(name == "soda", emptyBottles >= 2)
then
System.out.println("You can exchange two empty bottles for one new bottle!");
end
Источник: Stack Overflow на русском