Skip to content

Commit

Permalink
[DROOLS-818] register declared listeners on StatelessKieSession
Browse files Browse the repository at this point in the history
(cherry picked from commit 0e8fb56)
  • Loading branch information
mariofusco committed Aug 10, 2015
1 parent 42753e2 commit 7c0e248
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 22 deletions.
Expand Up @@ -569,11 +569,10 @@ public KieSession newKieSession(String kSessionName, Environment environment, Ki
log.error("Unknown KieBase name: " + kSessionModel.getKieBaseModel().getName());
return null;
}

KieSession kSession = kBase.newKieSession( conf != null ? conf : getKnowledgeSessionConfiguration(kSessionModel), environment );
wireListnersAndWIHs(kSessionModel, kSession);

registerLoggers(kSessionModel, kSession);

kSessions.put(kSessionName, kSession);
return kSession;
}
Expand Down Expand Up @@ -611,7 +610,9 @@ public StatelessKieSession newStatelessKieSession(String kSessionName, KieSessio
log.error("Unknown KieBase name: " + kSessionModel.getKieBaseModel().getName());
return null;
}

StatelessKieSession statelessKieSession = kBase.newStatelessKieSession( conf != null ? conf : getKnowledgeSessionConfiguration(kSessionModel) );
wireListnersAndWIHs(kSessionModel, statelessKieSession);
registerLoggers(kSessionModel, statelessKieSession);
statelessKSessions.put(kSessionName, statelessKieSession);
return statelessKieSession;
Expand Down
@@ -1,14 +1,5 @@
package org.drools.compiler.kie.util;

import java.lang.annotation.Annotation;
import java.util.Map;
import java.util.Set;

import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.drools.core.impl.InternalKnowledgeBase;
import org.drools.core.util.MVELSafeHelper;
import org.kie.api.builder.model.KieSessionModel;
Expand All @@ -19,11 +10,20 @@
import org.kie.api.event.rule.AgendaEventListener;
import org.kie.api.event.rule.RuleRuntimeEventListener;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.StatelessKieSession;
import org.kie.api.runtime.process.WorkItemHandler;
import org.mvel2.MVEL;
import org.mvel2.ParserConfiguration;
import org.mvel2.ParserContext;

import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.lang.annotation.Annotation;
import java.util.Map;
import java.util.Set;

public class CDIHelper {

public static void wireListnersAndWIHs(KieSessionModel model, KieSession kSession) {
Expand All @@ -43,17 +43,7 @@ private static void wireListnersAndWIHs(BeanCreator beanCreator, KieSessionModel
ClassLoader cl = ((InternalKnowledgeBase)kSession.getKieBase()).getRootClassLoader();

for (ListenerModel listenerModel : model.getListenerModels()) {
Object listener;
try {
listener = beanCreator.createBean(cl, listenerModel.getType(), listenerModel.getQualifierModel());
} catch (Exception e) {
try {
listener = fallbackBeanCreator.createBean(cl, listenerModel.getType(), listenerModel.getQualifierModel());
} catch (Exception ex) {
throw new RuntimeException("Cannot instance listener " + listenerModel.getType(), e);
}

}
Object listener = createListener( beanCreator, fallbackBeanCreator, cl, listenerModel );
switch(listenerModel.getKind()) {
case AGENDA_EVENT_LISTENER:
kSession.addEventListener((AgendaEventListener)listener);
Expand All @@ -79,7 +69,53 @@ private static void wireListnersAndWIHs(BeanCreator beanCreator, KieSessionModel
}
kSession.getWorkItemManager().registerWorkItemHandler(wihModel.getName(), wih );
}
}

public static void wireListnersAndWIHs(KieSessionModel model, StatelessKieSession kSession) {
wireListnersAndWIHs(BeanCreatorHolder.beanCreator, model, kSession);
}

public static void wireListnersAndWIHs(BeanManager beanManager, KieSessionModel model, StatelessKieSession kSession) {
wireListnersAndWIHs(new CDIBeanCreator(beanManager), model, kSession);
}

public static void wireListnersAndWIHs(KieSessionModel model, StatelessKieSession kSession, Map<String, Object> parameters) {
wireListnersAndWIHs(new MVELBeanCreator(parameters), model, kSession);
}

private static void wireListnersAndWIHs(BeanCreator beanCreator, KieSessionModel model, StatelessKieSession kSession) {
BeanCreator fallbackBeanCreator = new ReflectionBeanCreator();
ClassLoader cl = ((InternalKnowledgeBase)kSession.getKieBase()).getRootClassLoader();

for (ListenerModel listenerModel : model.getListenerModels()) {
Object listener = createListener( beanCreator, fallbackBeanCreator, cl, listenerModel );
switch(listenerModel.getKind()) {
case AGENDA_EVENT_LISTENER:
kSession.addEventListener((AgendaEventListener)listener);
break;
case RULE_RUNTIME_EVENT_LISTENER:
kSession.addEventListener((RuleRuntimeEventListener)listener);
break;
case PROCESS_EVENT_LISTENER:
kSession.addEventListener((ProcessEventListener)listener);
break;
}
}
}

private static Object createListener( BeanCreator beanCreator, BeanCreator fallbackBeanCreator, ClassLoader cl, ListenerModel listenerModel ) {
Object listener;
try {
listener = beanCreator.createBean(cl, listenerModel.getType(), listenerModel.getQualifierModel());
} catch (Exception e) {
try {
listener = fallbackBeanCreator.createBean(cl, listenerModel.getType(), listenerModel.getQualifierModel());
} catch (Exception ex) {
throw new RuntimeException("Cannot instance listener " + listenerModel.getType(), e);
}

}
return listener;
}

private static class BeanCreatorHolder {
Expand Down

0 comments on commit 7c0e248

Please sign in to comment.