0
我有一個動態創建的規則列表。立即創建後,我檢查是否有任何錯誤。但我找不到一種方法來動態地刪除那些有錯誤的規則。如何刪除有錯誤的規則
public void validateRule(List<String> rules, Collection<AbstractFact> facts) {
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
int ruleIndex = 0;
for (String rule : rules) {
StringBuilder ruleName = new StringBuilder("src/main/resources/rule");
ruleName.append(ruleIndex).append(".drl");
kieFileSystem.write(ruleName.toString(), rule);
ruleIndex ++;
}
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll();
if (kieBuilder.getResults().hasMessages(Message.Level.ERROR)) {
//Remove rules which are failing
}
KieContainer container = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieSession ksession = container.newKieSession();
for (AbstractFact fact : facts) { // Insert All the facts
ksession.insert(fact);
}
ksession.fireAllRules();
}
Drools的文件進行驗證
template header
name
package test;
template "test template"
rule "test rule"
when
$fact : Fact(code !=) // expression is wrong intentionally
then
$fact.setOk(false);
end
end template
buildAll()總是適合我。但是,創建newKieContainer時規則失敗。例如,規則的表達是不正確的。 (code!=) – UserAdi
您的評論對我來說無法理解。也許你會將構建器的錯誤消息添加到您的問題中,或者您將獲得什麼作爲異常以及堆棧跟蹤。 – laune