JBoss Community

ProcessEventListener methods executed twice

created by Sebastien Lelarge in jBPM - View the full discussion

Hi,

 

I am playing with ProcessEventListener implementation and I have the feeling that methods are executed twice for the same Node.

For now, I am just tracing a message when a method is triggered and I get it twice in the log file !

My goal is to fire rules when I reach a Rule Task Node because I have issues if I fireAllRules at process startup...

What's wrong ?

 

Here's how I initialize the ksession

{code}

ksession =  JPAKnowledgeService.newStatefulKnowledgeSession(base, kconfig,

JPAWorkingMemoryDbLogger wkfLogger = new JPAWorkingMemoryDbLogger(ksession);

 

ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new CommandBasedWSHumanTaskHandler(ksession));

           

ksession.addEventListener(new JbpmProcessEventListener(ksession));

{code}

 

here's the code of my EventListener:

{code}

import org.drools.event.process.ProcessCompletedEvent;

import org.drools.event.process.ProcessEventListener;

import org.drools.event.process.ProcessNodeLeftEvent;

import org.drools.event.process.ProcessNodeTriggeredEvent;

import org.drools.event.process.ProcessStartedEvent;

import org.drools.event.process.ProcessVariableChangedEvent;

import org.drools.runtime.StatefulKnowledgeSession;

import org.jbpm.workflow.core.node.RuleSetNode;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class JbpmProcessEventListener implements ProcessEventListener {

 

                private StatefulKnowledgeSession session;

                private static Logger logger = LoggerFactory.getLogger(JbpmProcessEventListener.class);

               

                public JbpmProcessEventListener(StatefulKnowledgeSession ksession){

                               session = ksession;

                }

               

                public void beforeVariableChanged(ProcessVariableChangedEvent event) {

                }

               

                public void beforeProcessStarted(ProcessStartedEvent event) {

                }

               

                public void beforeProcessCompleted(ProcessCompletedEvent event) {

                }

               

                public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {

                   

                    logger.debug("beforeNodeTriggered: " + event.getNodeInstance().getNode().getClass());

                    logger.debug("beforeNodeTriggered: " + event.getNodeInstance().getNode().getName());

                    if (event.getNodeInstance().getNode() instanceof RuleSetNode) {

                        session.fireAllRules();

                    }

                }

               

                public void beforeNodeLeft(ProcessNodeLeftEvent event) {

                 }

               

                public void afterVariableChanged(ProcessVariableChangedEvent event) {

                }

               

                public void afterProcessStarted(ProcessStartedEvent event) {

                }

               

                public void afterProcessCompleted(ProcessCompletedEvent event) {

                }

               

                public void afterNodeTriggered(ProcessNodeTriggeredEvent event) {

                }

               

                public void afterNodeLeft(ProcessNodeLeftEvent event) {

                }

 

}

{code}

Reply to this message by going to Community

Start a new discussion in jBPM at Community