我正在按照springboot中的一个简单教程,尝试使用Drools 7.0.0构建我的第一个规则。但是,我被困在规则构建的第一步,由于.drl文件(定义了我唯一的规则)中的错误,它只是无法实例化我的KieModule.java!
这是我的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()也不起作用,并产生不匹配的输入错误。为什么我的规则无效?我没有线索。请帮助我!
我正在按照springboot中的一个简单教程,尝试使用Drools 7.0.0构建我的第一个规则。但是,我停留在建立规则的第一步,它只是不会实例化我的...
问题出在软件包名称中。