ProcessEventListener methods executed twice
slelarge Oct 18, 2011 12:09 PMHi,
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:java}
ksession = JPAKnowledgeService.newStatefulKnowledgeSession(base, kconfig,
JPAWorkingMemoryDbLogger wkfLogger = new JPAWorkingMemoryDbLogger(ksession);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new CommandBasedWSHumanTaskHandler(ksession));
ksession.addEventListener(new JbpmProcessEventListener(ksession));
{code:java}
here's the code of my EventListener:
{code:java}
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:java}