package org.drools.runtime.pipeline.impl;

import org.drools.common.InternalRuleBase;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.pipeline.Pipeline;
import org.drools.runtime.pipeline.ResultHandler;
import org.drools.runtime.rule.WorkingMemoryEntryPoint;

public class StatefulKnowledgeSessionPipelineImpl extends BaseEmitter
    implements
    Pipeline {
    private StatefulKnowledgeSession ksession;
    private WorkingMemoryEntryPoint  entryPoint;

    public StatefulKnowledgeSessionPipelineImpl(StatefulKnowledgeSession ksession) {
        this.ksession = ksession;
        this.entryPoint = ksession;
    }

    public StatefulKnowledgeSessionPipelineImpl(StatefulKnowledgeSession ksession,
                                                String entryPointName) {
        this.ksession = ksession;
        this.entryPoint = ksession.getWorkingMemoryEntryPoint( entryPointName );
    }

    public synchronized void insert(Object object,
                                    ResultHandler resultHandler) {
        ClassLoader cl = ((InternalRuleBase) ((StatefulKnowledgeSessionImpl) this.ksession).getRuleBase()).getRootClassLoader();

        StatefulKnowledgeSessionPipelineContextImpl context = new StatefulKnowledgeSessionPipelineContextImpl( this.ksession,
                                                                                                               this.entryPoint,
                                                                                                               resultHandler,
                                                                                                               cl );
        emit( object,
              context );
    }

}

@@ -78,24 +78,67 @@
 lRuleBase;%0D%0A
+import org.drools.impl.KnowledgeBaseImpl;%0D%0A
 import org.d
@@ -1206,16 +1206,201 @@
 uleBase)
+ (  %0D%0A                                                (%0D%0A                                                    (KnowledgeBaseImpl)%0D%0A                                                       
  ((State
@@ -1418,20 +1418,16 @@
 eSession
-Impl
 ) this.k
@@ -1433,16 +1433,86 @@
 ksession
+).getKnowledgeBase()%0D%0A                                                
 ).getRul
@@ -1519,16 +1519,17 @@
 eBase())
+)
 .getRoot

fix insert method to support CommandBased sessions