Ich bin dabei, von Drools 5.5.0.Final zu Drools 6.5.0.CR2 zu aktualisieren, und ich bin in ein Problem mit einem benutzerdefinierten Ereignis-Listener, der zuhört für ObjectInsertedEvents und verweist auf die LHS der Regel, die die Einfügung ausgelöst hat. Abhängig von den Typen der LHS-Bindungen der gefeuerten Regel aktualisiert der Listener eine Eigenschaft des neu eingefügten Fakts.Drools 6 - Zugriff auf die LHS eines ObjectInsertedEvent
In Drools 5, haben wir diese mit einem benutzerdefinierten Ereignis-Listener, die DebugWorkingMemoryEventListener erweitert und umgesetzt WorkingMemoryEventListener:
public void objectInserted(ObjectInsertedEvent event) {
Rule firedRule = event.getPropagationContext().getRuleOrigin();
if (firedRule != null) {
PropagationContext pc = event.getPropagationContext();
Tuple tuple = pc.getLeftTupleOrigin();
Map<String, Declaration> declarationsMap = firedRule.getDeclarations();
// Iterate through the LHS variable bindings
for (Map.Entry<String, Declaration> entry : declarationsMap.entrySet()) {
// Get the value, via the handle to the fact in working memory to which the variable is bound
Declaration declaration = entry.getValue();
FactHandle factHandle = tuple.get(declaration);
// Get the object in working memory via the fact handle
Object bindingObj = ss.getObject(factHandle)
// do some other checks, update the inserted object if necessary
}
}
}
WorkingMemoryEventListener in geifert 6 veraltet, also habe ich zu RuleRuntimeEventListener aktualisiert, aber es sieht aus wie ich kann nicht mehr auf die LHS der Regel zugreifen, die das ObjectInsertedEvent ausgelöst hat, nur einige grundlegende Informationen über die Regel selbst (Name, Paket, Metadaten). Alternativ könnte ich mit einem AgendaEventListener und AfterMatchFiredEvent auf die LHS einer gefeuerten Regel zugreifen, aber das 1) sagt mir nicht, ob ein Objekt eingefügt wurde, und 2) gibt mir keine Möglichkeit, dieses Objekt zu aktualisieren, selbst wenn ich könnte Bestimmen Sie, ob es eingefügt wurde.
Wie kann ich das Listener-Verhalten replizieren, das ich in Drools 5 mit diesen Drools 6 API-Änderungen hatte? Vielen Dank.