J'ai une liste de règles créées dynamiquement. Immédiatement après sa création, je vérifie s'il y a des erreurs. Mais je ne peux pas trouver un moyen de supprimer ces règles ayant des erreurs de manière dynamique.Comment faire pour supprimer les règles qui ont des erreurs
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 fichier pour la validation
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() fonctionne toujours pour moi. Mais la règle échoue lorsque newKieContainer est créé. Par exemple, l'expression de la règle est incorrecte. (code! =) – UserAdi
Votre commentaire est incompréhensible pour moi. Peut-être que vous ajoutez les messages d'erreur du constructeur à votre question, ou quoi d'autre vous obtenez comme une exception, et pile trace. – laune