2016-12-06 3 views

Répondre

0

Pouvez-vous être plus clair sur ce que vous entendez sur la réinitialisation de la session?

Si vous avez un état persistant dans les règles pour une session longue, vous pouvez le garder ouvert, ajouter de nouveaux faits et appeler toutes les règles au besoin. Cela a des implications sur l'utilisation de la mémoire si vous gardez les faits dans la mémoire de travail indéfiniment. Voir l'exemple 1 pour cela.

Si à chaque fois que vous appelez vos règles, vous voulez les appeler et vider la mémoire de travail plutôt que d'appeler session.dispose() une fois que vous avez terminé et créer une nouvelle KieSession pour chaque exécution de règle. Voir l'exemple 2.

Exemple 1

public class MyClass(){ 
    ... // initialize KieServices/KieContainers 
    private KieSession myLongRunningSession = kContainer.newKieSession("long-running-session"); 

    public void executeMyRules(Object myFact) { 
     myLongRunningSession.insert(myFact); 
     myLongRunningSession.fireAllRules(); 
     // do whatever else you need to do 
    } 
} 

Exemple 2

public void executeMyRules(Object myFact, Object myOtherFact) { 
    KieSession session = kContainer.newKieSession("my-session"); 
    session.insert(myfact); 
    session.insert(myOtherFact); 
    session.fireAllRules(); 
    ... // do whatever you need to 
    session.dispose(); 
}