【发布时间】:2020-01-23 15:56:06
【问题描述】:
我目前正在尝试按照 springboot 中的简单教程使用 Drools 7.0.0 构建我的第一个规则。但是,我被困在规则构建的第一步,它不会实例化我的 KieModule.java,因为我的 .drl 文件中的错误(我唯一的规则在其中定义)!
这是我的 Bean 定义(它在 .buildAll() 方法处中断):
/**
* Used by the Drools engine.
*
* @return KieContainer used by Drools.
*/
@Bean
@DependsOn({"kStreamJson"})
public KieContainer kieContainer() {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(ResourceFactory.newClassPathResource(drlFile));
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieModule kieModule = kieBuilder.getKieModule();
return kieServices.newKieContainer(kieModule.getReleaseId());
}
这是我的 .drl 文件(问题的根源):
package com.ruleengine;
import com.ruleengine.domain.Alert;
import com.unifiedformat.UnifiedData;
import java.util.*;
global com.ruleengine.domain.Alert alert;
dialect "mvel"
function Double getMae(UnifiedData unifiedData) {
return Double.valueOf(unifiedData.getData().getValue());
}
rule "Check MAE - Scenario 1"
when
mae:Double(getMae(UnifiedData(getData().getValue()) > 0.1);
then
alert.setAlertMessage("ok");
end
这是我得到的错误:
2020-01-23 10:53:16.098 ERROR 3544 --- [ main] o.d.c.k.builder.impl.AbstractKieModule : Unable to build KieBaseModel:defaultKieBase
[18,8]: [ERR 102] Line 18:8 mismatched input 'alert' in rule "Check MAE - Scenario 1"
[0,0]: Parser returned a null Package
我尝试了所有我能想到的方法,但我不是 Drools 的专家。无论我放什么字符串而不是警报都会使它中断。甚至 System.out.println() 也不起作用并产生不匹配的输入错误。为什么我的规则无效?我没有线索。请帮帮我!
【问题讨论】:
标签: java spring-boot drools rules