Je rencontre un comportement étrange dans Drools 4.0.7, mais c'est peut-être juste parce que je ne comprends pas comment fonctionne Drools. Supposons qu'il existe une classe "A" qui a une propriété appelée "propriété".La rétraction de Drools fait que la règle ne se déclenche pas
Comme faits, j'ai la liste suivante d'A: A1, property = 123 A2, property = 345 A3, propriété = 123
J'ai deux règles suivantes:
rule "Rule 1 - Remove all A's that have property set to 123"
salience 1000
lock-on-active true
when
$listOfAs : ArrayList collect(A(property == "123"))
then
for (Object a: $listOfAs) {
retract (a)
}
end
rule "Rule 2 - Do stuff with remaining A's"
salience 900
lock-on-active true
when
$listOfAs : ArrayList collect(A())
then
...
end
Ma compréhension est "Règle 1" va supprimer les faits de la classe A qui ont la propriété à 123. Quand il arrive à "Règle 2", ne devrait pas le "listOfAs" seulement celui qui reste (c'est-à-dire celui où la propriété est réglé sur "345"). Ce que je remarque, c'est que "Règle 2" ne s'exécute tout simplement pas même si je suppose qu'il y a toujours un objet "A" qui n'a pas été rétracté. Si je commente le "se rétracter" il exécute "Règle 2" très bien.
Est-ce qu'il me manque quelque chose à propos de ces règles?
Merci. Justin
Avez-vous réussi à le faire fonctionner? J'observe aussi le comportement similaire dans Drools 5.4. –