Dies sollte einfach sein, aber ich bin immer noch verloren. Es gibt eine sehr ähnliche Position hier: How to share data between Drools rules in a map? aber es behebt nicht mein Problem:Teilen Sie Daten unter Regeln mit einer Karte
Ich habe eine Reihe von Regeln und, bevor sie starten, füge ich eine Karte < String, Object > als Tatsache. In diesen Regeln, die ich die Karte verwenden, um einige Schlussfolgerungen wie zu schreiben:
when
$map : Map();
something ocurrs;
then
$map.put("conclusion1", 100);
Nun würde ich diese Zwischen Schlussfolgerungen in anderen Regeln verwenden möchten, so etwas wie:
when
$map : Map(this["conclusion1"] > 50)
then
do something cool;
Das Problem ist, dass, wenn ich führe die Regeln aus, so wie die zweite Regel die Schlussfolgerungen des ersten nicht sieht und sie nicht feuert. Ich habe versucht, einen Haltepunkt zu setzen und das Arbeitsgedächtnis zu analysieren, und in der Tat würde die Karte die Schlussfolgerung1, 100 enthalten, nachdem die erste Regel gefeuert wurde. Ich habe auch versucht, indem Sie eine Aktualisierung ($ map) in der Schlussfolgerung machen, aber das würde eine Endlosschleife auslösen.
Eine Idee, warum das nicht funktionieren würde, oder eine alternative Lösung für mein Problem?
Danke!
Und um das Endlosschleife Problem zu adressieren, aktualisieren Sie die Regel, die das Element "conclusion1" auf die Karte setzt, nur dann, wenn "conclusion1" noch nicht existiert; d.h., Map (containsKey ("conclusion1") == false) '. Dies verhindert, dass die Regel reaktiviert wird, wenn "Schlussfolgerung1" Teil des Keysets ist. – mike9322