2016-08-04 24 views
0

Ich habe eine einfache Regeldateigeifert 6 - StatelessKieSession - Eventlistener

rule 'rule name 1' 
    when 
    $i: Test(param1 < 20) 
    then 
    $i.setStatus('Param1 has invalid value'); 
end 

rule 'rule name 2' 
     when 
     $i: Test(param1 > 20) 
     then 
     $i.setStatus('Param2 has invalid value'); 
    end 

rule 'rule name 3' 
     when 
     $i: Test(param1 == 100) 
     then 
     $i.setStatus('Param3 has invalid value'); 
    end 

I StatelessKieSession oben ein Datenobjekt über die Regeln auszuführen.

Qn 1: Was ist der einfachste Weg, um eine Methode/Listener nach der Ausführung aller Regeln auszulösen oder Woher wissen wir, dass alle Regeln ausgeführt wurden?

Qn 2: Wenn wir dem StatelessKieSession-Objekt einen Listener hinzufügen können, gibt es eine Möglichkeit, ein Objekt an den Listener zu übergeben?

+0

Mit * ALLE Regeln * Sie meinen "alle Regeln, die in der DRL definiert wurden, wurden mindestens eine ausgeführt" oder "alle Regeln, die hätten ausgeführt werden können, wurden tatsächlich ausgeführt"? –

+0

@Esteban, ich bezog mich auf "alle Regeln, die ausgeführt werden könnten, wurden tatsächlich ausgeführt" – Jay

Antwort

1

Sie können alle Regelnamen abrufen, indem Sie die KieBase überprüfen - siehe API-Dokumentation.

Sie können einen Listener gemäß der API einrichten. Die Methode, die aufgerufen wird, wenn eine Regel ausgelöst wird, ermöglicht Ihnen, genau das in einer Map oder ähnlichem zu registrieren.

Da ein Listener ein Objekt mit einer bestimmten Schnittstelle ist, kann es einen beliebigen Konstruktor und/oder zusätzliche Methoden haben, mit denen Sie beliebige Daten an diesen Listener übergeben können.

Verwandte Themen