Почему не исполняются правила при запуске kieSession.fireAllRules()?

Рейтинг: 1Ответов: 0Опубликовано: 13.03.2023

Не исполняются правила при запуске 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

Ответы

Ответов пока нет.