Je travaille sur un projet qui exécute Drools 5.5 pour un système de moteur de promotion. J'ai du mal à comprendre l'étape de la compilation lorsque je construis la base de connaissances.Est-ce que ce drl doit être compilé?
C'est le cas: J'ai un drl qui effectue une collecte (LHS) sur une liste avec la condition taille> = int. Le système qui génère le drl, l'a fait mal et maintenant j'ai des exceptions d'exécution. Maintenant, j'essaie de comprendre comment la compilation fonctionne sur les baves pour cette affaire.
La chose est, sur ce Collect, la contrainte (taille> = quelque chose, où quelque chose n'est pas un entier) n'est pas validé par les Drools 5.5 compilateur, et l'exception n'exploser dans l'exécution:
$COLLECT_ALL : ArrayList (size >= something)
from collect (Product (...))
Mais, le même code est validé sur les drools 5.0.0 et je suis capable de supprimer cette règle avant la création de la base de connaissances.
Je ne sais pas si c'est un bug ou une mauvaise compréhension du LHS sur les baves.
Quoi qu'il en soit, c'est l'étape de validation que je travaille sur
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add(ResourceFactory.newByteArrayResource(rule.getBytes()) , ResourceType.DRL);
if (builder.hasErrors()) {
createErrorMessage(builder);
}
Techniquement, ce n'est pas une déclaration java valide. "quelque chose" est vraiment quelque chose. Je sais que cela semble étrange, mais c'est juste un mot dans le fichier. Ressemble à une variable, mais elle n'est jamais déclarée. Exemple: 'rule" XYZ "quand $ COLLECT_ALL: ArrayList (taille> = tag-xyz) de collect (Produit (...)) puis ...' – VitorBtf
Merci pour la clarification. - Il semble qu'il y ait une différence w.r.t. rapport d'erreurs. Une erreur similaire dans 'Product' est signalée au moment de la compilation. Je poursuis cela sur la liste des utilisateurs de Drools. – laune
Voir l'ajout à ma réponse. – laune