package org.drools.grid.distributed.command; import java.rmi.RemoteException; import java.util.logging.Level; import java.util.logging.Logger; import org.drools.KnowledgeBase; import org.drools.command.Context; import org.drools.command.impl.GenericCommand; import org.drools.command.impl.KnowledgeCommandContext; import org.drools.grid.ConnectorException; import org.drools.grid.DirectoryNodeService; import org.drools.runtime.KnowledgeSessionConfiguration; import org.drools.runtime.StatefulKnowledgeSession; public class NewStatefulKnowledgeSessionGridCommand implements GenericCommand<StatefulKnowledgeSession> { private KnowledgeSessionConfiguration ksessionConf; private String kbaseId; public NewStatefulKnowledgeSessionGridCommand(KnowledgeSessionConfiguration ksessionConf) { this.ksessionConf = ksessionConf; } public NewStatefulKnowledgeSessionGridCommand(KnowledgeSessionConfiguration ksessionConf, String kbaseId) { this.ksessionConf = ksessionConf; this.kbaseId = kbaseId; } public StatefulKnowledgeSession execute(Context context) { KnowledgeBase kbase = ((KnowledgeCommandContext) context).getKnowledgeBase(); DirectoryNodeService registry = (DirectoryNodeService) context.get( "registry" ); StatefulKnowledgeSession ksession; if ( kbase == null ) { try { //@TODO: need to find the best way to injec the service in the command or the command executor. //lookup in the registry service. kbase = registry.lookupKBase( this.kbaseId ); } catch ( RemoteException ex ) { Logger.getLogger( NewStatefulKnowledgeSessionGridCommand.class.getName() ).log( Level.SEVERE, null, ex ); } catch ( ConnectorException ex ) { Logger.getLogger( NewStatefulKnowledgeSessionGridCommand.class.getName() ).log( Level.SEVERE, null, ex ); } } if ( this.ksessionConf == null ) { ksession = kbase.newStatefulKnowledgeSession(); } else { ksession = kbase.newStatefulKnowledgeSession( this.ksessionConf, null ); } return ksession; } }