[jboss-svn-commits] JBL Code SVN: r25515 - in labs/jbossrules/trunk: drools-api/src/main/java/org/drools and 34 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Mar 6 01:30:32 EST 2009


Author: mark.proctor at jboss.com
Date: 2009-03-06 01:30:32 -0500 (Fri, 06 Mar 2009)
New Revision: 25515

Added:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/Command.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecution.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecutionResult.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecutor.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchRequestMessage.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelper.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelperProvider.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResults.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResultsRow.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/batch/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertElementsCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/QueryCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchMessageHelperProviderImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionResultImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/BatchExecutorStage.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertElementsCommandStage.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertObjectCommandStage.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResultRow.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResultRow.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/Cheese.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
Removed:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessKnowledgeSessionPipelineTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatelessKnowledgeSessionExecuteStage.java
Modified:
   labs/jbossrules/trunk/drools-api/.classpath
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineContext.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java
   labs/jbossrules/trunk/drools-compiler/.classpath
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
   labs/jbossrules/trunk/drools-core/.classpath
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AddEventListenerCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireUntilHaltCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetAgendaCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetAgendaEventListenersCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetEnvironmentCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetFactHandleCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetFactHandlesCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetGlobalCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetGlobalsCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetKnowledgeBaseCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessEventListenersCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstancesCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetSessionClockCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetWorkingMemoryEntryPointCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetWorkingMemoryEventListenersCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/HaltCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RegisterExitPointCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RegisterWorkItemHandlerCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RemoveEventListenerCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RetractCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SetGlobalCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/UnregisterExitPointCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/UpdateCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/BasePipelineContext.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/CorePipelineProviderImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatefulKnowledgeSessionPipelineContextImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatelessKnowledgeSessionPipelineContextImpl.java
   labs/jbossrules/trunk/drools-persistence-jpa/.classpath
   labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
   labs/jbossrules/trunk/drools-pipeline/drools-messenger-jms/.classpath
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/.classpath
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-jxls/.classpath
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-smooks/.classpath
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-smooks/src/test/java/org/drools/runtime/pipeline/impl/SmookStatelessSessionTest.java
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/.classpath
   labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamStatelessSessionTest.java
   labs/jbossrules/trunk/drools-server/.classpath
Log:
JBRULES-1993 BatchExeution and message format

Modified: labs/jbossrules/trunk/drools-api/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-api/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -16,23 +16,23 @@
   <classpathentry kind="var" path="M2_REPO/org/freemarker/freemarker/2.3.9/freemarker-2.3.9.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.0/jaxb-api-2.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.0.3/jaxb-impl-2.0.3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-xjc/2.0.3/jaxb-xjc-2.0.3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-impl/2.1.9/jaxb-impl-2.1.9.jar"/>
+  <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-xjc/2.1.9/jaxb-xjc-2.1.9.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/javax/jms/jms/1.1/jms-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/net/sf/jxls/jxls-reader/0.9.6/jxls-reader-0.9.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-commons/1.1/milyn-commons-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-smooks-core/1.1/milyn-smooks-core-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-smooks-javabean/1.1/milyn-smooks-javabean-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/1.3.12-java1.5/mvel-1.3.12-java1.5.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi/3.0.2-FINAL/poi-3.0.2-FINAL.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
   <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
   <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/Command.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/Command.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/Command.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,5 @@
+package org.drools.command;
+
+public interface Command<T> {
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactory.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,103 @@
+package org.drools.command;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.ProviderInitializationException;
+
+public class CommandFactory {
+    private static volatile CommandFactoryProvider provider;
+
+    public static Command newInsertObject(Object object) {
+        return getCommandFactoryProvider().newInsertObject( object );
+    }
+
+    public static Command newInsertObject(Object object,
+                                          String outIdentifier) {
+        return getCommandFactoryProvider().newInsertObject( object,
+                                                            outIdentifier );
+    }
+
+    public static Command newInsertElements(Collection collection) {
+        return getCommandFactoryProvider().newInsertElements( collection );
+    }
+
+    public static Command newSetGlobal(String identifier,
+                                       Object object) {
+        return getCommandFactoryProvider().newSetGlobal( identifier,
+                                                         object );
+    }
+
+    public static Command newSetGlobal(String identifier,
+                                       Object object,
+                                       boolean out) {
+        return getCommandFactoryProvider().newSetGlobal( identifier,
+                                                         object,
+                                                         out );
+    }
+
+    public static Command newSetGlobal(String identifier,
+                                       Object object,
+                                       String outIdentifier) {
+        return getCommandFactoryProvider().newSetGlobal( identifier,
+                                                         object,
+                                                         outIdentifier );
+    }
+
+    public static Command newGetGlobal(String identifier) {
+        return getCommandFactoryProvider().newGetGlobal( identifier );
+    }
+
+    public static Command newGetGlobal(String identifier,
+                                       String outIdentifier) {
+        return getCommandFactoryProvider().newGetGlobal( identifier,
+                                                         outIdentifier );
+    }
+
+    public static Command newStartProcess(String processId) {
+        return getCommandFactoryProvider().newStartProcess( processId );
+    }
+
+    public static Command newStartProcess(String processId,
+                                          Map<String, Object> parameters) {
+        return getCommandFactoryProvider().newStartProcess( processId );
+    }
+    
+    public static Command newQuery(String identifier,
+                                    String name) {
+        return getCommandFactoryProvider().newQuery( identifier, name );
+        
+    }
+    
+    public static Command newQuery(String identifier,
+                                    String name,
+                                    Object[] arguments) {
+        return getCommandFactoryProvider().newQuery( identifier, name, arguments );  
+    }    
+    
+    public static Command newBatchExecution(List<? extends Command> commands) {
+        return getCommandFactoryProvider().newBatchExecution( commands );
+    }
+
+    private static synchronized void setCommandFactoryProvider(CommandFactoryProvider provider) {
+        CommandFactory.provider = provider;
+    }
+
+    private static synchronized CommandFactoryProvider getCommandFactoryProvider() {
+        if ( provider == null ) {
+            loadProvider();
+        }
+        return provider;
+    }
+
+    private static void loadProvider() {
+        try {
+            Class<CommandFactoryProvider> cls = (Class<CommandFactoryProvider>) Class.forName( "org.drools.command.impl.CommandFactoryProviderImpl" );
+            setCommandFactoryProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new ProviderInitializationException( "Provider org.drools.command.impl.CommandFactoryProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/command/CommandFactoryProvider.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,44 @@
+package org.drools.command;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+public interface CommandFactoryProvider {
+    Command newInsertObject(Object object);
+
+    Command newInsertObject(Object object,
+                            String outIdentifier);
+
+    Command newInsertElements(Collection collection);
+
+    Command newSetGlobal(String identifie,
+                         Object object);
+
+    Command newSetGlobal(String identifier,
+                         Object object,
+                         boolean out);
+
+    Command newSetGlobal(String identifier,
+                         Object object,
+                         String outIdentifier);
+
+    Command newGetGlobal(String identifier);
+
+    Command newGetGlobal(String identifier,
+                         String outIdentifier);
+
+    Command newStartProcess(String processId);
+
+    Command newStartProcess(String processId,
+                            Map<String, Object> parameters);
+
+    Command newQuery(String identifier,
+                     String name);
+
+    Command newQuery(String identifier,
+                     String name,
+                     Object[] arguments);
+    
+    Command newBatchExecution(List<? extends Command> commands);
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecution.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecution.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecution.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,7 @@
+package org.drools.runtime;
+
+import org.drools.command.Command;
+
+public interface BatchExecution extends  Command {
+
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecutionResult.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecutionResult.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecutionResult.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,11 @@
+package org.drools.runtime;
+
+import java.util.Collection;
+
+public interface BatchExecutionResult {
+
+    Collection<String> getIdentifiers();
+
+    Object getValue(String identifier);
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecutor.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecutor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchExecutor.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,7 @@
+package org.drools.runtime;
+
+import org.drools.command.Command;
+
+public interface BatchExecutor {
+    public BatchExecutionResult execute(Command command);
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchRequestMessage.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchRequestMessage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/BatchRequestMessage.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,7 @@
+package org.drools.runtime;
+
+import java.util.List;
+
+public interface BatchRequestMessage {
+    List<org.drools.command.Command> getCommands();
+}

Deleted: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/FactParams.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,12 +0,0 @@
-package org.drools.runtime;
-
-import java.util.Collection;
-import java.util.Map;
-
-public interface FactParams {
-    void setIn(Map<String, ? > in);
-
-    void setOut(Collection<String> out);
-
-    void setInOut(Map<String, ? > inOut);
-}

Deleted: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/GlobalParams.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,15 +0,0 @@
-package org.drools.runtime;
-
-import java.util.Collection;
-import java.util.Map;
-
-/**
- *
- */
-public interface GlobalParams {
-    void setIn(Map<String, ? > in);
-
-    void setOut(Collection<String> out);
-
-    void setInOut(Map<String, ? > inOut);
-}

Deleted: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/Parameters.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,7 +0,0 @@
-package org.drools.runtime;
-
-public interface Parameters {
-    GlobalParams getGlobalParams();
-
-    FactParams getFactParams();
-}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatefulKnowledgeSession.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -61,6 +61,7 @@
     extends
     StatefulRuleSession,
     StatefulProcessSession,
+    BatchExecutor,
     KnowledgeRuntime {
 
     int getId();

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/StatelessKnowledgeSession.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -92,6 +92,7 @@
     extends
     StatelessRuleSession,
     StatelessProcessSession,
+    BatchExecutor,
     KnowledgeRuntimeEventManager {
 
     /**

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelper.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,37 @@
+package org.drools.runtime.help;
+
+import org.drools.ProviderInitializationException;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeBuilderProvider;
+import org.milyn.Smooks;
+
+import com.thoughtworks.xstream.XStream;
+
+public class BatchExecutionHelper {
+    private static volatile BatchExecutionHelperProvider provider;
+    
+    public static XStream newXStreamMarshaller() {
+        return getBatchExecutionHelperProvider().newXStreamMarshaller();
+    }
+    
+    private static synchronized void setBatchExecutionHelperProvider(BatchExecutionHelperProvider provider) {
+        BatchExecutionHelper.provider = provider;
+    }
+
+    private static synchronized BatchExecutionHelperProvider getBatchExecutionHelperProvider() {
+        if ( provider == null ) {
+            loadProvider();
+        }
+        return provider;
+    }
+
+    private static void loadProvider() {
+        try {
+            Class<BatchExecutionHelperProvider> cls = (Class<BatchExecutionHelperProvider>) Class.forName( "org.drools.runtime.help.impl.BatchMessageHelperProviderImpl" );
+            setBatchExecutionHelperProvider( cls.newInstance() );
+        } catch ( Exception e2 ) {
+            throw new ProviderInitializationException( "Provider org.drools.runtime.help.impl.BatchMessageHelperProviderImpl could not be set.",
+                                                       e2 );
+        }
+    }    
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelperProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelperProvider.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/help/BatchExecutionHelperProvider.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,7 @@
+package org.drools.runtime.help;
+
+import com.thoughtworks.xstream.XStream;
+
+public interface BatchExecutionHelperProvider {
+    XStream newXStreamMarshaller();
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/CorePipelineProvider.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -10,11 +10,16 @@
     Pipeline newStatefulKnowledgeSessionPipeline(StatefulKnowledgeSession ksession,
                                                  String entryPointName);
 
-    Pipeline newStatelessKnowledgeSessionPipelineImpl(StatelessKnowledgeSession ksession);
+    Pipeline newStatelessKnowledgeSessionPipeline(StatelessKnowledgeSession ksession);
+    
+    KnowledgeRuntimeCommand newBatchExecutor();
+    
+    KnowledgeRuntimeCommand newInsertObjectCommand();
+    
+    KnowledgeRuntimeCommand newInsertElementsCommand();
 
     KnowledgeRuntimeCommand newStatefulKnowledgeSessionInsert();
 
-    KnowledgeRuntimeCommand newStatelessKnowledgeSessionExecute();
 
     KnowledgeRuntimeCommand newStatefulKnowledgeSessionGetGlobal();
 

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineContext.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineContext.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineContext.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -2,6 +2,8 @@
 
 import java.util.Map;
 
+import org.drools.runtime.BatchExecutor;
+
 public interface PipelineContext {
 
     ClassLoader getClassLoader();
@@ -13,5 +15,7 @@
     Object getResult();
 
     ResultHandler getResultHandler();
+    
+    BatchExecutor getBatchExecutor();
 
 }

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -203,9 +203,23 @@
      * @return
      */
     public static Pipeline newStatelessKnowledgeSessionPipeline(StatelessKnowledgeSession ksession) {
-        return getCorePipelineProvider().newStatelessKnowledgeSessionPipelineImpl( ksession );
+        return getCorePipelineProvider().newStatelessKnowledgeSessionPipeline( ksession );
     }
+    
+    
+    public static KnowledgeRuntimeCommand newBatchExecutor() {
+        return getCorePipelineProvider().newBatchExecutor();
+    }    
 
+    
+    public static KnowledgeRuntimeCommand newInsertElementsCommand() {
+        return getCorePipelineProvider().newInsertElementsCommand();
+    }
+
+    public static KnowledgeRuntimeCommand newInsertObjectCommand() {
+        return getCorePipelineProvider().newInsertObjectCommand();
+    }    
+    
     /**
      * Insert the payload into the StatefulKnowledgeSesssion referenced in the context. This stage
      * expects the returned FactHandles to be stored in a HashMap of the PipelineContext result property.
@@ -216,40 +230,6 @@
     }
 
     /**
-     * Executes a StatelessKnowledgeSession. StatelessKnowledgeSessions sessions have four possible execution. Execute against an object
-     * and execute against an Iterable and both with and without Paramters. See StatelessKnowledgeSession for more details on what those 
-     * mean. To control which execution method is used the StatelessKnowledgeSessionPipelineContext has three properties; object, iterable
-     * and parameters. These can be assigned using an MVEL action stage, which has access to that context, the "this" object is assumed 
-     * to be the propagating payload object. If no properties are set it will call executeObject against the propagating payload. The same
-     * is true if just the object property is assigned. If the Iterable property is assigned it all call executeIterable. Finally the WithParamaters
-     * method will be called for each of those if the parameters property is set.
-     * 
-     * <pre>
-     * Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
-     *   
-     * KnowledgeRuntimeCommand execute = PipelineFactory.newStatelessKnowledgeSessionExecute();
-     * execute.setReceiver( executeResultHandler );
-     *   
-     * Action assignParameters = PipelineFactory.newMvelAction( "context.parameters.globalParams.setInOut( ['list' : new java.util.ArrayList()] )");
-     * assignParameters.setReceiver( execute );
-     *   
-     * Action assignIterable = PipelineFactory.newMvelAction( "context.setIterable( this )");                
-     * assignIterable.setReceiver( assignParameters );
-     *           
-     * Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline(ksession);
-     * pipeline.setReceiver( assignIterable );
-     *   
-     * ResultHandlerImpl handler = new ResultHandlerImpl();
-     *     
-     * pipeline.insert( object, handler );
-     * </pre>
-     * @return
-     */
-    public static KnowledgeRuntimeCommand newStatelessKnowledgeSessionExecute() {
-        return getCorePipelineProvider().newStatelessKnowledgeSessionExecute();
-    }
-
-    /**
      * The payload here is expected to be a String and the global will be set on the PipelineContext result property. The propagating
      * object will also be switched to the results.
      * @return

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/StatelessKnowledgeSessionPipelineContext.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,5 @@
 package org.drools.runtime.pipeline;
 
-import org.drools.runtime.Parameters;
 import org.drools.runtime.StatelessKnowledgeSession;
 
 public interface StatelessKnowledgeSessionPipelineContext
@@ -9,14 +8,5 @@
 
     StatelessKnowledgeSession getStatelessKnowledgeSession();
 
-    void setObject(Object object);
 
-    Object getObject();
-
-    void setIterable(Iterable iterable);
-
-    Iterable getIterable();
-
-    Parameters getParameters();
-
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResults.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResults.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,11 @@
+package org.drools.runtime.rule;
+
+import java.util.Iterator;
+
+public interface QueryResults extends Iterable<QueryResultsRow> {
+    String[] getIdentifiers();
+    
+    Iterator<QueryResultsRow> iterator();
+    
+    int size();
+}

Added: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResultsRow.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResultsRow.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/QueryResultsRow.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,5 @@
+package org.drools.runtime.rule;
+
+public interface QueryResultsRow {
+    public Object get(String identifier);
+}

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/StatelessRuleSession.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,5 @@
 package org.drools.runtime.rule;
 
-import org.drools.runtime.Parameters;
 import org.drools.runtime.StatelessKnowledgeSessionResults;
 
 /**
@@ -17,38 +16,13 @@
      * 
      * @param object
      */
-    void executeObject(Object object);
+    void execute(Object object);
 
     /**
      * Execute a StatelessKnowledSession, iterate the Iterable inserting each of it's elements. If you have an array, use the Arrays.asList(...) method
      * to make that array Iterable.
      * @param objects
      */
-    void executeIterable(Iterable< ? > objects);
+    void execute(Iterable objects);
 
-    /**
-     * Will execute as with executeObject, but also allows the use of the Parameters class.
-     * 
-     * @param object
-     * @param parameters
-     * @return
-     */
-    StatelessKnowledgeSessionResults executeObjectWithParameters(Object object,
-                                                                 Parameters parameters);
-
-    /**
-     * Will execute as with executeIterable, but also allows the use of the Parameters class.
-     * 
-     * @param objects
-     * @param parameters
-     * @return
-     */
-    StatelessKnowledgeSessionResults executeIterableWithParameters(Iterable< ? > objects,
-                                                                   Parameters parameters);
-
-    /**
-     * Factory method to create and return a Parameters instance, which can be used to pass in, out, inOut parameters to an execution call.
-     * @return
-     */
-    Parameters newParameters();
 }

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/rule/WorkingMemory.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -104,4 +104,35 @@
      * @return
      */
     WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name);
+    
+    /**
+     * Retrieve the QueryResults of the specified query.
+     *
+     * @param query
+     *            The name of the query.
+     *
+     * @return The QueryResults of the specified query.
+     *         If no results match the query it is empty.
+     *
+     * @throws IllegalArgumentException
+     *         if no query named "query" is found in the KnowledgeBase
+     */
+    public QueryResults getQueryResults(String query);
+
+    /**
+     * Retrieve the QueryResults of the specified query and arguments
+     *
+     * @param query
+     *            The name of the query.
+     *
+     * @param arguments
+     *            The arguments used for the query
+     *
+     * @return The QueryResults of the specified query.
+     *         If no results match the query it is empty.
+     *
+     * @throws IllegalArgumentException
+     *         if no query named "query" is found in the KnowledgeBase
+     */
+    public QueryResults getQueryResults(String query, Object[] arguments);      
 }

Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-compiler/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -20,10 +20,10 @@
   <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/jetty-util/6.1.9/jetty-util-6.1.9.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/javax/servlet/jsp/jsp-api/2.1/jsp-api-2.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/mortbay/jetty/servlet-api-2.5/6.1.9/servlet-api-2.5-6.1.9.jar"/>
   <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -27,9 +27,11 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import junit.framework.Assert;
 import junit.framework.TestCase;
@@ -130,6 +132,7 @@
 import org.drools.rule.builder.dialect.java.JavaDialectConfiguration;
 import org.drools.runtime.Globals;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.impl.FlatQueryResults;
 import org.drools.spi.ConsequenceExceptionHandler;
 import org.drools.spi.GlobalResolver;
 import org.drools.xml.XmlDumper;
@@ -2974,6 +2977,126 @@
                       results.get( 0 ).get( 0 ) );
     }
 
+    public void testQueryWithParamsOnKnowledgeApi() throws Exception {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newClassPathResource( "test_QueryWithParams.drl" , getClass() ), ResourceType.DRL );
+
+        if  ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
+        }
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        kbase = SerializationHelper.serializeObject( kbase );
+
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.fireAllRules();
+
+        org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "assertedobjquery",
+                                                              new String[]{"value1"} );
+        assertEquals( 1,
+                      results.size() );
+//        assertEquals( new InsertedObject( "value1" ),
+//                      results.get( 0 ).get( 0 ) );
+
+        results = ksession.getQueryResults( "assertedobjquery",
+                                                 new String[]{"value3"} );
+        assertEquals( 0,
+                      results.size() );
+
+        results = ksession.getQueryResults( "assertedobjquery2",
+                                                 new String[]{null, "value2"} );
+        assertEquals( 1,
+                      results.size() );
+        
+        assertEquals( new InsertedObject( "value2" ), ((org.drools.runtime.rule.QueryResultsRow)results.iterator().next()).get( "assertedobj" ) );
+
+        results = ksession.getQueryResults( "assertedobjquery2",
+                                                 new String[]{"value3", "value2"} );
+        assertEquals( 1,
+                      results.size() );
+        assertEquals( new InsertedObject( "value2" ), ((org.drools.runtime.rule.QueryResultsRow)results.iterator().next()).get( "assertedobj" ) );
+    }
+    
+    public void testQueryWithMultipleResultsOnKnowledgeApi() throws Exception {
+        String str = "";
+        str += "package org.drools.test  \n";
+        str += "import org.drools.Cheese \n";
+        str += "query cheeses \n";
+        str += "    stilton : Cheese(type == 'stilton') \n";
+        str += "    cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
+        str += "end\n";
+        
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
+
+        if  ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
+        }
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        kbase = SerializationHelper.serializeObject( kbase );
+
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Cheese stilton1 = new Cheese( "stilton", 1);
+        Cheese cheddar1 = new Cheese( "cheddar", 1);
+        Cheese stilton2 = new Cheese( "stilton", 2);
+        Cheese cheddar2 = new Cheese( "cheddar", 2);
+        Cheese stilton3 = new Cheese( "stilton", 3);
+        Cheese cheddar3 = new Cheese( "cheddar", 3);  
+        
+        Set set = new HashSet();
+        List list = new ArrayList();
+        list.add(stilton1);
+        list.add(cheddar1);
+        set.add( list );
+        
+        list = new ArrayList();
+        list.add(stilton2);
+        list.add(cheddar2);
+        set.add( list );
+        
+        list = new ArrayList();
+        list.add(stilton3);
+        list.add(cheddar3);
+        set.add( list );
+        
+        ksession.insert( stilton1 );
+        ksession.insert( stilton2 );
+        ksession.insert( stilton3 );
+        ksession.insert( cheddar1 );
+        ksession.insert( cheddar2 );
+        ksession.insert( cheddar3 );
+        
+        org.drools.runtime.rule.QueryResults results = ksession.getQueryResults( "cheeses" );  
+        assertEquals( 3, results.size() );        
+        assertEquals( 2, results.getIdentifiers().length );
+        Set newSet = new HashSet();
+        for ( org.drools.runtime.rule.QueryResultsRow result : results ) {
+            list = new ArrayList();
+            list.add( result.get( "stilton" ) );
+            list.add( result.get( "cheddar" ));
+            newSet.add( list );
+        }
+        assertEquals( set, newSet );
+        
+        
+        FlatQueryResults flatResults = new FlatQueryResults( ((StatefulKnowledgeSessionImpl)ksession).session.getQueryResults( "cheeses" ) );
+        assertEquals( 3, flatResults.size() );
+        assertEquals( 2, flatResults.getIdentifiers().length );
+        newSet = new HashSet();
+        for ( org.drools.runtime.rule.QueryResultsRow result : flatResults ) {
+            list = new ArrayList();
+            list.add( result.get( "stilton" ) );
+            list.add( result.get( "cheddar" ));
+            newSet.add( list );
+        }
+        assertEquals( set, newSet );        
+    }
+    
     public void testTwoQuerries() throws Exception {
         // @see JBRULES-410 More than one Query definition causes an incorrect
         // Rete network to be built.
@@ -4599,8 +4722,8 @@
 
     }
 
-    // @FIXME see JBRULES-1808
-    public void FIXME_testKnowledgeHelperFixerInStrings() {
+    // JBRULES-1808
+    public void testKnowledgeHelperFixerInStrings() {
         String str = "";
         str += "package org.simple \n";
         str += "global java.util.List list \n";

Deleted: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessKnowledgeSessionPipelineTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessKnowledgeSessionPipelineTest.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessKnowledgeSessionPipelineTest.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,315 +0,0 @@
-package org.drools.integrationtests;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.drools.KnowledgeBase;
-import org.drools.KnowledgeBaseFactory;
-import org.drools.StatelessSessionResult;
-import org.drools.builder.KnowledgeBuilder;
-import org.drools.builder.KnowledgeBuilderFactory;
-import org.drools.builder.ResourceType;
-import org.drools.io.ResourceFactory;
-import org.drools.runtime.Parameters;
-import org.drools.runtime.StatelessKnowledgeSession;
-import org.drools.runtime.StatelessKnowledgeSessionResults;
-import org.drools.runtime.pipeline.Action;
-import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
-import org.drools.runtime.pipeline.Pipeline;
-import org.drools.runtime.pipeline.PipelineFactory;
-import org.drools.runtime.pipeline.ResultHandler;
-import org.drools.runtime.pipeline.impl.MvelAction;
-import org.drools.runtime.pipeline.impl.StatefulKnowledgeSessionInsertStage;
-import org.drools.runtime.pipeline.impl.StatelessKnowledgeSessionExecuteStage;
-import org.drools.runtime.pipeline.impl.StatelessKnowledgeSessionPipelineImpl;
-
-public class StatelessKnowledgeSessionPipelineTest extends TestCase {
-    public void testExecuteObjectAsDefault() {
-        String str = "";
-        str += "package org.sample \n";
-        str += "global java.util.List list; \n";
-        str += "rule rule1 \n";
-        str += "  when \n";
-        str += "    s : String() \n";
-        str += "  then \n";
-        str += "    list.add( s ); ";
-        str += "end\n";
-        
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-
-        if ( kbuilder.hasErrors() ) {
-            System.out.println( kbuilder.getErrors() );
-        }
-        assertFalse( kbuilder.hasErrors() );
-        
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
-        List list = new ArrayList();
-        ksession.setGlobal( "list", list );
-        
-        
-        StatelessKnowledgeSessionExecuteStage stage1 = new StatelessKnowledgeSessionExecuteStage();
-        
-        StatelessKnowledgeSessionPipelineImpl pipeline = new StatelessKnowledgeSessionPipelineImpl(ksession);
-        pipeline.setReceiver( stage1 );
-        
-        pipeline.insert( "hello world", null );
-        
-        assertEquals( 1, list.size() );
-        
-        assertEquals( "hello world", list.get( 0 ) );           
-    }
-    
-    public void testExecuteObject() {
-        String str = "";
-        str += "package org.sample \n";
-        str += "global java.util.List list; \n";
-        str += "rule rule1 \n";
-        str += "  when \n";
-        str += "    s : String() \n";
-        str += "  then \n";
-        str += "    list.add( s ); ";
-        str += "end\n";
-        
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-
-        if ( kbuilder.hasErrors() ) {
-            System.out.println( kbuilder.getErrors() );
-        }
-        assertFalse( kbuilder.hasErrors() );
-        
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
-        List list = new ArrayList();
-        ksession.setGlobal( "list", list );
-        
-        
-        MvelAction mvelAction = new MvelAction( "context.object = this");
-        StatelessKnowledgeSessionExecuteStage stage1 = new StatelessKnowledgeSessionExecuteStage();
-        mvelAction.setReceiver( stage1 );
-        
-        StatelessKnowledgeSessionPipelineImpl pipeline = new StatelessKnowledgeSessionPipelineImpl(ksession);
-        pipeline.setReceiver( mvelAction );
-        
-        pipeline.insert( "hello world", null );
-        
-        assertEquals( 1, list.size() );
-        
-        assertEquals( "hello world", list.get( 0 ) );           
-    }
-    
-    public void testExecuteIterable() {
-        String str = "";
-        str += "package org.sample \n";
-        str += "global java.util.List list; \n";
-        str += "rule rule1 \n";
-        str += "  when \n";
-        str += "    s : String() \n";
-        str += "  then \n";
-        str += "    list.add( s ); ";
-        str += "end\n";
-        
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-
-        if ( kbuilder.hasErrors() ) {
-            System.out.println( kbuilder.getErrors() );
-        }
-        assertFalse( kbuilder.hasErrors() );
-        
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
-        List list = new ArrayList();
-        ksession.setGlobal( "list", list );
-        
-        
-        MvelAction mvelAction = new MvelAction( "context.setIterable( this )");
-        StatelessKnowledgeSessionExecuteStage stage1 = new StatelessKnowledgeSessionExecuteStage();
-        mvelAction.setReceiver( stage1 );
-        
-        StatelessKnowledgeSessionPipelineImpl pipeline = new StatelessKnowledgeSessionPipelineImpl(ksession);
-        pipeline.setReceiver( mvelAction );
-        
-        List items = new ArrayList();
-        items.add( "hello world" );
-        items.add( "goodbye world" );
-        
-        pipeline.insert( items, null );
-        
-        assertEquals( 2, list.size() );
-        
-        Collections.sort( list );        
-        assertEquals( "goodbye world", list.get( 0 ) );
-        assertEquals( "hello world", list.get( 1 ) );
-    }    
-    
-    public void testExecuteObjectAsDefaultWithParameters() {
-        String str = "";
-        str += "package org.sample \n";
-        str += "global java.util.List list; \n";
-        str += "rule rule1 \n";
-        str += "  when \n";
-        str += "    s : String() \n";
-        str += "  then \n";
-        str += "    list.add( s ); ";
-        str += "end\n";
-        
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-
-        if ( kbuilder.hasErrors() ) {
-            System.out.println( kbuilder.getErrors() );
-        }
-        assertFalse( kbuilder.hasErrors() );
-        
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
-        
-        MvelAction mvelAction2 = new MvelAction( "context.parameters.globalParams.setInOut( ['list' : new java.util.ArrayList()] )");
-        
-        StatelessKnowledgeSessionExecuteStage stage1 = new StatelessKnowledgeSessionExecuteStage();
-        mvelAction2.setReceiver( stage1 );
-        
-        MvelAction mvelAction3 = new MvelAction( "context.resultHandler.handleResult( context.result )");
-        stage1.setReceiver( mvelAction3 );
-        
-        StatelessKnowledgeSessionPipelineImpl pipeline = new StatelessKnowledgeSessionPipelineImpl(ksession);
-        pipeline.setReceiver( mvelAction2 );
-        
-        ResultHandlerImpl handler = new ResultHandlerImpl();
-        
-        pipeline.insert( "hello world", handler );
-        
-        List list = (List)handler.getStatelessKnowledgeSessionResults().getValue( "list" );
-        
-        assertEquals( 1, list.size() );
-        
-        assertEquals( "hello world", list.get( 0 ) );              
-    }     
-    
-    public void testExecuteObjectWithParameters() {
-        String str = "";
-        str += "package org.sample \n";
-        str += "global java.util.List list; \n";
-        str += "rule rule1 \n";
-        str += "  when \n";
-        str += "    s : String() \n";
-        str += "  then \n";
-        str += "    list.add( s ); ";
-        str += "end\n";
-        
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-
-        if ( kbuilder.hasErrors() ) {
-            System.out.println( kbuilder.getErrors() );
-        }
-        assertFalse( kbuilder.hasErrors() );
-        
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
-        
-        MvelAction mvelAction1 = new MvelAction( "context.object = this");
-        MvelAction mvelAction2 = new MvelAction( "context.parameters.globalParams.setInOut( ['list' : new java.util.ArrayList()] )");
-        
-        mvelAction1.setReceiver( mvelAction2 );
-        
-        StatelessKnowledgeSessionExecuteStage stage1 = new StatelessKnowledgeSessionExecuteStage();
-        mvelAction2.setReceiver( stage1 );
-        
-        MvelAction mvelAction3 = new MvelAction( "context.resultHandler.handleResult( context.result )");
-        stage1.setReceiver( mvelAction3 );
-        
-        StatelessKnowledgeSessionPipelineImpl pipeline = new StatelessKnowledgeSessionPipelineImpl(ksession);
-        pipeline.setReceiver( mvelAction1 );
-        
-        ResultHandlerImpl handler = new ResultHandlerImpl();
-        
-        pipeline.insert( "hello world", handler );
-        
-        List list = (List)handler.getStatelessKnowledgeSessionResults().getValue( "list" );
-        
-        assertEquals( 1, list.size() );
-        
-        assertEquals( "hello world", list.get( 0 ) );              
-    }    
-    
-    public void testExecuteIterableWithParameters() {
-        String str = "";
-        str += "package org.sample \n";
-        str += "global java.util.List list; \n";
-        str += "rule rule1 \n";
-        str += "  when \n";
-        str += "    s : String() \n";
-        str += "  then \n";
-        str += "    list.add( s ); ";
-        str += "end\n";
-        
-        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
-
-        if ( kbuilder.hasErrors() ) {
-            System.out.println( kbuilder.getErrors() );
-        }
-        assertFalse( kbuilder.hasErrors() );
-        
-        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
-        
-        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
-        
-        KnowledgeRuntimeCommand execute = PipelineFactory.newStatelessKnowledgeSessionExecute();
-        execute.setReceiver( executeResultHandler );
-        
-        Action assignParameters = PipelineFactory.newMvelAction( "context.parameters.globalParams.setInOut( ['list' : new java.util.ArrayList()] )");
-        assignParameters.setReceiver( execute );
-        
-        Action assignIterable = PipelineFactory.newMvelAction( "context.setIterable( this )");                
-        assignIterable.setReceiver( assignParameters );
-                
-        Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline(ksession);
-        pipeline.setReceiver( assignIterable );
-        
-        ResultHandlerImpl handler = new ResultHandlerImpl();
-        
-        List items = new ArrayList();
-        items.add( "hello world" );
-        items.add( "goodbye world" );
-        
-        pipeline.insert( items, handler );
-        
-        List list = (List)handler.getStatelessKnowledgeSessionResults().getValue( "list" );
-        
-        assertEquals( 2, list.size() );
-        
-        Collections.sort( list );        
-        assertEquals( "goodbye world", list.get( 0 ) );
-        assertEquals( "hello world", list.get( 1 ) );         
-    }       
-    
-    public static class ResultHandlerImpl implements ResultHandler {        
-        StatelessKnowledgeSessionResults results;
-        
-        public void handleResult(Object object) {
-           this.results = ( StatelessKnowledgeSessionResults ) object;             
-        }
-        
-        public StatelessKnowledgeSessionResults getStatelessKnowledgeSessionResults() {
-            return this.results;
-        }
-        
-    }
-}

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatelessSessionTest.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -5,8 +5,10 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import junit.framework.TestCase;
 
@@ -25,14 +27,19 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
+import org.drools.command.Command;
+import org.drools.command.CommandFactory;
 import org.drools.compiler.PackageBuilder;
 import org.drools.definition.KnowledgePackage;
-import org.drools.impl.ParametersImpl;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.io.Resource;
 import org.drools.io.ResourceFactory;
 import org.drools.rule.Package;
-import org.drools.runtime.Parameters;
+import org.drools.runtime.BatchExecutionResult;
+import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSessionResults;
+import org.drools.runtime.rule.impl.FlatQueryResults;
 import org.drools.spi.GlobalResolver;
 
 public class StatelessSessionTest extends TestCase {
@@ -58,7 +65,7 @@
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
 
-        session.executeObject( stilton );
+        session.execute( stilton );
 
         assertEquals( "stilton",
                       list.get( 0 ) );
@@ -70,7 +77,7 @@
         final Cheese stilton = new Cheese( "stilton",
                                            5 );
 
-        session.executeIterable( Arrays.asList( new Object[]{stilton} ) );
+        session.execute( Arrays.asList( new Object[]{stilton} ) );
 
         assertEquals( "stilton",
                       list.get( 0 ) );
@@ -84,181 +91,256 @@
 
         List collection = new ArrayList();
         collection.add( stilton );
-        session.executeIterable( collection );
+        session.execute( collection );
 
         assertEquals( "stilton",
                       list.get( 0 ) );
     }
-
-    public void testSingleObjectAssertWithResults() throws Exception {
-        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
-
-        // notice I don't export Cheessery
-        Parameters parameters = session.newParameters();
-        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) );        
-
-        final Cheese stilton = new Cheese( "stilton",
-                                           5 );
-
-        StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
-                                                                             parameters );
+    
+    public void testInsertObject() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( 30 ); \n";
+        str += "end\n";
         
-        assertEquals( 1, results.getIdentifiers().size() );
-        assertTrue( results.getIdentifiers().contains( "list" ));
-
-        assertEquals( "stilton",
-                      ((List) results.getValue( "list" )).get( 0 ) );
-
-        // cheesery should be null
-        assertNull( results.getValue( "cheesery" ) );
+        Cheese stilton = new Cheese( "stilton", 5 );
+        
+        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        Command cmd = CommandFactory.newInsertObject( stilton, "outStilton" );
+        BatchExecutionResult result = ksession.execute( cmd );
+        stilton = ( Cheese ) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );       
     }
-
-    public void testArrayObjectAssertWithResults() throws Exception {
-        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
-
-        // notice I don't export Cheessery
-        Parameters parameters = session.newParameters();
-        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
-
-        final Cheese stilton = new Cheese( "stilton",
-                                           5 );
-
-        StatelessKnowledgeSessionResults results = session.executeIterableWithParameters( Arrays.asList( new Object[]{stilton} ),
-                                                                             parameters );
-
-        assertEquals( 1, results.getIdentifiers().size() );
-        assertTrue( results.getIdentifiers().contains( "list" ));
-
-        assertEquals( "stilton",
-                      ((List) results.getValue( "list" )).get( 0 ) );
-
-        // cheesery should be null
-        assertNull( results.getValue( "cheesery" ) );
-    }
-
-    public void testCollectionObjectAssertWithResults() throws Exception {
-        StatelessKnowledgeSession session = getSession2( "literal_rule_test.drl" );
-
-        // notice I don't export Cheessery
-        Parameters parameters = session.newParameters();
-        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
-
-        final Cheese stilton = new Cheese( "stilton",
-                                           5 );
-
-        List collection = new ArrayList();
-        collection.add( stilton );        
-        StatelessKnowledgeSessionResults results = session.executeIterableWithParameters( collection,
-                                                                                          parameters );        
-
-        assertEquals( 1, results.getIdentifiers().size() );
-        assertTrue( results.getIdentifiers().contains( "list" ));
-
-        assertEquals( "stilton",
-                      ((List) results.getValue( "list" )).get( 0 ) );
-
-        // cheesery should be null
-        assertNull( results.getValue( "cheesery" ) );
-    }
     
-    public void testInAndOutParams() throws Exception {
-        StatelessKnowledgeSession session = getSession2( "testStatelessKnowledgeSessionInOutParams.drl" );
-
-
-        final Cheese stilton = new Cheese( "stilton",
-                                           5 );
+    public void testSetGlobal() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list1 \n";
+        str += "global java.util.List list2 \n";
+        str += "global java.util.List list3 \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( 30 ); \n";
+        str += "    list1.add( $c ); \n";
+        str += "    list2.add( $c ); \n";
+        str += "    list3.add( $c ); \n";
+        str += "end\n";
         
-        final Cheese cheddar = new Cheese( "cheddar",
-                                           25 );   
+        Cheese stilton = new Cheese( "stilton", 5 );
+        List list1 = new ArrayList();
+        List list2 = new ArrayList();
+        List list3 = new ArrayList();
         
-        // notice I don't export Cheessery
-        Parameters parameters = session.newParameters();
-        Map<String, Object> globalsIn = new HashMap<String, Object>();
-        globalsIn.put( "inString", "string" );
-        parameters.getGlobalParams().setIn( globalsIn );        
-        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
+        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        Command setGlobal1 = CommandFactory.newSetGlobal( "list1", list1 );
+        Command setGlobal2 = CommandFactory.newSetGlobal( "list2", list2, true );
+        Command setGlobal3 = CommandFactory.newSetGlobal( "list3", list3, "outList3" );
+        Command insert = CommandFactory.newInsertObject( stilton  );
         
-        Map<String, Object> factIn = new HashMap<String, Object>();
-        factIn.put( "inCheese", cheddar );
-        parameters.getFactParams().setIn( factIn );
-        parameters.getFactParams().setOut( Arrays.asList(  new String[]{ "outCheese"} ) );         
- 
-        StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
-                                                                                        parameters );        
-
-        assertEquals( 2, results.getIdentifiers().size() );
-        assertTrue( results.getIdentifiers().contains( "list" ));
-        assertTrue( results.getIdentifiers().contains( "outCheese" ));
+        List cmds = new ArrayList();
+        cmds.add( setGlobal1 );
+        cmds.add( setGlobal2 );
+        cmds.add( setGlobal3 );
+        cmds.add(  insert );
         
-        assertEquals( new Cheese( "brie", 50), results.getValue( "outCheese" ) );
-
-        assertEquals( "rule1 cheddar",
-                      ((List) results.getValue( "list" )).get( 0 ) );
+        BatchExecutionResult result = ksession.execute( CommandFactory.newBatchExecution( cmds ) );
         
-        assertEquals( "rule2 stilton",
-                      ((List) results.getValue( "list" )).get( 1 ) );      
+        assertEquals( 30,
+                      stilton.getPrice() ); 
         
-        assertEquals( "rule3 brie",
-                      ((List) results.getValue( "list" )).get( 2 ) );         
+        assertNull( result.getValue( "list1" ) );
         
-        assertEquals( "rule4 string",
-                      ((List) results.getValue( "list" )).get( 3 ) );          
-
-        // cheesery should be null
-        assertNull( results.getValue( "cheesery" ) );        
+        list2 = ( List ) result.getValue( "list2" );
+        assertEquals( 1, list2.size() );
+        assertSame( stilton, list2.get( 0 ) );
         
-    }
+          
+        
+        list3 = ( List ) result.getValue( "outList3" );
+        assertEquals( 1, list3.size() );
+        assertSame( stilton, list3.get( 0 ) );        
+    }    
     
-    public void testInOutAndOutParams() throws Exception {
-        StatelessKnowledgeSession session = getSession2( "testStatelessKnowledgeSessionInOutParams.drl" );
+    public void testQuery() throws Exception {
+        String str = "";
+        str += "package org.drools.test  \n";
+        str += "import org.drools.Cheese \n";
+        str += "query cheeses \n";
+        str += "    stilton : Cheese(type == 'stilton') \n";
+        str += "    cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
+        str += "end\n";
+        
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ), ResourceType.DRL );
 
+        if  ( kbuilder.hasErrors() ) {
+            fail( kbuilder.getErrors().toString() );
+        }
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+        
+        kbase = SerializationHelper.serializeObject( kbase );
 
-        final Cheese stilton = new Cheese( "stilton",
-                                           5 );
+        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
+        Cheese stilton1 = new Cheese( "stilton", 1);
+        Cheese cheddar1 = new Cheese( "cheddar", 1);
+        Cheese stilton2 = new Cheese( "stilton", 2);
+        Cheese cheddar2 = new Cheese( "cheddar", 2);
+        Cheese stilton3 = new Cheese( "stilton", 3);
+        Cheese cheddar3 = new Cheese( "cheddar", 3);  
         
-        final Cheese cheddar = new Cheese( "cheddar",
-                                           25 );   
+        Set set = new HashSet();
+        List list = new ArrayList();
+        list.add(stilton1);
+        list.add(cheddar1);
+        set.add( list );
         
-        // notice I don't export Cheessery
-        Parameters parameters = session.newParameters();
-        Map<String, Object> globalsInOut = new HashMap<String, Object>();
-        globalsInOut.put( "inString", "string" );
-        parameters.getGlobalParams().setInOut( globalsInOut );        
-        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
+        list = new ArrayList();
+        list.add(stilton2);
+        list.add(cheddar2);
+        set.add( list );
         
-        Map<String, Object> factInOut = new HashMap<String, Object>();
-        factInOut.put( "inCheese", cheddar );
-        parameters.getFactParams().setInOut( factInOut );
-        parameters.getFactParams().setOut( Arrays.asList(  new String[]{ "outCheese"} ) );         
- 
-        StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
-                                                                                        parameters );        
-
-        assertEquals( 4, results.getIdentifiers().size() );
-        assertTrue( results.getIdentifiers().contains( "list" ));
-        assertTrue( results.getIdentifiers().contains( "inString" ));
-        assertTrue( results.getIdentifiers().contains( "inCheese" ));
-        assertTrue( results.getIdentifiers().contains( "outCheese" ));
+        list = new ArrayList();
+        list.add(stilton3);
+        list.add(cheddar3);
+        set.add( list );
         
-        assertEquals( new Cheese( "brie", 50), results.getValue( "outCheese" ) );
-
-        assertEquals( "rule1 cheddar",
-                      ((List) results.getValue( "list" )).get( 0 ) );
+        List<Command> cmds = new ArrayList<Command>();        
+        cmds.add( CommandFactory.newInsertObject( stilton1 ) );
+        cmds.add( CommandFactory.newInsertObject( stilton2 ) );
+        cmds.add( CommandFactory.newInsertObject( stilton3 ) );
+        cmds.add( CommandFactory.newInsertObject( cheddar1 ) );
+        cmds.add( CommandFactory.newInsertObject( cheddar2 ) );
+        cmds.add( CommandFactory.newInsertObject( cheddar3 ) );
         
-        assertEquals( "rule2 stilton",
-                      ((List) results.getValue( "list" )).get( 1 ) );      
+        cmds.add(  CommandFactory.newQuery( "cheeses", "cheeses" ) );
         
-        assertEquals( "rule3 brie",
-                      ((List) results.getValue( "list" )).get( 2 ) );         
+        BatchExecutionResult batchResult = ksession.execute( CommandFactory.newBatchExecution( cmds ) );
         
-        assertEquals( "rule4 string",
-                      ((List) results.getValue( "list" )).get( 3 ) );          
-
-        // cheesery should be null
-        assertNull( results.getValue( "cheesery" ) );        
-        
+        org.drools.runtime.rule.QueryResults results = ( org.drools.runtime.rule.QueryResults) batchResult.getValue( "cheeses" );
+        assertEquals( 3, results.size() );        
+        assertEquals( 2, results.getIdentifiers().length );
+        Set newSet = new HashSet();
+        for ( org.drools.runtime.rule.QueryResultsRow result : results ) {
+            list = new ArrayList();
+            list.add( result.get( "stilton" ) );
+            list.add( result.get( "cheddar" ));
+            newSet.add( list );
+        }
+        assertEquals( set, newSet );      
     }    
     
+    // @TODO need to figure out if we need to support "out" params 
+//    public void testInAndOutParams() throws Exception {
+//        StatelessKnowledgeSession session = getSession2( "testStatelessKnowledgeSessionInOutParams.drl" );
+//
+//
+//        final Cheese stilton = new Cheese( "stilton",
+//                                           5 );
+//        
+//        final Cheese cheddar = new Cheese( "cheddar",
+//                                           25 );   
+//        
+//        // notice I don't export Cheessery
+//        Parameters parameters = session.newParameters();
+//        Map<String, Object> globalsIn = new HashMap<String, Object>();
+//        globalsIn.put( "inString", "string" );
+//        parameters.getGlobalParams().setIn( globalsIn );        
+//        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
+//        
+//        Map<String, Object> factIn = new HashMap<String, Object>();
+//        factIn.put( "inCheese", cheddar );
+//        parameters.getFactParams().setIn( factIn );
+//        parameters.getFactParams().setOut( Arrays.asList(  new String[]{ "outCheese"} ) );         
+// 
+//        StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
+//                                                                                        parameters );        
+//
+//        assertEquals( 2, results.getIdentifiers().size() );
+//        assertTrue( results.getIdentifiers().contains( "list" ));
+//        assertTrue( results.getIdentifiers().contains( "outCheese" ));
+//        
+//        assertEquals( new Cheese( "brie", 50), results.getValue( "outCheese" ) );
+//
+//        assertEquals( "rule1 cheddar",
+//                      ((List) results.getValue( "list" )).get( 0 ) );
+//        
+//        assertEquals( "rule2 stilton",
+//                      ((List) results.getValue( "list" )).get( 1 ) );      
+//        
+//        assertEquals( "rule3 brie",
+//                      ((List) results.getValue( "list" )).get( 2 ) );         
+//        
+//        assertEquals( "rule4 string",
+//                      ((List) results.getValue( "list" )).get( 3 ) );          
+//
+//        // cheesery should be null
+//        assertNull( results.getValue( "cheesery" ) );        
+//        
+//    }
+//    
+//    public void testInOutAndOutParams() throws Exception {
+//        StatelessKnowledgeSession session = getSession2( "testStatelessKnowledgeSessionInOutParams.drl" );
+//
+//
+//        final Cheese stilton = new Cheese( "stilton",
+//                                           5 );
+//        
+//        final Cheese cheddar = new Cheese( "cheddar",
+//                                           25 );   
+//        
+//        // notice I don't export Cheessery
+//        Parameters parameters = session.newParameters();
+//        Map<String, Object> globalsInOut = new HashMap<String, Object>();
+//        globalsInOut.put( "inString", "string" );
+//        parameters.getGlobalParams().setInOut( globalsInOut );        
+//        parameters.getGlobalParams().setOut( Arrays.asList(  new String[]{"list"} ) ); 
+//        
+//        Map<String, Object> factInOut = new HashMap<String, Object>();
+//        factInOut.put( "inCheese", cheddar );
+//        parameters.getFactParams().setInOut( factInOut );
+//        parameters.getFactParams().setOut( Arrays.asList(  new String[]{ "outCheese"} ) );         
+// 
+//        StatelessKnowledgeSessionResults results = session.executeObjectWithParameters( stilton,
+//                                                                                        parameters );        
+//
+//        assertEquals( 4, results.getIdentifiers().size() );
+//        assertTrue( results.getIdentifiers().contains( "list" ));
+//        assertTrue( results.getIdentifiers().contains( "inString" ));
+//        assertTrue( results.getIdentifiers().contains( "inCheese" ));
+//        assertTrue( results.getIdentifiers().contains( "outCheese" ));
+//        
+//        assertEquals( new Cheese( "brie", 50), results.getValue( "outCheese" ) );
+//
+//        assertEquals( "rule1 cheddar",
+//                      ((List) results.getValue( "list" )).get( 0 ) );
+//        
+//        assertEquals( "rule2 stilton",
+//                      ((List) results.getValue( "list" )).get( 1 ) );      
+//        
+//        assertEquals( "rule3 brie",
+//                      ((List) results.getValue( "list" )).get( 2 ) );         
+//        
+//        assertEquals( "rule4 string",
+//                      ((List) results.getValue( "list" )).get( 3 ) );          
+//
+//        // cheesery should be null
+//        assertNull( results.getValue( "cheesery" ) );        
+//        
+//    }    
+    
     public void testAsynSingleOjbectcAssert() throws Exception {
         StatelessSession session = getSession();
 
@@ -394,8 +476,12 @@
     }
     
     private StatelessKnowledgeSession getSession2(String fileName) throws Exception {
+        return getSession2( ResourceFactory.newClassPathResource( fileName, getClass() ) );
+    }
+        
+    private StatelessKnowledgeSession getSession2(Resource resource) throws Exception {
         KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        kbuilder.add(  ResourceFactory.newClassPathResource( fileName, getClass() ), ResourceType.DRL );
+        kbuilder.add( resource, ResourceType.DRL );
         
         if (kbuilder.hasErrors() ) {
             System.out.println( kbuilder.getErrors() );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockWorkingMemory.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -47,6 +47,7 @@
 import org.drools.runtime.Environment;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.impl.BatchExecutionResultImpl;
 import org.drools.spi.Activation;
 import org.drools.spi.AgendaFilter;
 import org.drools.spi.AsyncExceptionHandler;
@@ -525,4 +526,19 @@
         return null;
     }
 
+    public void endBatchExecution() {
+        // TODO Auto-generated method stub
+        
+    }
+
+    public BatchExecutionResultImpl getBatchExecutionResult() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    public void startBatchExecution() {
+        // TODO Auto-generated method stub
+        
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-core/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -11,9 +11,9 @@
   <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>
   <classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/QueryResults.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -31,7 +31,7 @@
  * get a specific row. All the available Declarations used in the query can also be accessed.
  *
  */
-public class QueryResults {
+public class QueryResults implements Iterable<QueryResult>{
     private Query           query;
 
     private Map             declarations;
@@ -61,7 +61,7 @@
      * 
      * @return
      */
-    public Iterator iterator() {
+    public Iterator<QueryResult> iterator() {
         return new QueryResultsIterator( this.results.iterator() );
     }
 

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/impl/CommandFactoryProviderImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,101 @@
+package org.drools.command.impl;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.command.Command;
+import org.drools.command.CommandFactoryProvider;
+import org.drools.process.command.GetGlobalCommand;
+import org.drools.process.command.InsertElementsCommand;
+import org.drools.process.command.InsertObjectCommand;
+import org.drools.process.command.QueryCommand;
+import org.drools.process.command.SetGlobalCommand;
+import org.drools.process.command.StartProcessCommand;
+import org.drools.runtime.impl.BatchExecutionImpl;
+
+public class CommandFactoryProviderImpl
+    implements
+    CommandFactoryProvider {
+
+    public Command newGetGlobal(String identifier) {
+        return new GetGlobalCommand( identifier );
+    }
+
+    public Command newGetGlobal(String identifier,
+                                String outIdentifier) {
+        GetGlobalCommand cmd = new GetGlobalCommand( identifier );
+        cmd.setOutIdentifier( outIdentifier );
+        return cmd;
+    }
+
+    public Command newInsertElements(Collection collection) {
+        return new InsertElementsCommand( collection );
+    }
+
+    public Command newInsertObject(Object object) {
+        return new InsertObjectCommand( object );
+    }
+
+    public Command newInsertObject(Object object,
+                                   String outIdentifier) {
+        InsertObjectCommand cmd = new InsertObjectCommand( object );
+        cmd.setOutIdentifier( outIdentifier );
+        return cmd;
+    }
+
+    public Command newSetGlobal(String identifier,
+                                Object object) {
+        return new SetGlobalCommand( identifier,
+                                     object );
+    }
+
+    public Command newSetGlobal(String identifier,
+                                Object object,
+                                boolean out) {
+        SetGlobalCommand cmd = new SetGlobalCommand( identifier,
+                                                     object );
+        cmd.setOut( out );
+        return cmd;
+    }
+
+    public Command newSetGlobal(String identifier,
+                                Object object,
+                                String outIdentifier) {
+        SetGlobalCommand cmd = new SetGlobalCommand( identifier,
+                                                     object );
+        cmd.setOutIdentifier( outIdentifier );
+        return cmd;
+    }
+
+    public Command newStartProcess(String processId) {
+        StartProcessCommand startProcess = new StartProcessCommand();
+        startProcess.setProcessId( processId );
+        return startProcess;
+    }
+
+    public Command newStartProcess(String processId,
+                                   Map<String, Object> parameters) {
+        StartProcessCommand startProcess = new StartProcessCommand();
+        startProcess.setProcessId( processId );
+        startProcess.setParameters( parameters );
+        return startProcess;
+    }
+    
+    public Command newQuery(String identifier,
+                                    String name) {
+        return new QueryCommand(identifier, name, null );
+        
+    }
+    
+    public Command newQuery(String identifier,
+                                    String name,
+                                    Object[] arguments) {
+        return new QueryCommand(identifier, name, arguments);
+    }     
+    
+    public Command newBatchExecution(List<? extends Command> commands) {
+        return new BatchExecutionImpl( (List<org.drools.process.command.Command>)commands );
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -84,11 +84,13 @@
 import org.drools.rule.Rule;
 import org.drools.rule.TimeMachine;
 import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.runtime.BatchExecutionResult;
 import org.drools.runtime.Environment;
 import org.drools.runtime.EnvironmentName;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.Globals;
 import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.impl.BatchExecutionResultImpl;
 import org.drools.runtime.process.EventListener;
 import org.drools.runtime.process.WorkItemHandler;
 import org.drools.spi.Activation;
@@ -213,6 +215,8 @@
     private Map<String, ExitPoint>                                            exitPoints;
 
     private Environment                                                       environment;
+    
+    private BatchExecutionResult                                              batchExecutionResult;
 
     // ------------------------------------------------------------
     // Constructors
@@ -1819,6 +1823,20 @@
     public PartitionTaskManager getPartitionManager(final RuleBasePartitionId partitionId) {
         return partitionManagers.get( partitionId );
     }
+    
+    public void startBatchExecution() {
+        this.lock.lock();
+        this.batchExecutionResult = new BatchExecutionResultImpl();
+    }
+    
+    public BatchExecutionResultImpl getBatchExecutionResult() {
+        return ( BatchExecutionResultImpl ) this.batchExecutionResult;
+    }
+    
+    public void endBatchExecution() {
+        this.batchExecutionResult = null;
+        this.lock.unlock();
+    }    
 
     // public static class FactHandleInvalidation implements WorkingMemoryAction
     // {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -17,8 +17,10 @@
 import org.drools.reteoo.PartitionTaskManager;
 import org.drools.rule.Rule;
 import org.drools.rule.TimeMachine;
+import org.drools.runtime.BatchExecutionResult;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.impl.BatchExecutionResultImpl;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.spi.Activation;
 import org.drools.spi.FactHandleFactory;
@@ -129,4 +131,11 @@
     public Map<String, ? extends WorkingMemoryEntryPoint> getEntryPoints();
 
     public SessionConfiguration getSessionConfiguration();
+    
+    
+    public void startBatchExecution();
+    
+    public BatchExecutionResultImpl getBatchExecutionResult();
+    
+    public void endBatchExecution();
 }

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/FactParamsImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,37 +0,0 @@
-package org.drools.impl;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.drools.runtime.FactParams;
-
-public class FactParamsImpl implements FactParams {
-    Map<String, ? > in;
-    Map<String, ? > inOut;
-    Collection<String> out;
-    
-    public void setIn(Map<String, ? > in) {
-        this.in = in;
-    }
-    
-    public Map<String, ? > getIn() {
-        return in;
-    }    
-
-    public void setInOut(Map<String, ? > inOut) {
-        this.inOut = inOut;
-    }
-    
-    public Map<String, ? > getInOut() {
-        return inOut;
-    }    
-
-    public void setOut(Collection<String> out) {
-        this.out = out;
-    }
-
-    public Collection<String> getOut() {
-        return out;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/GlobalParamsImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,37 +0,0 @@
-package org.drools.impl;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.drools.runtime.GlobalParams;
-
-public class GlobalParamsImpl implements GlobalParams {
-    Map<String, ? > in;
-    Map<String, ? > inOut;
-    Collection<String> out;
-    
-    public void setIn(Map<String, ? > in) {
-        this.in = in;
-    }
-    
-    public Map<String, ? > getIn() {
-        return in;
-    }    
-
-    public void setInOut(Map<String, ? > inOut) {
-        this.inOut = inOut;
-    }
-    
-    public Map<String, ? > getInOut() {
-        return inOut;
-    }    
-
-    public void setOut(Collection<String> out) {
-        this.out = out;
-    }
-
-    public Collection<String> getOut() {
-        return out;
-    }
-    
-}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/ParametersImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,42 +0,0 @@
-package org.drools.impl;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.drools.runtime.FactParams;
-import org.drools.runtime.GlobalParams;
-import org.drools.runtime.Parameters;
-
-public class ParametersImpl implements Parameters {
-    private FactParamsImpl factParams = new FactParamsImpl();
-    private GlobalParamsImpl globalParams = new GlobalParamsImpl();
-        
-    public FactParams getFactParams() {
-        return this.factParams;
-    }
-
-    public GlobalParams getGlobalParams() {
-        return this.globalParams;
-    }
-    
-    public boolean isEmpty() {
-        if ( !isEmpty(factParams.getIn() ) || !isEmpty( factParams.getOut() ) || !isEmpty( factParams.getInOut() ) ) {
-            return false;
-        }
-        
-        if ( !isEmpty(globalParams.getIn() ) || !isEmpty( globalParams.getOut() ) || !isEmpty( globalParams.getInOut() ) ) {
-            return false;
-        }        
-        
-        return true;
-    }
-    
-    public boolean isEmpty(Collection collection) {
-        return collection == null || collection.isEmpty();
-    }
-    
-    public boolean isEmpty(Map map) {
-        return map == null || map.isEmpty();
-    }    
-
-}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatefulKnowledgeSessionImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -11,6 +11,7 @@
 import org.drools.KnowledgeBase;
 import org.drools.RuleBase;
 import org.drools.WorkingMemory;
+import org.drools.command.Command;
 import org.drools.common.InternalAgenda;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -50,6 +51,8 @@
 import org.drools.event.rule.impl.ObjectRetractedEventImpl;
 import org.drools.event.rule.impl.ObjectUpdatedEventImpl;
 import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.BatchExecutionResult;
+import org.drools.runtime.BatchExecutor;
 import org.drools.runtime.Environment;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.Globals;
@@ -59,14 +62,17 @@
 import org.drools.runtime.rule.Agenda;
 import org.drools.runtime.rule.AgendaFilter;
 import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.QueryResults;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.runtime.rule.impl.AgendaImpl;
+import org.drools.runtime.rule.impl.NativeQueryResults;
 import org.drools.spi.Activation;
 import org.drools.time.SessionClock;
 
 public class StatefulKnowledgeSessionImpl
     implements
     StatefulKnowledgeSession,
+    BatchExecutor,
     InternalWorkingMemoryEntryPoint {
     public ReteooWorkingMemory                                                session;
     public KnowledgeBaseImpl                                                  kbase;
@@ -615,4 +621,24 @@
         return this.kbase.ruleBase;
     }
 
+    public QueryResults getQueryResults(String query) {
+        return new NativeQueryResults( this.session.getQueryResults( query ));
+    }
+
+    public QueryResults getQueryResults(String query,
+                                        Object[] arguments) {
+        return new NativeQueryResults( this.session.getQueryResults( query, arguments ) );
+    }
+    
+    public BatchExecutionResult execute(Command command) {        
+        try {
+            session.startBatchExecution();
+            ((org.drools.process.command.Command)command).execute( session );
+            BatchExecutionResult result = session.getBatchExecutionResult();
+            return result;
+        } finally {
+            session.endBatchExecution();
+        }
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -10,6 +10,7 @@
 
 import org.drools.SessionConfiguration;
 import org.drools.base.MapGlobalResolver;
+import org.drools.command.Command;
 import org.drools.common.InternalRuleBase;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.event.AgendaEventSupport;
@@ -26,10 +27,10 @@
 import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
 import org.drools.rule.EntryPoint;
+import org.drools.runtime.BatchExecutionResult;
 import org.drools.runtime.Environment;
 import org.drools.runtime.Globals;
 import org.drools.runtime.KnowledgeSessionConfiguration;
-import org.drools.runtime.Parameters;
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSessionResults;
 import org.drools.spi.AgendaFilter;
@@ -192,136 +193,34 @@
         return this.sessionGlobals;
     }
 
-    public void executeObject(Object object) {
-        InternalWorkingMemory wm = newWorkingMemory();
-
-        wm.insert( object );
-        wm.fireAllRules( this.agendaFilter );
-    }
-
-    public void executeIterable(Iterable< ? > objects) {
-        InternalWorkingMemory wm = newWorkingMemory();
-
-        for ( Object object : objects ) {
-            wm.insert( object );
+    public BatchExecutionResult execute(Command command) {        
+        ReteooWorkingMemory session = ( ReteooWorkingMemory ) newWorkingMemory();
+        try {
+            session.startBatchExecution();
+            ((org.drools.process.command.Command)command).execute( session );
+            session.fireAllRules( this.agendaFilter );
+            BatchExecutionResult result = session.getBatchExecutionResult();
+            return result;
+        } finally {
+            session.endBatchExecution();
         }
-        wm.fireAllRules( this.agendaFilter );
     }
 
-    public StatelessKnowledgeSessionResults executeObjectWithParameters(Object object,
-                                                                        Parameters parameters) {
+    public void execute(Object object) {
         InternalWorkingMemory wm = newWorkingMemory();
 
         wm.insert( object );
-
-        Map<String, Object> results = new HashMap<String, Object>();
-
-        executeInParams( wm,
-                         parameters,
-                         results );
-
         wm.fireAllRules( this.agendaFilter );
-
-        getOutParams( wm,
-                      parameters,
-                      results );
-
-        return new StatelessKnowledgeSessionResultsImpl( results );
-
     }
 
-    public StatelessKnowledgeSessionResults executeIterableWithParameters(Iterable< ? > objects,
-                                                                          Parameters parameters) {
+    public void execute(Iterable objects) {
         InternalWorkingMemory wm = newWorkingMemory();
 
         for ( Object object : objects ) {
             wm.insert( object );
         }
-
-        Map<String, Object> results = new HashMap<String, Object>();
-
-        executeInParams( wm,
-                         parameters,
-                         results );
-
         wm.fireAllRules( this.agendaFilter );
-
-        getOutParams( wm,
-                      parameters,
-                      results );
-
-        return new StatelessKnowledgeSessionResultsImpl( results );
-
     }
 
-    private void executeInParams(InternalWorkingMemory wm,
-                                 Parameters parameters,
-                                 Map<String, Object> results) {
-        Map<String, ? > map = ((FactParamsImpl) parameters.getFactParams()).getIn();
-        if ( map != null && !map.isEmpty() ) {
-            for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
-                Entry<String, Object> entry = (Entry<String, Object>) it.next();
-                wm.setGlobal( entry.getKey(),
-                                          entry.getValue() );
-                wm.insert( entry.getValue() );
-            }
-        }
 
-        map = ((FactParamsImpl) parameters.getFactParams()).getInOut();
-        if ( map != null && !map.isEmpty() ) {
-            for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
-                Entry<String, Object> entry = (Entry<String, Object>) it.next();
-                wm.setGlobal( entry.getKey(),
-                                          entry.getValue() );
-                results.put( entry.getKey(),
-                             entry.getValue() );
-                wm.insert( entry.getValue() );
-            }
-        }
-
-        map = ((GlobalParamsImpl) parameters.getGlobalParams()).getIn();
-        if ( map != null && !map.isEmpty() ) {
-            for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
-                Entry<String, Object> entry = (Entry<String, Object>) it.next();
-                wm.setGlobal( entry.getKey(),
-                                          entry.getValue() );
-            }
-        }
-
-        map = ((GlobalParamsImpl) parameters.getGlobalParams()).getInOut();
-        if ( map != null && !map.isEmpty() ) {
-            for ( Iterator it = map.entrySet().iterator(); it.hasNext(); ) {
-                Entry<String, Object> entry = (Entry<String, Object>) it.next();
-                results.put( entry.getKey(),
-                             entry.getValue() );
-                wm.setGlobal( entry.getKey(),
-                                          entry.getValue() );
-            }
-        }
-    }
-
-    private void getOutParams(InternalWorkingMemory wm,
-                              Parameters parameters,
-                              Map<String, Object> results) {
-        Collection<String> col = ((FactParamsImpl) parameters.getFactParams()).getOut();
-        if ( col != null && !col.isEmpty() ) {
-            for ( String identifer : col ) {
-                results.put( identifer,
-                             wm.getGlobal( identifer ) );
-            }
-        }
-
-        col = ((GlobalParamsImpl) parameters.getGlobalParams()).getOut();
-        if ( col != null && !col.isEmpty() ) {
-            for ( String identifer : col ) {
-                results.put( identifer,
-                             wm.getGlobal( identifer ) );
-            }
-        }
-    }
-
-    public Parameters newParameters() {
-        return new ParametersImpl();
-    }
-
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,6 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class AbortWorkItemCommand
     implements
@@ -16,7 +16,7 @@
         this.workItemId = workItemId;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         session.getWorkItemManager().abortWorkItem( workItemId );
         return null;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AddEventListenerCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AddEventListenerCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AddEventListenerCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,9 +1,9 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
 import org.drools.event.AgendaEventListener;
 import org.drools.event.RuleFlowEventListener;
 import org.drools.event.WorkingMemoryEventListener;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class AddEventListenerCommand
     implements
@@ -25,7 +25,7 @@
         this.ruleFlowEventlistener = listener;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         if ( workingMemoryEventlistener != null ) {
             session.addEventListener( workingMemoryEventlistener );
         } else if ( agendaEventlistener != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,9 +1,9 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 
-public interface Command<T> {
+public interface Command<T> extends org.drools.command.Command {
 	
-	T execute(StatefulSession session);
+	T execute(ReteooWorkingMemory session);
 	
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -3,7 +3,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class CompleteWorkItemCommand implements Command<Object> {
 	
@@ -26,7 +26,7 @@
 		this.results = results;
 	}
 
-	public Object execute(StatefulSession session) {
+	public Object execute(ReteooWorkingMemory session) {
 		session.getWorkItemManager().completeWorkItem(workItemId, results);
 		return null;
 	}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireAllRulesCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,7 +1,7 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.AgendaFilter;
 
 public class FireAllRulesCommand
@@ -22,7 +22,7 @@
         this.agendaFilter = agendaFilter;
     }
 
-    public Integer execute(StatefulSession session) {
+    public Integer execute(ReteooWorkingMemory session) {
         if ( max > 0 ) {
             return session.fireAllRules( max );
         } else if ( agendaFilter != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireUntilHaltCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireUntilHaltCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/FireUntilHaltCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,7 +1,7 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.AgendaFilter;
 
 public class FireUntilHaltCommand
@@ -17,7 +17,7 @@
         this.agendaFilter = agendaFilter;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         if ( agendaFilter != null ) {
             session.fireUntilHalt( new StatefulKnowledgeSessionImpl.AgendaFilterWrapper( agendaFilter ) );
         } else {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetAgendaCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetAgendaCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetAgendaCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,13 +1,13 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.Agenda;
 
 public class GetAgendaCommand
     implements
     Command<Agenda> {
 
-    public Agenda execute(StatefulSession session) {
+    public Agenda execute(ReteooWorkingMemory session) {
         return session.getAgenda();
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetAgendaEventListenersCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetAgendaEventListenersCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetAgendaEventListenersCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -2,14 +2,14 @@
 
 import java.util.Collection;
 
-import org.drools.StatefulSession;
 import org.drools.event.AgendaEventListener;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class GetAgendaEventListenersCommand
     implements
     Command<Collection<AgendaEventListener>> {
 
-    public Collection<AgendaEventListener> execute(StatefulSession session) {
+    public Collection<AgendaEventListener> execute(ReteooWorkingMemory session) {
         return session.getAgendaEventListeners();
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetEnvironmentCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetEnvironmentCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetEnvironmentCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,13 +1,13 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.Environment;
 
 public class GetEnvironmentCommand
     implements
     Command<Environment> {
 
-    public Environment execute(StatefulSession session) {
+    public Environment execute(ReteooWorkingMemory session) {
         return session.getEnvironment();
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetFactHandleCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetFactHandleCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetFactHandleCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,6 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.FactHandle;
 
 public class GetFactHandleCommand
@@ -13,7 +13,7 @@
         this.object = object;
     }
 
-    public FactHandle execute(StatefulSession session) {
+    public FactHandle execute(ReteooWorkingMemory session) {
         session.getFactHandle( object );
         return null;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetFactHandlesCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetFactHandlesCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetFactHandlesCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -2,9 +2,9 @@
 
 import java.util.Collection;
 
-import org.drools.StatefulSession;
 import org.drools.impl.StatefulKnowledgeSessionImpl.ObjectStoreWrapper;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.ObjectFilter;
 import org.drools.runtime.rule.FactHandle;
 
@@ -21,7 +21,7 @@
         this.filter = filter;
     }
 
-    public Collection< ? extends FactHandle> execute(StatefulSession session) {
+    public Collection< ? extends FactHandle> execute(ReteooWorkingMemory session) {
         ReteooStatefulSession reteooStatefulSession = (ReteooStatefulSession) session;
 
         if ( filter != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetGlobalCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetGlobalCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetGlobalCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,21 +1,37 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class GetGlobalCommand
     implements
     Command<Object> {
 
     private String identifier;
+    private String outIdentifier;
 
     public GetGlobalCommand(String identifier) {
         this.identifier = identifier;
     }
 
-    public Object execute(StatefulSession session) {
-        return session.getGlobal( identifier );
+    public String getOutIdentifier() {
+        return outIdentifier;
     }
 
+    public void setOutIdentifier(String outIdentifier) {
+        this.outIdentifier = outIdentifier;
+    }
+
+    public String getIdentifier() {
+        return identifier;
+    }
+
+    public Object execute(ReteooWorkingMemory session) {
+        Object object = session.getGlobal( this.identifier );
+        session.getBatchExecutionResult().getResults().put( (this.outIdentifier != null) ? this.outIdentifier : this.identifier,
+                                                            object );
+        return object;
+    }
+
     public String toString() {
         return "session.getGlobal( " + identifier + " );";
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetGlobalsCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetGlobalsCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetGlobalsCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,13 +1,13 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.Globals;
 
 public class GetGlobalsCommand
     implements
     Command<Globals> {
 
-    public Globals execute(StatefulSession session) {
+    public Globals execute(ReteooWorkingMemory session) {
         return (Globals) session.getGlobalResolver();
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetKnowledgeBaseCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetKnowledgeBaseCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetKnowledgeBaseCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -2,8 +2,8 @@
 
 import org.drools.KnowledgeBase;
 import org.drools.RuleBase;
-import org.drools.StatefulSession;
 import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class GetKnowledgeBaseCommand
     implements
@@ -12,7 +12,7 @@
     public GetKnowledgeBaseCommand() {
     }
 
-    public KnowledgeBase execute(StatefulSession session) {
+    public KnowledgeBase execute(ReteooWorkingMemory session) {
         RuleBase ruleBase = session.getRuleBase();
 
         return new KnowledgeBaseImpl( ruleBase );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,6 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.FactHandle;
 
 public class GetObjectCommand
@@ -13,7 +13,7 @@
         this.factHandle = factHandle;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         return session.getObject( factHandle );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetObjectsCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -2,7 +2,7 @@
 
 import java.util.Iterator;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.ObjectFilter;
 
 public class GetObjectsCommand
@@ -18,7 +18,7 @@
         this.filter = filter;
     }
 
-    public Iterator< ? > execute(StatefulSession session) {
+    public Iterator< ? > execute(ReteooWorkingMemory session) {
         if ( filter != null ) {
             return session.iterateObjects( filter );
         } else {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessEventListenersCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessEventListenersCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessEventListenersCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -2,14 +2,14 @@
 
 import java.util.Collection;
 
-import org.drools.StatefulSession;
 import org.drools.event.RuleFlowEventListener;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class GetProcessEventListenersCommand
     implements
     Command<Collection<RuleFlowEventListener>> {
 
-    public Collection<RuleFlowEventListener> execute(StatefulSession session) {
+    public Collection<RuleFlowEventListener> execute(ReteooWorkingMemory session) {
         return session.getRuleFlowEventListeners();
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,7 +1,7 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
 import org.drools.process.instance.ProcessInstance;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class GetProcessInstanceCommand implements Command<ProcessInstance> {
 	
@@ -15,7 +15,7 @@
 		this.processInstanceId = processInstanceId;
 	}
 	
-	public ProcessInstance execute(StatefulSession session) {
+	public ProcessInstance execute(ReteooWorkingMemory session) {
 		if (processInstanceId == null) {
 			return null;
 		}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstancesCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstancesCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstancesCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -3,14 +3,14 @@
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.process.ProcessInstance;
 
 public class GetProcessInstancesCommand
     implements
     Command<Collection<ProcessInstance>> {
 
-    public Collection<ProcessInstance> execute(StatefulSession session) {
+    public Collection<ProcessInstance> execute(ReteooWorkingMemory session) {
         Collection<org.drools.process.instance.ProcessInstance> instances = session.getProcessInstances();
         Collection<ProcessInstance> result = new ArrayList<ProcessInstance>();
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetSessionClockCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetSessionClockCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetSessionClockCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,13 +1,13 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.time.SessionClock;
 
 public class GetSessionClockCommand
     implements
     Command<SessionClock> {
 
-    public SessionClock execute(StatefulSession session) {
+    public SessionClock execute(ReteooWorkingMemory session) {
         return session.getSessionClock();
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetWorkingMemoryEntryPointCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetWorkingMemoryEntryPointCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetWorkingMemoryEntryPointCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,6 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 
 public class GetWorkingMemoryEntryPointCommand
@@ -13,7 +13,7 @@
         this.name = name;
     }
 
-    public WorkingMemoryEntryPoint execute(StatefulSession session) {
+    public WorkingMemoryEntryPoint execute(ReteooWorkingMemory session) {
         return session.getWorkingMemoryEntryPoint( name );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetWorkingMemoryEventListenersCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetWorkingMemoryEventListenersCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetWorkingMemoryEventListenersCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -2,14 +2,14 @@
 
 import java.util.Collection;
 
-import org.drools.StatefulSession;
 import org.drools.event.WorkingMemoryEventListener;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class GetWorkingMemoryEventListenersCommand
     implements
     Command<Collection<WorkingMemoryEventListener>> {
 
-    public Collection<WorkingMemoryEventListener> execute(StatefulSession session) {
+    public Collection<WorkingMemoryEventListener> execute(ReteooWorkingMemory session) {
         return session.getWorkingMemoryEventListeners();
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/HaltCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/HaltCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/HaltCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,12 +1,12 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class HaltCommand
     implements
     Command<Object> {
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         session.halt();
         return null;
     }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertElementsCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertElementsCommand.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertElementsCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,45 @@
+package org.drools.process.command;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.rule.FactHandle;
+
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+public class InsertElementsCommand
+    implements
+    Command<Collection<FactHandle>> {
+    public Collection objects;
+
+    public InsertElementsCommand() {
+        this.objects = new ArrayList();
+    }
+
+    public InsertElementsCommand(Collection objects) {
+        this.objects = objects;
+    }
+    
+    public Collection getObjects() {
+        return this.objects;
+    }
+
+    public void setObjects(Collection objects) {
+        this.objects = objects;
+    }
+
+    public Collection<FactHandle> execute(ReteooWorkingMemory session) {
+        List<FactHandle> handles = new ArrayList<FactHandle>( objects.size() );
+        for ( Object object : objects ) {
+            handles.add( session.insert( object ) );
+        }
+        return handles;
+    }
+
+    public String toString() {
+        return "insert " + objects;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,21 +1,38 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.FactHandle;
 
 public class InsertObjectCommand implements Command<FactHandle> {
 	
 	private Object object;
 	
+    private String outIdentifier;
+	
 	public InsertObjectCommand(Object object) {
 		this.object = object;
 	}
 	
-	public FactHandle execute(StatefulSession session) {
+	public FactHandle execute(ReteooWorkingMemory session) {
+	    if ( outIdentifier != null ) {
+	        session.getBatchExecutionResult().getResults().put( this.outIdentifier, object );
+	    }
 		return session.insert(object);
 	}
+	
+	public Object getObject() {
+	    return this.object;
+	}
 
-	public String toString() {
+    public String getOutIdentifier() {
+        return this.outIdentifier;
+    }
+
+    public void setOutIdentifier(String outIdentifier) {
+        this.outIdentifier = outIdentifier;
+    }
+
+    public String toString() {
 		return "session.insert(" + object + ");";
 	}
 

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/QueryCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/QueryCommand.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/QueryCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,55 @@
+package org.drools.process.command;
+
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.BatchExecutionResult;
+import org.drools.runtime.rule.QueryResults;
+import org.drools.runtime.rule.impl.NativeQueryResults;
+
+public class QueryCommand  implements Command<QueryResults> {
+    private String outIdentifier;
+    private String name;
+    private Object[] arguments;
+    
+    public QueryCommand(String outIdentifier, String name, Object[] arguments) {
+        this.outIdentifier = outIdentifier;
+        this.name = name;
+        this.arguments = arguments;
+    }
+    
+    public String getOutIdentifier() {
+        return outIdentifier;
+    }
+
+    public void setOutIdentifier(String outIdentifier) {
+        this.outIdentifier = outIdentifier;
+    }
+
+    public String getName() {
+        return name;
+    }
+    public void setName(String name) {
+        this.name = name;
+    }
+    public Object[] getArguments() {
+        return arguments;
+    }
+    public void setArguments(Object[] arguments) {
+        this.arguments = arguments;
+    }
+
+    public QueryResults execute(ReteooWorkingMemory session) {
+        QueryResults results = null;
+        
+        if ( arguments == null || arguments.length == 0 ) {
+            results = new NativeQueryResults( session.getQueryResults( name ) );
+        } else {
+            results = new NativeQueryResults( session.getQueryResults( name, this.arguments ) );
+        }
+        
+        if ( this.outIdentifier != null ) {
+            session.getBatchExecutionResult().getResults().put( this.outIdentifier, results );
+        }
+
+        return results;
+    }
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RegisterExitPointCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RegisterExitPointCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RegisterExitPointCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,7 +1,7 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.ExitPoint;
 
 public class RegisterExitPointCommand
@@ -17,7 +17,7 @@
         this.exitPoint = exitPoint;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         ReteooStatefulSession reteooStatefulSession = (ReteooStatefulSession) session;
 
         reteooStatefulSession.registerExitPoint( name,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RegisterWorkItemHandlerCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RegisterWorkItemHandlerCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RegisterWorkItemHandlerCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,6 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.process.WorkItemHandler;
 
 public class RegisterWorkItemHandlerCommand implements Command<Object> {
@@ -24,7 +24,7 @@
 		this.workItemName = workItemName;
 	}
 
-	public Object execute(StatefulSession session) {
+	public Object execute(ReteooWorkingMemory session) {
 		session.getWorkItemManager().registerWorkItemHandler(workItemName, handler);
 		return null;
 	}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RemoveEventListenerCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RemoveEventListenerCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RemoveEventListenerCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,9 +1,9 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
 import org.drools.event.AgendaEventListener;
 import org.drools.event.RuleFlowEventListener;
 import org.drools.event.WorkingMemoryEventListener;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class RemoveEventListenerCommand
     implements
@@ -25,7 +25,7 @@
         this.ruleFlowEventListener = listener;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         if ( workingMemoryEventListener != null ) {
             session.removeEventListener( workingMemoryEventListener );
         } else if ( agendaEventListener != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RetractCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RetractCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/RetractCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,6 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.FactHandle;
 
 public class RetractCommand
@@ -13,7 +13,7 @@
         this.handle = handle;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         session.retract( handle );
         return null;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SetGlobalCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SetGlobalCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SetGlobalCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,6 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class SetGlobalCommand
     implements
@@ -8,6 +8,10 @@
 
     private String identifier;
     private Object object;
+    
+    private String outIdentifier;
+    
+    private boolean out;
 
     public SetGlobalCommand(String identifier,
                             Object object) {
@@ -15,14 +19,44 @@
         this.object = object;
     }
 
-    public Void execute(StatefulSession session) {
-        session.setGlobal( identifier,
-                           object );
+    public Void execute(ReteooWorkingMemory session) {
+        if ( this.out ) {
+            session.getBatchExecutionResult().getResults().put( ( this.outIdentifier != null ) ? this.outIdentifier : this.identifier, 
+                                                                object );
+        }
+        
+        session.setGlobal( this.identifier,
+                           this.object );
         return null;
     }
 
+    public String getIdentifier() {
+        return this.identifier;
+    }
+
+    public Object getObject() {
+        return this.object;
+    }
+
+    public String getOutIdentifier() {
+        return this.outIdentifier;
+    }
+
+    public void setOutIdentifier(String outIdentifier) {
+        this.outIdentifier = outIdentifier;
+        this.out = true;
+    }
+
+    public boolean isOut() {
+        return this.out;
+    }
+
+    public void setOut(boolean out) {
+        this.out = out;
+    }    
+    
     public String toString() {
-        return "session.setGlobal(" + identifier + ", " + object + ");";
+        return "session.setGlobal(" + this.identifier + ", " + this.object + ");";
     }
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,7 +1,7 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
 import org.drools.process.instance.ProcessInstance;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class SignalEventCommand implements Command<Object> {
 	
@@ -33,7 +33,7 @@
 		this.event = event;
 	}
 
-	public Object execute(StatefulSession session) {
+	public Object execute(ReteooWorkingMemory session) {
 		if (processInstanceId == -1) {
 			session.getSignalManager().signalEvent(eventType, event);
 		} else {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -4,8 +4,8 @@
 import java.util.List;
 import java.util.Map;
 
-import org.drools.StatefulSession;
 import org.drools.process.instance.ProcessInstance;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class StartProcessCommand implements Command<ProcessInstance> {
 	
@@ -37,7 +37,7 @@
 		this.data = data;
 	}
 
-	public ProcessInstance execute(StatefulSession session) {
+	public ProcessInstance execute(ReteooWorkingMemory session) {
 		if (data != null) {
 			for (Object o: data) {
 				session.insert(o);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/UnregisterExitPointCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/UnregisterExitPointCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/UnregisterExitPointCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,7 +1,7 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
 import org.drools.reteoo.ReteooStatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class UnregisterExitPointCommand
     implements
@@ -13,7 +13,7 @@
         this.name = name;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         ReteooStatefulSession reteooStatefulSession = (ReteooStatefulSession) session;
 
         reteooStatefulSession.unregisterExitPoint( name );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/UpdateCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/UpdateCommand.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/UpdateCommand.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,6 +1,6 @@
 package org.drools.process.command;
 
-import org.drools.StatefulSession;
+import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.runtime.rule.FactHandle;
 
 public class UpdateCommand
@@ -16,7 +16,7 @@
         this.object = object;
     }
 
-    public Object execute(StatefulSession session) {
+    public Object execute(ReteooWorkingMemory session) {
         session.update( handle,
                         object );
         return null;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/CommandBasedStatefulKnowledgeSession.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -6,6 +6,7 @@
 import java.util.Map;
 
 import org.drools.KnowledgeBase;
+import org.drools.command.Command;
 import org.drools.event.process.ProcessEventListener;
 import org.drools.event.rule.AgendaEventListener;
 import org.drools.event.rule.WorkingMemoryEventListener;
@@ -37,6 +38,7 @@
 import org.drools.process.command.GetWorkingMemoryEventListenersCommand;
 import org.drools.process.command.HaltCommand;
 import org.drools.process.command.InsertObjectCommand;
+import org.drools.process.command.QueryCommand;
 import org.drools.process.command.RegisterExitPointCommand;
 import org.drools.process.command.RegisterWorkItemHandlerCommand;
 import org.drools.process.command.RemoveEventListenerCommand;
@@ -47,6 +49,7 @@
 import org.drools.process.command.UnregisterExitPointCommand;
 import org.drools.process.command.UpdateCommand;
 import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.BatchExecutionResult;
 import org.drools.runtime.Environment;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.Globals;
@@ -58,6 +61,7 @@
 import org.drools.runtime.rule.Agenda;
 import org.drools.runtime.rule.AgendaFilter;
 import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.QueryResults;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.time.SessionClock;
 
@@ -350,5 +354,29 @@
     public Environment getEnvironment() {
         return commandService.execute( new GetEnvironmentCommand() );
     }
+    
+    public BatchExecutionResult execute(Command command) {        
+        try {            
+            ((ReteooWorkingMemory)this.commandService.getSession()).startBatchExecution();
+            
+            this.commandService.execute( (org.drools.process.command.Command) command );
+            
+            BatchExecutionResult result = ((ReteooWorkingMemory)this.commandService.getSession()).getBatchExecutionResult();
+            return result;
+        } finally {
+            ((ReteooWorkingMemory)this.commandService.getSession()).endBatchExecution();
+        }
+    }
 
+    public QueryResults getQueryResults(String query) {
+        QueryCommand cmd = new QueryCommand(null, query, null);
+        return this.commandService.execute( cmd );
+    }
+
+    public QueryResults getQueryResults(String query,
+                                        Object[] arguments) {
+        QueryCommand cmd = new QueryCommand(null, query, arguments);
+        return this.commandService.execute( cmd );
+    }    
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -3,17 +3,18 @@
 import org.drools.StatefulSession;
 import org.drools.process.command.Command;
 import org.drools.process.command.CommandService;
+import org.drools.reteoo.ReteooWorkingMemory;
 
 public class DefaultCommandService implements CommandService {
 
-	private StatefulSession session;
+	private ReteooWorkingMemory session;
 	
 	public DefaultCommandService(StatefulSession session) {
-		this.session = session;
+		this.session = ( ReteooWorkingMemory ) session;
 	}
 	
 	public StatefulSession getSession() {
-		return session;
+		return ( StatefulSession ) session;
 	}
 	
 	public <T> T execute(Command<T> command) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -38,7 +38,7 @@
 public class ReteooStatefulSession extends ReteooWorkingMemory
     implements
     StatefulSession,
-    Externalizable {
+    Externalizable { 
 
     private static final long         serialVersionUID = -5360554247241558374L;
     private transient ExecutorService executor;

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchMessageHelperProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchMessageHelperProviderImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/BatchMessageHelperProviderImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,540 @@
+package org.drools.runtime.help.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.drools.process.command.GetGlobalCommand;
+import org.drools.process.command.InsertElementsCommand;
+import org.drools.process.command.InsertObjectCommand;
+import org.drools.process.command.QueryCommand;
+import org.drools.process.command.SetGlobalCommand;
+import org.drools.process.command.StartProcessCommand;
+import org.drools.runtime.BatchExecutionResult;
+import org.drools.runtime.BatchRequestMessage;
+import org.drools.runtime.help.BatchExecutionHelperProvider;
+import org.drools.runtime.impl.BatchExecutionResultImpl;
+import org.drools.runtime.impl.BatchExecutionImpl;
+import org.drools.runtime.rule.QueryResultsRow;
+import org.drools.runtime.rule.QueryResults;
+import org.drools.runtime.rule.impl.FlatQueryResults;
+import org.drools.runtime.rule.impl.NativeQueryResults;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.converters.Converter;
+import com.thoughtworks.xstream.converters.MarshallingContext;
+import com.thoughtworks.xstream.converters.UnmarshallingContext;
+import com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter;
+import com.thoughtworks.xstream.io.HierarchicalStreamReader;
+import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
+import com.thoughtworks.xstream.mapper.Mapper;
+
+public class BatchMessageHelperProviderImpl
+    implements
+    BatchExecutionHelperProvider {
+
+    public XStream newXStreamMarshaller() {
+        ElementNames names = new XmlElementNames();
+        //ElementNames names = new JsonElementNames();
+
+        //XStream xstream = new XStream( new JettisonMappedXmlDriver() );       
+        XStream xstream = new XStream();
+        //xstream.setMode( XStream.NO_REFERENCES );
+        xstream.processAnnotations( BatchExecutionImpl.class );
+        xstream.addImplicitCollection( BatchExecutionImpl.class,
+                                       "commands" );
+
+        xstream.alias( "batch-execution",
+                       BatchExecutionImpl.class );
+        xstream.alias( "insert",
+                       InsertObjectCommand.class );
+        xstream.alias( "insert-elements",
+                       InsertElementsCommand.class );
+        xstream.alias( "startProcess",
+                       StartProcessCommand.class );
+        xstream.alias( "query",
+                       QueryCommand.class );
+        xstream.alias( "set-global",
+                       SetGlobalCommand.class );
+        xstream.alias( "get-global",
+                       GetGlobalCommand.class );        
+        xstream.alias( "batch-execution-results", BatchExecutionResultImpl.class );
+        xstream.alias( "query-results", FlatQueryResults.class );
+        xstream.alias( "query-results", NativeQueryResults.class );
+
+        xstream.registerConverter( new InsertConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new InsertElementsConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new StartProcessConvert( xstream.getMapper() ) );
+        xstream.registerConverter( new QueryConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new SetGlobalConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new GetGlobalConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new BatchExecutionResultConverter( xstream.getMapper() ) );
+        xstream.registerConverter( new QueryResultsConverter( xstream.getMapper() ) );
+
+        xstream.addImplicitCollection( InsertElementsCommand.class,
+                                       "objects" );
+
+        return xstream;
+    }
+
+    public static interface ElementNames {
+        public String getIn();
+
+        public String getInOut();
+
+        public String getOut();
+    }
+
+    public static class JsonElementNames
+        implements
+        ElementNames {
+        private String in    = "in";
+        private String inOut = "inOut";
+        private String out   = "out";
+
+        public String getIn() {
+            return in;
+        }
+
+        public String getInOut() {
+            return inOut;
+        }
+
+        public String getOut() {
+            return out;
+        }
+    }
+
+    public static class XmlElementNames
+        implements
+        ElementNames {
+        private String in    = "in";
+        private String inOut = "in-out";
+        private String out   = "out";
+
+        public String getIn() {
+            return in;
+        }
+
+        public String getInOut() {
+            return inOut;
+        }
+
+        public String getOut() {
+            return out;
+        }
+    }
+
+    public static class InsertConverter extends AbstractCollectionConverter
+        implements
+        Converter {
+
+        public InsertConverter(Mapper mapper) {
+            super( mapper );
+        }
+
+        public void marshal(Object object,
+                            HierarchicalStreamWriter writer,
+                            MarshallingContext context) {
+            InsertObjectCommand cmd = (InsertObjectCommand) object;
+            if ( cmd.getOutIdentifier() != null ) {
+                writer.addAttribute( "out-identifier",
+                                     cmd.getOutIdentifier() );
+            }
+            writeItem( cmd.getObject(),
+                       context,
+                       writer );
+        }
+
+        public Object unmarshal(HierarchicalStreamReader reader,
+                                UnmarshallingContext context) {
+            String identifierOut = reader.getAttribute( "out-identifier" );
+
+            reader.moveDown();
+            Object object = readItem( reader,
+                                      context,
+                                      null );
+            reader.moveUp();
+            InsertObjectCommand cmd = new InsertObjectCommand( object );
+            if ( identifierOut != null ) {
+                cmd.setOutIdentifier( identifierOut );
+            }
+            return cmd;
+        }
+
+        public boolean canConvert(Class clazz) {
+            return clazz.equals( InsertObjectCommand.class );
+        }
+
+    }
+
+    public static class InsertElementsConverter extends AbstractCollectionConverter
+        implements
+        Converter {
+
+        public InsertElementsConverter(Mapper mapper) {
+            super( mapper );
+        }
+
+        public void marshal(Object object,
+                            HierarchicalStreamWriter writer,
+                            MarshallingContext context) {
+            InsertElementsCommand cmd = (InsertElementsCommand) object;
+            for ( Object element : cmd.getObjects() ) {
+                writeItem( element,
+                           context,
+                           writer );
+            }
+        }
+
+        public Object unmarshal(HierarchicalStreamReader reader,
+                                UnmarshallingContext context) {
+            List objects = new ArrayList();
+            while ( reader.hasMoreChildren() ) {
+                reader.moveDown();
+                Object object = readItem( reader,
+                                          context,
+                                          null );
+                reader.moveUp();
+                objects.add( object );
+            }
+            InsertElementsCommand cmd = new InsertElementsCommand( objects );
+
+            return cmd;
+        }
+
+        public boolean canConvert(Class clazz) {
+            return clazz.equals( InsertElementsCommand.class );
+        }
+
+    }
+
+    public static class SetGlobalConverter extends AbstractCollectionConverter
+        implements
+        Converter {
+
+        public SetGlobalConverter(Mapper mapper) {
+            super( mapper );
+        }
+
+        public void marshal(Object object,
+                            HierarchicalStreamWriter writer,
+                            MarshallingContext context) {
+            SetGlobalCommand cmd = (SetGlobalCommand) object;
+
+            writer.addAttribute( "identifier",
+                                 cmd.getIdentifier() );
+            
+            if ( cmd.getOutIdentifier() != null ) {
+                writer.addAttribute( "out-identifier",
+                                     cmd.getOutIdentifier() );
+            }  else if ( cmd.isOut() ) {
+                writer.addAttribute( "out",
+                                     Boolean.toString( cmd.isOut() ) );
+            } 
+
+            writeItem( cmd.getObject(),
+                       context,
+                       writer );
+        }
+
+        public Object unmarshal(HierarchicalStreamReader reader,
+                                UnmarshallingContext context) {
+            String identifier = reader.getAttribute( "identifier" );
+            String out = reader.getAttribute( "out" );
+            String identifierOut = reader.getAttribute( "out-identifier" );
+
+            reader.moveDown();
+            Object object = readItem( reader,
+                                      context,
+                                      null );
+            reader.moveUp();
+            SetGlobalCommand cmd = new SetGlobalCommand( identifier,
+                                                         object );
+            if ( identifierOut != null ) {
+                cmd.setOutIdentifier( identifierOut );
+            } else if ( out != null ) {
+                cmd.setOut( Boolean.parseBoolean( out ) );
+            }
+            return cmd;
+        }
+
+        public boolean canConvert(Class clazz) {
+            return clazz.equals( SetGlobalCommand.class );
+        }
+    }
+
+    public static class GetGlobalConverter extends AbstractCollectionConverter
+    implements
+    Converter {
+
+    public GetGlobalConverter(Mapper mapper) {
+        super( mapper );
+    }
+
+    public void marshal(Object object,
+                        HierarchicalStreamWriter writer,
+                        MarshallingContext context) {
+        GetGlobalCommand cmd = (GetGlobalCommand) object;
+
+        writer.addAttribute( "identifier",
+                             cmd.getIdentifier() );
+        
+        if ( cmd.getOutIdentifier() != null ) {
+            writer.addAttribute( "out-identifier",
+                                 cmd.getOutIdentifier() );
+        } 
+    }
+
+    public Object unmarshal(HierarchicalStreamReader reader,
+                            UnmarshallingContext context) {
+        String identifier = reader.getAttribute( "identifier" );
+        String identifierOut = reader.getAttribute( "out-identifier" );
+
+        GetGlobalCommand cmd = new GetGlobalCommand( identifier  );
+        if ( identifierOut != null ) {
+            cmd.setOutIdentifier( identifierOut );
+        } 
+        return cmd;
+    }
+
+    public boolean canConvert(Class clazz) {
+        return clazz.equals( GetGlobalCommand.class );
+    }
+}    
+    
+    public static class QueryConverter extends AbstractCollectionConverter
+        implements
+        Converter {
+
+        public QueryConverter(Mapper mapper) {
+            super( mapper );
+        }
+
+        public void marshal(Object object,
+                            HierarchicalStreamWriter writer,
+                            MarshallingContext context) {
+            QueryCommand cmd = (QueryCommand) object;
+            writer.addAttribute( "out-identifier",
+                                 cmd.getOutIdentifier() );
+            writer.addAttribute( "name",
+                                 cmd.getName() );
+            if ( cmd.getArguments() != null) {
+                for ( Object arg : cmd.getArguments() ) {
+                    writeItem( arg,
+                               context,
+                               writer );
+                }
+            }
+        }
+
+        public Object unmarshal(HierarchicalStreamReader reader,
+                                UnmarshallingContext context) {
+            List<String> outs = new ArrayList<String>();
+
+            //Query cmd = null;
+            String outIdentifier = reader.getAttribute( "out-identifier" );
+            String name = reader.getAttribute( "name" );
+            List<Object> args = new ArrayList<Object>();
+            while ( reader.hasMoreChildren() ) {
+                reader.moveDown();
+                Object arg = readItem( reader,
+                                       context,
+                                       null );
+                args.add( arg );
+                reader.moveUp();
+            }
+            QueryCommand cmd = new QueryCommand( outIdentifier,
+                                                 name,
+                                                 args.toArray( new Object[args.size()] ) );
+
+            return cmd;
+        }
+
+        public boolean canConvert(Class clazz) {
+            return clazz.equals( QueryCommand.class );
+        }
+    }
+
+    public static class StartProcessConvert extends AbstractCollectionConverter
+        implements
+        Converter {
+
+        public StartProcessConvert(Mapper mapper) {
+            super( mapper );
+        }
+
+        public void marshal(Object object,
+                            HierarchicalStreamWriter writer,
+                            MarshallingContext context) {
+            StartProcessCommand cmd = (StartProcessCommand) object;
+            writer.addAttribute( "processId",
+                                 cmd.getProcessId() );
+
+            for ( Entry<String, Object> entry : cmd.getParameters().entrySet() ) {
+                writer.startNode( "parameter" );
+                writer.addAttribute( "identifier",
+                                     entry.getKey() );
+                writeItem( entry.getValue(),
+                           context,
+                           writer );
+                writer.endNode();
+            }
+        }
+
+        public Object unmarshal(HierarchicalStreamReader reader,
+                                UnmarshallingContext context) {
+            String processId = reader.getAttribute( "processId" );
+
+            Map<String, Object> params = new HashMap<String, Object>();
+            while ( reader.hasMoreChildren() ) {
+                reader.moveDown();
+                String identifier = reader.getAttribute( "identifier" );
+                reader.moveDown();
+                Object value = readItem( reader,
+                                         context,
+                                         null );
+                reader.moveUp();
+                params.put( identifier,
+                            value );
+                reader.moveUp();
+            }
+            StartProcessCommand cmd = new StartProcessCommand();
+            cmd.setProcessId( processId );
+            cmd.setParameters( params );
+
+            return cmd;
+        }
+
+        public boolean canConvert(Class clazz) {
+            return clazz.equals( StartProcessCommand.class );
+        }
+    }
+    
+    public static class BatchExecutionResultConverter extends AbstractCollectionConverter
+    implements
+    Converter {
+
+    public BatchExecutionResultConverter(Mapper mapper) {
+        super( mapper );
+    }
+
+    public void marshal(Object object,
+                        HierarchicalStreamWriter writer,
+                        MarshallingContext context) {
+        BatchExecutionResult result = (BatchExecutionResult) object;
+        for ( String identifier : result.getIdentifiers() ) {
+            writer.startNode( "result" );
+            writer.addAttribute( "identifier", identifier );
+            Object value = result.getValue( identifier );
+            writeItem( value,
+                       context,
+                       writer ); 
+            writer.endNode();
+        }
+    }
+
+    public Object unmarshal(HierarchicalStreamReader reader,
+                            UnmarshallingContext context) {
+        Map map = new HashMap();
+        
+        while ( reader.hasMoreChildren() ) {
+            reader.moveDown();
+            String identifier= reader.getAttribute( "identifier" );
+            reader.moveDown();
+            Object value = readItem( reader,
+                                   context,
+                                   null );
+            map.put( identifier, value);
+            reader.moveUp();
+            reader.moveUp();
+        }
+        
+        BatchExecutionResultImpl result = new BatchExecutionResultImpl();
+        result.setResults( map );
+
+        return result;
+    }
+
+    public boolean canConvert(Class clazz) {
+        return BatchExecutionResult.class.isAssignableFrom( clazz );
+    }
+}    
+
+    public static class QueryResultsConverter extends AbstractCollectionConverter
+        implements
+        Converter {
+
+        public QueryResultsConverter(Mapper mapper) {
+            super( mapper );
+        }
+
+        public void marshal(Object object,
+                            HierarchicalStreamWriter writer,
+                            MarshallingContext context) {
+            QueryResults results = (QueryResults) object;
+            
+            // write out identifiers
+            String[] identifiers = results.getIdentifiers();            
+            writer.startNode( "identifiers" );
+            for ( int i = 0; i < identifiers.length; i++ ) {
+                writer.startNode( "identifier" );
+                writer.setValue( identifiers[i] );
+                writer.endNode();
+            }
+            writer.endNode();
+            
+            for ( QueryResultsRow result : results ) {
+                writer.startNode( "row" );
+                for ( int i = 0; i < identifiers.length; i++ ) {
+                    Object value = result.get( identifiers[i] );
+                    writeItem( value,
+                               context,
+                               writer ); 
+                }
+                writer.endNode();
+            }
+        }
+
+        public Object unmarshal(HierarchicalStreamReader reader,
+                                UnmarshallingContext context) {
+            reader.moveDown();
+            List<String> list = new ArrayList<String>();
+            while( reader.hasMoreChildren() ) {
+                reader.moveDown();
+                list.add( reader.getValue() );
+                reader.moveUp();
+            }
+            reader.moveUp();
+            
+            Map<String, Integer> identifiers = new HashMap<String, Integer>();
+            for ( int i = 0; i < list.size(); i++ ) {
+                identifiers.put( list.get( i ), i);
+            }
+            
+            List results = new ArrayList();
+            while( reader.hasMoreChildren() ) {
+                reader.moveDown();
+                List objects = new ArrayList();
+                while( reader.hasMoreChildren() ) {
+                    reader.moveDown();
+                    Object object = readItem( reader,
+                                           context,
+                                           null );                    
+                    objects.add( object );
+                    reader.moveUp();
+                }
+                results.add( objects );
+                reader.moveUp();
+            }
+            
+            return  new FlatQueryResults(identifiers, results );
+        }
+
+        public boolean canConvert(Class clazz) {
+            return QueryResults.class.isAssignableFrom( clazz );
+        }
+    }
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,29 @@
+package org.drools.runtime.impl;
+
+import java.util.List;
+
+import org.drools.process.command.Command;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.runtime.BatchExecutionResult;
+
+
+public class BatchExecutionImpl implements Command<Void> {
+	private List<Command> commands;
+
+	public BatchExecutionImpl(List<Command> commands) {
+        super();
+        this.commands = commands;
+    }
+
+    public List<Command> getCommands() {
+        return commands;
+    }
+
+    public Void execute(ReteooWorkingMemory session) {
+        for ( Command command : commands ) {
+            ((org.drools.process.command.Command)command).execute( session );
+        }
+        return null;
+    }	
+    
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionResultImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionResultImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/impl/BatchExecutionResultImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,33 @@
+package org.drools.runtime.impl;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.runtime.BatchExecutionResult;
+
+public class BatchExecutionResultImpl implements BatchExecutionResult {
+    Map<String, Object> results = new HashMap<String, Object>();
+    
+    /* (non-Javadoc)
+     * @see org.drools.batchexecution.BatchExecutionResult#getIdentifiers()
+     */
+    public Collection<String> getIdentifiers() {
+        return this.results.keySet();
+    }
+    
+    public Object getValue(String identifier) {
+        return this.results.get( identifier );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.batchexecution.BatchExecutionResult#getResults()
+     */
+    public Map<String, Object> getResults() {
+        return this.results;
+    }
+
+    public void setResults(Map<String, Object> results) {
+        this.results = results;
+    }
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/BasePipelineContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/BasePipelineContext.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/BasePipelineContext.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -3,6 +3,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.drools.runtime.BatchExecutor;
 import org.drools.runtime.pipeline.PipelineContext;
 import org.drools.runtime.pipeline.ResultHandler;
 
@@ -44,5 +45,9 @@
     public void setResult(Object result) {
         this.result = result;
     }
+
+    public BatchExecutor getBatchExecutor() {
+        throw new UnsupportedOperationException( "this method is not implemented" );
+    }
         
 }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/BatchExecutorStage.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/BatchExecutorStage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/BatchExecutorStage.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,29 @@
+package org.drools.runtime.pipeline.impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.drools.command.Command;
+import org.drools.command.CommandFactory;
+import org.drools.runtime.BatchExecution;
+import org.drools.runtime.BatchExecutionResult;
+import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
+import org.drools.runtime.pipeline.PipelineContext;
+
+public class BatchExecutorStage extends BaseEmitter
+    implements
+    KnowledgeRuntimeCommand {
+
+    public void receive(Object object,
+                        PipelineContext context) {
+        BasePipelineContext kContext = (BasePipelineContext) context;
+        if ( object instanceof Collection ) {
+            object = CommandFactory.newBatchExecution( (List<Command>) object );
+        }
+        BatchExecutionResult result = kContext.getBatchExecutor().execute( (Command) object );
+
+        emit( result,
+              kContext );
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/CorePipelineProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/CorePipelineProviderImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/CorePipelineProviderImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import org.drools.process.command.InsertElementsCommand;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.runtime.pipeline.Action;
@@ -28,18 +29,18 @@
                                                          entryPointName );
     }
 
-    public Pipeline newStatelessKnowledgeSessionPipelineImpl(StatelessKnowledgeSession ksession) {
+    public Pipeline newStatelessKnowledgeSessionPipeline(StatelessKnowledgeSession ksession) {
         return new StatelessKnowledgeSessionPipelineImpl( ksession );
     }
+    
+    public KnowledgeRuntimeCommand newBatchExecutor() {
+        return new BatchExecutorStage();
+    }
 
     public KnowledgeRuntimeCommand newStatefulKnowledgeSessionInsert() {
         return new StatefulKnowledgeSessionInsertStage();
     }
 
-    public KnowledgeRuntimeCommand newStatelessKnowledgeSessionExecute() {
-        return new StatelessKnowledgeSessionExecuteStage();
-    }
-
     public KnowledgeRuntimeCommand newStatefulKnowledgeSessionGetGlobal() {
         return new StatefulKnowledgeSessionGetGlobalStage();
     }
@@ -103,4 +104,12 @@
     public Callable newCallable() {
         return new CallableImpl();
     }
+
+    public KnowledgeRuntimeCommand newInsertElementsCommand() {
+        return new InsertElementsCommandStage();
+    }
+
+    public KnowledgeRuntimeCommand newInsertObjectCommand() {
+        return new InsertObjectCommandStage();
+    }
 }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertElementsCommandStage.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertElementsCommandStage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertElementsCommandStage.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,23 @@
+/**
+ * 
+ */
+package org.drools.runtime.pipeline.impl;
+
+import java.util.Collection;
+
+import org.drools.process.command.InsertElementsCommand;
+import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
+import org.drools.runtime.pipeline.PipelineContext;
+
+public class InsertElementsCommandStage extends BaseEmitter
+    implements
+    KnowledgeRuntimeCommand {
+
+    public void receive(Object object,
+                        PipelineContext context) {
+        InsertElementsCommand cmd = new InsertElementsCommand( (Collection) object );
+
+        emit( cmd,
+              context );
+    }
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertObjectCommandStage.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertObjectCommandStage.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/InsertObjectCommandStage.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,33 @@
+/**
+ * 
+ */
+package org.drools.runtime.pipeline.impl;
+
+import org.drools.process.command.InsertObjectCommand;
+import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
+import org.drools.runtime.pipeline.PipelineContext;
+
+public class InsertObjectCommandStage extends BaseEmitter
+    implements
+    KnowledgeRuntimeCommand {
+    private String outIdentifier;
+
+    public InsertObjectCommandStage() {
+
+    }
+
+    public InsertObjectCommandStage(String outIdentifier) {
+        this.outIdentifier = outIdentifier;
+    }
+
+    public void receive(Object object,
+                        PipelineContext context) {
+        InsertObjectCommand cmd = new InsertObjectCommand( object );
+        if ( outIdentifier != null ) {
+            cmd.setOutIdentifier( this.outIdentifier );
+        }
+
+        emit( cmd,
+              context );
+    }
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatefulKnowledgeSessionPipelineContextImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatefulKnowledgeSessionPipelineContextImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatefulKnowledgeSessionPipelineContextImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -4,6 +4,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.drools.runtime.BatchExecutor;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.pipeline.ResultHandler;
 import org.drools.runtime.pipeline.StatefulKnowledgeSessionPipelineContext;
@@ -32,6 +33,12 @@
     public WorkingMemoryEntryPoint getEntryPoint() {
         return entryPoint;
     }
+
+    public BatchExecutor getBatchExecutor() {
+        return this.ksession;
+    }
+    
+    
         
 
 }

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatelessKnowledgeSessionExecuteStage.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatelessKnowledgeSessionExecuteStage.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatelessKnowledgeSessionExecuteStage.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,48 +0,0 @@
-package org.drools.runtime.pipeline.impl;
-
-import org.drools.impl.ParametersImpl;
-import org.drools.runtime.StatelessKnowledgeSessionResults;
-import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
-import org.drools.runtime.pipeline.PipelineContext;
-import org.drools.runtime.pipeline.Receiver;
-import org.drools.runtime.pipeline.StatelessKnowledgeSessionPipelineContext;
-
-public class StatelessKnowledgeSessionExecuteStage extends BaseEmitter
-    implements
-    KnowledgeRuntimeCommand {
-
-    public void receive(Object object,
-                        PipelineContext context) {
-        StatelessKnowledgeSessionPipelineContext kContext = (StatelessKnowledgeSessionPipelineContext) context;
-
-        StatelessKnowledgeSessionResults results = null;
-        if ( kContext.getObject() != null ) {
-            if ( kContext.getParameters() == null || ((ParametersImpl) kContext.getParameters()).isEmpty() ) {
-                kContext.getStatelessKnowledgeSession().executeObject( kContext.getObject() );
-            } else {
-                results = kContext.getStatelessKnowledgeSession().executeObjectWithParameters( kContext.getObject(),
-                                                                                               kContext.getParameters() );
-            }
-        } else if ( kContext.getIterable() != null ) {
-            if ( kContext.getParameters() == null || ((ParametersImpl) kContext.getParameters()).isEmpty()  ) {
-                kContext.getStatelessKnowledgeSession().executeIterable( kContext.getIterable() );
-            } else {
-                results = kContext.getStatelessKnowledgeSession().executeIterableWithParameters( kContext.getIterable(),
-                                                                                                 kContext.getParameters() );
-            }
-        } else {
-            if ( kContext.getParameters() == null || ((ParametersImpl) kContext.getParameters()).isEmpty() ) {
-                kContext.getStatelessKnowledgeSession().executeObject( object );
-            } else {
-                results = kContext.getStatelessKnowledgeSession().executeObjectWithParameters( object,
-                                                                                               kContext.getParameters() );
-            }
-        }
-        
-        context.setResult( results );
-        
-        emit( object, context );
- 
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatelessKnowledgeSessionPipelineContextImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatelessKnowledgeSessionPipelineContextImpl.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/pipeline/impl/StatelessKnowledgeSessionPipelineContextImpl.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -1,7 +1,6 @@
 package org.drools.runtime.pipeline.impl;
 
-import org.drools.impl.ParametersImpl;
-import org.drools.runtime.Parameters;
+import org.drools.runtime.BatchExecutor;
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.runtime.pipeline.ResultHandler;
 import org.drools.runtime.pipeline.StatelessKnowledgeSessionPipelineContext;
@@ -11,12 +10,6 @@
     StatelessKnowledgeSessionPipelineContext {
 
     private StatelessKnowledgeSession ksession;
-    
-    private Iterable iterable;
-    
-    private Object object;
-    
-    private Parameters parameters;
 
     public StatelessKnowledgeSessionPipelineContextImpl(StatelessKnowledgeSession ksession,
                                                         ClassLoader classLoader) {
@@ -31,31 +24,14 @@
         super( classLoader,
                resultHandler );
         this.ksession = ksession;
-        this.parameters = new ParametersImpl();
     }
 
     public StatelessKnowledgeSession getStatelessKnowledgeSession() {
         return this.ksession;
     }
 
-    public Parameters getParameters() {
-        return parameters;
+    public BatchExecutor getBatchExecutor() {
+        return this.ksession;
     }
-
-    public Iterable getIterable() {
-        return iterable;
-    }
-
-    public void setIterable(Iterable iterable) {
-        this.iterable = iterable;
-    }
-
-    public Object getObject() {
-        return object;
-    }
-
-    public void setObject(Object object) {
-        this.object = object;
-    }
             
 }

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResultRow.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResultRow.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResultRow.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,24 @@
+package org.drools.runtime.rule.impl;
+
+import java.util.List;
+import java.util.Map;
+
+import org.drools.runtime.rule.QueryResultsRow;
+
+public class FlatQueryResultRow
+    implements
+    QueryResultsRow {
+    Map<String, Integer> identifiers;
+    private List result;
+
+    public FlatQueryResultRow(Map<String, Integer> identifiers, List result) {
+        this.identifiers = identifiers;
+        this.result = result;
+    }
+
+    public Object get(String identifier) {
+        return this.result.get( identifiers.get( identifier ) );
+    }
+
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/FlatQueryResults.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,90 @@
+package org.drools.runtime.rule.impl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.rule.Declaration;
+import org.drools.runtime.rule.QueryResultsRow;
+import org.drools.runtime.rule.QueryResults;
+
+public class FlatQueryResults
+    implements
+    QueryResults {
+    private Map<String, Integer> identifiers;
+    private List<List>           results;
+
+    public FlatQueryResults(Map<String, Integer> identifiers,
+                            List<List> results) {
+        this.identifiers = identifiers;
+        this.results = results;
+    }
+
+    public FlatQueryResults(org.drools.QueryResults results) {
+        Declaration[] declrs = (Declaration[]) results.getDeclarations().values().toArray( new Declaration[results.getDeclarations().size()] );
+        this.results = new ArrayList<List>( results.size() );
+
+        int length = declrs.length;
+
+        for ( org.drools.QueryResult result : results ) {
+            List<Object> row = new ArrayList<Object>();
+
+            for ( int i = 0; i < length; i++ ) {
+                Declaration declr = declrs[i];
+                row.add( result.get( declr ) );
+            }
+
+            this.results.add( row );
+        }
+
+        identifiers = new HashMap<String, Integer>( length );
+        for ( int i = 0; i < length; i++ ) {
+            identifiers.put( declrs[i].getIdentifier(),
+                             i );
+        }
+
+    }
+
+    public String[] getIdentifiers() {
+        return (String[]) identifiers.keySet().toArray( new String[identifiers.size()] );
+    }
+
+    public int size() {
+        return this.results.size();
+    }
+
+    public Iterator<QueryResultsRow> iterator() {
+        return new QueryResultsIterator( identifiers,
+                                         this.results.iterator() );
+    }
+
+    private class QueryResultsIterator
+        implements
+        Iterator {
+        private Map<String, Integer> identifiers;
+        private Iterator             iterator;
+
+        public QueryResultsIterator(Map<String, Integer> identifiers,
+                                    final Iterator iterator) {
+            this.identifiers = identifiers;
+            this.iterator = iterator;
+        }
+
+        public boolean hasNext() {
+            return this.iterator.hasNext();
+        }
+
+        public Object next() {
+            return new FlatQueryResultRow( identifiers,
+                                           (List) this.iterator.next() );
+        }
+
+        public void remove() {
+            this.iterator.remove();
+        }
+
+    }
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResultRow.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResultRow.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResultRow.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,18 @@
+package org.drools.runtime.rule.impl;
+
+import org.drools.runtime.rule.QueryResultsRow;
+
+public class NativeQueryResultRow
+    implements
+    QueryResultsRow {
+    private org.drools.QueryResult result;
+
+    public NativeQueryResultRow(org.drools.QueryResult result) {
+        this.result = result;
+    }
+
+    public Object get(String identifier) {
+        return this.result.get( identifier );
+    }
+
+}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/rule/impl/NativeQueryResults.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,53 @@
+package org.drools.runtime.rule.impl;
+
+import java.util.Iterator;
+
+import org.drools.runtime.rule.QueryResultsRow;
+import org.drools.runtime.rule.QueryResults;
+
+public class NativeQueryResults
+    implements
+    QueryResults {
+    
+    private org.drools.QueryResults results;
+
+    public NativeQueryResults(org.drools.QueryResults results) {
+        this.results = results;
+    }
+
+    public String[] getIdentifiers() {
+        return (String[]) this.results.getDeclarations().keySet().toArray( new String[this.results.getDeclarations().size()] );
+    }
+
+    public int size() {
+        return this.results.size();
+    }
+    
+    public Iterator<QueryResultsRow> iterator() {
+        return new QueryResultsIterator( this.results.iterator() );
+    }
+
+    private class QueryResultsIterator
+        implements
+        Iterator {
+        private Iterator iterator;
+
+        public QueryResultsIterator(final Iterator iterator) {
+            this.iterator = iterator;
+        }
+
+        public boolean hasNext() {
+            return this.iterator.hasNext();
+        }
+
+        public Object next() {
+            return new NativeQueryResultRow( (org.drools.QueryResult) this.iterator.next() );
+        }
+
+        public void remove() {
+            this.iterator.remove();
+        }
+
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-persistence-jpa/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-persistence-jpa/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -29,10 +29,10 @@
   <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.2/slf4j-api-1.5.2.jar"/>

Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -228,7 +228,7 @@
 
             registerRollbackSync();
 
-            T result = command.execute( session );
+            T result = command.execute( ( ReteooWorkingMemory ) session );
             //System.out.println( "3) exec ver : " + this.sessionInfo.getVersion() );
 
             if ( localTransaction ) {

Modified: labs/jbossrules/trunk/drools-pipeline/drools-messenger-jms/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-messenger-jms/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-pipeline/drools-messenger-jms/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -29,11 +29,11 @@
   <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-xjc/2.0.3/jaxb-xjc-2.0.3.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
   <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
   <classpathentry kind="var" path="M2_REPO/simple-jndi/simple-jndi/0.11.4/simple-jndi-0.11.4.jar"/>

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jaxb/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -20,9 +20,9 @@
   <classpathentry kind="var" path="M2_REPO/com/sun/xml/bind/jaxb-xjc/2.0.3/jaxb-xjc-2.0.3.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/javax/xml/bind/jsr173_api/1.0/jsr173_api-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-jxls/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-jxls/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-jxls/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -21,11 +21,11 @@
   <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/net/sf/jxls/jxls-reader/0.9.6/jxls-reader-0.9.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/apache/poi/poi/3.0.2-FINAL/poi-3.0.2-FINAL.jar"/>
 </classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-smooks/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-smooks/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-smooks/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -19,16 +19,16 @@
   <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+  <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-commons/1.1/milyn-commons-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-smooks-core/1.1/milyn-smooks-core-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/milyn/milyn-smooks-javabean/1.1/milyn-smooks-javabean-1.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/mvel/mvel/1.3.12-java1.5/mvel-1.3.12-java1.5.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
+  <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
   <classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.2/xmlunit-1.2.jar"/>
   <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-smooks/src/test/java/org/drools/runtime/pipeline/impl/SmookStatelessSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-smooks/src/test/java/org/drools/runtime/pipeline/impl/SmookStatelessSessionTest.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-smooks/src/test/java/org/drools/runtime/pipeline/impl/SmookStatelessSessionTest.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -3,7 +3,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.transform.stream.StreamSource;
 
@@ -14,17 +16,21 @@
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
+import org.drools.common.InternalFactHandle;
 import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.help.BatchExecutionHelper;
 import org.drools.runtime.pipeline.Action;
 import org.drools.runtime.pipeline.Expression;
 import org.drools.runtime.pipeline.Join;
 import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
 import org.drools.runtime.pipeline.Pipeline;
 import org.drools.runtime.pipeline.PipelineFactory;
+import org.drools.runtime.pipeline.Receiver;
 import org.drools.runtime.pipeline.ResultHandler;
 import org.drools.runtime.pipeline.Splitter;
 import org.drools.runtime.pipeline.Transformer;
+import org.drools.runtime.rule.FactHandle;
 import org.milyn.Smooks;
 import org.milyn.io.StreamUtils;
 
@@ -47,14 +53,23 @@
         ksession.setGlobal( "list",
                             list );
 
-        KnowledgeRuntimeCommand execute = PipelineFactory.newStatelessKnowledgeSessionExecute();
+        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+        
+        Action assignResult = PipelineFactory.newAssignObjectAsResult();
+        assignResult.setReceiver( executeResultHandler );
 
+        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newBatchExecutor();
+        batchExecution.setReceiver( assignResult );
+        
+        KnowledgeRuntimeCommand insertStage = PipelineFactory.newInsertObjectCommand();
+        insertStage.setReceiver( batchExecution );
+
         // Instantiate Smooks with the config...
         Smooks smooks = new Smooks( getClass().getResourceAsStream( "smooks-config.xml" ) );
 
         Transformer transformer = PipelineFactory.newSmooksFromSourceTransformer( smooks,
                                                                                   "orderItem" );
-        transformer.setReceiver( execute );
+        transformer.setReceiver( insertStage );
 
         Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline( ksession );
         pipeline.setReceiver( transformer );
@@ -87,17 +102,26 @@
         ksession.setGlobal( "list",
                             list );
 
-        KnowledgeRuntimeCommand execute = PipelineFactory.newStatelessKnowledgeSessionExecute();
+        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+        
+        Action assignResult = PipelineFactory.newAssignObjectAsResult();
+        assignResult.setReceiver( executeResultHandler );
 
-        Action mvelAction = PipelineFactory.newMvelAction( "context.setIterable( this.children  )" );
-        mvelAction.setReceiver( execute );
+        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newBatchExecutor();
+        batchExecution.setReceiver( assignResult );
+        
+        KnowledgeRuntimeCommand insertElementsStage = PipelineFactory.newInsertElementsCommand();
+        insertElementsStage.setReceiver( batchExecution );
+        
+        Expression mvelExpression = PipelineFactory.newMvelExpression( "this.children" );
+        mvelExpression.setReceiver( insertElementsStage );
 
         // Instantiate Smooks with the config...
         Smooks smooks = new Smooks( getClass().getResourceAsStream( "smooks-config.xml" ) );
 
         Transformer transformer = PipelineFactory.newSmooksFromSourceTransformer( smooks,
                                                                                   "root" );
-        transformer.setReceiver( mvelAction );
+        transformer.setReceiver( mvelExpression );
 
         Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline( ksession );
         pipeline.setReceiver( transformer );

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -16,9 +16,9 @@
   <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/xmlunit/xmlunit/1.2/xmlunit-1.2.jar"/>
   <classpathentry kind="var" path="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar"/>

Added: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/Cheese.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/Cheese.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/Cheese.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,122 @@
+package org.drools;
+
+
+import java.io.Serializable;
+import java.util.Date;
+
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+public class Cheese
+    implements
+    Serializable {
+
+    public static final String STILTON = "stilton";
+
+    /**
+     *
+     */
+    private static final long serialVersionUID = 400L;
+    private String            type;
+    private int               price;
+    private int               oldPrice;
+    private Date              usedBy;
+
+    public Cheese() {
+
+    }
+
+    public Cheese(final String type) {
+        super();
+        this.type = type;
+        this.price = 0;
+    }
+
+    public Cheese(final String type,
+                  final int price) {
+        super();
+        this.type = type;
+        this.price = price;
+    }
+
+    public Cheese(final String type,
+                  final int price,
+                  final int oldPrice ) {
+        super();
+        this.type = type;
+        this.price = price;
+        this.oldPrice = oldPrice;
+    }
+
+    public int getPrice() {
+        return this.price;
+    }
+
+    public String getType() {
+        return this.type;
+    }
+
+    public void setType(final String type) {
+        this.type = type;
+    }
+
+    public void setPrice(final int price) {
+        this.price = price;
+    }
+
+    public String toString() {
+        return "Cheese( type='" + this.type + "', price=" + this.price + " )";
+    }
+
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + price;
+        result = PRIME * result + ((type == null) ? 0 : type.hashCode());
+        return result;
+    }
+
+    public boolean equals(Object obj) {
+        if ( this == obj ) return true;
+        if ( obj == null ) return false;
+        if ( getClass() != obj.getClass() ) return false;
+        final Cheese other = (Cheese) obj;
+        if ( price != other.price ) return false;
+        if ( type == null ) {
+            if ( other.type != null ) return false;
+        } else if ( !type.equals( other.type ) ) return false;
+        return true;
+    }
+
+    public int getOldPrice() {
+        return oldPrice;
+    }
+
+    public void setOldPrice(int oldPrice) {
+        this.oldPrice = oldPrice;
+    }
+
+    public Date getUsedBy() {
+        return usedBy;
+    }
+
+    public void setUsedBy(Date usedBy) {
+        this.usedBy = usedBy;
+    }
+
+
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamBatchExecutionTest.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -0,0 +1,454 @@
+package org.drools.runtime.pipeline.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.custommonkey.xmlunit.XMLTestCase;
+import org.drools.Cheese;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.definition.KnowledgePackage;
+import org.drools.io.Resource;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.BatchExecutionResult;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.pipeline.Action;
+import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
+import org.drools.runtime.pipeline.Pipeline;
+import org.drools.runtime.pipeline.PipelineFactory;
+import org.drools.runtime.pipeline.ResultHandler;
+import org.drools.runtime.pipeline.Transformer;
+
+public class XStreamBatchExecutionTest extends XMLTestCase {
+
+    public void testInsertObject() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "end\n";        
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert out-identifier='outStilton'>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "</batch-execution>";
+        
+        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();        
+        getPipeline(ksession).insert( inXml, resultHandler );        
+        String outXml = ( String ) resultHandler.getObject();
+        
+        String expectedXml = "";
+        expectedXml += "<batch-execution-results>\n";
+        expectedXml += "  <result identifier=\"outStilton\">\n";
+        expectedXml += "    <org.drools.Cheese>\n";
+        expectedXml += "      <type>stilton</type>\n";
+        expectedXml += "      <oldPrice>0</oldPrice>\n";        
+        expectedXml += "      <price>30</price>\n";
+        expectedXml += "    </org.drools.Cheese>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "</batch-execution-results>\n";
+        
+        assertXMLEqual(expectedXml, outXml );
+        
+        BatchExecutionResult result = ( BatchExecutionResult ) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        Cheese stilton = ( Cheese ) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );        
+    }
+    
+    public void testInsertElements() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( $c.getPrice() + 5 ); \n";
+        str += "     list.add( $c );";
+        str += "end\n";        
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <set-global identifier='list' out='true'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";        
+        inXml += "  <insert-elements>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>30</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert-elements>";
+        inXml += "</batch-execution>";
+        
+        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();        
+        getPipeline(ksession).insert( inXml, resultHandler );        
+        String outXml = ( String ) resultHandler.getObject();
+        
+        String expectedXml = "";
+        expectedXml += "<batch-execution-results>\n";
+        expectedXml += "  <result identifier='list'>\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>35</price>\n";        
+        expectedXml += "        <oldPrice>0</oldPrice>\n";        
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";     
+        expectedXml += "        <price>30</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";           
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "    </list>\n";        
+        expectedXml += "  </result>\n";
+        expectedXml += "</batch-execution-results>\n";
+        
+        assertXMLEqual( expectedXml, outXml );
+        
+        BatchExecutionResult result = ( BatchExecutionResult ) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        List list = ( List ) result.getValue( "list" );
+        Cheese stilton25 = new Cheese( "stilton", 30);
+        Cheese stilton30 = new Cheese( "stilton", 35);
+        
+        Set expectedList = new HashSet();
+        expectedList.add( stilton25 );
+        expectedList.add( stilton30 );
+        
+        assertEquals( expectedList, new HashSet( list ));       
+    }    
+    
+    public void testSetGlobal() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list1 \n";
+        str += "global java.util.List list2 \n";
+        str += "global java.util.List list3 \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    $c.setPrice( 30 ); \n";
+        str += "    list1.add( $c ); \n";
+        str += "    list2.add( $c ); \n";
+        str += "    list3.add( $c ); \n";
+        str += "end\n";
+        
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <set-global identifier='list1'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <set-global identifier='list2' out='true'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <set-global identifier='list3' out-identifier='outList3'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>5</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "  </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "</batch-execution>";
+
+        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+        getPipeline(ksession).insert( inXml, resultHandler );
+        
+        String outXml = ( String ) resultHandler.getObject();
+        
+        String expectedXml = "";
+        expectedXml += "<batch-execution-results>\n";
+        expectedXml += "  <result identifier='list2'>\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";
+        expectedXml += "        <price>30</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "  <result identifier='outList3'>\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese reference='../../../result/list/org.drools.Cheese'/>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";
+        expectedXml += "</batch-execution-results>\n";
+        
+        assertXMLEqual(expectedXml, outXml ); 
+        
+        BatchExecutionResult result = ( BatchExecutionResult ) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        Cheese stilton = new Cheese( "stilton", 30 );
+        
+        assertNull( result.getValue( "list1" ) );
+        
+        List list2 = ( List ) result.getValue( "list2" );
+        assertEquals( 1, list2.size() );
+        assertEquals( stilton, list2.get( 0 ) );
+        
+          
+        
+        List list3 = ( List ) result.getValue( "outList3" );
+        assertEquals( 1, list3.size() );
+        assertEquals( stilton, list3.get( 0 ) );          
+    }    
+    
+    public void testGetGlobal() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    list.add( $c ); \n";
+        str += "end\n";        
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <set-global identifier='list'>";
+        inXml += "    <list/>";
+        inXml += "  </set-global>";        
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <get-global identifier='list' out-identifier='out-list'/>";        
+        inXml += "</batch-execution>";
+        
+        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();        
+        getPipeline(ksession).insert( inXml, resultHandler );        
+        String outXml = ( String ) resultHandler.getObject();
+        
+        String expectedXml = "";
+        expectedXml += "<batch-execution-results>\n";
+        expectedXml += "  <result identifier=\"out-list\">\n";
+        expectedXml += "    <list>\n";
+        expectedXml += "      <org.drools.Cheese>\n";
+        expectedXml += "        <type>stilton</type>\n";      
+        expectedXml += "        <price>25</price>\n";
+        expectedXml += "        <oldPrice>0</oldPrice>\n";          
+        expectedXml += "      </org.drools.Cheese>\n";
+        expectedXml += "    </list>\n";
+        expectedXml += "  </result>\n";        
+        expectedXml += "</batch-execution-results>\n";
+        
+        assertXMLEqual(expectedXml, outXml );      
+    }    
+    
+    public void testQuery() throws Exception {
+        String str = "";
+        str += "package org.drools.test  \n";
+        str += "import org.drools.Cheese \n";
+        str += "query cheeses \n";
+        str += "    stilton : Cheese(type == 'stilton') \n";
+        str += "    cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
+        str += "end\n";
+        
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>1</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>2</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>cheddar</type>";
+        inXml += "      <price>1</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <insert>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>cheddar</type>";
+        inXml += "      <price>2</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <query out-identifier='cheeses' name='cheeses'/>";
+        inXml += "</batch-execution>";
+
+        StatelessKnowledgeSession ksession = getSession2( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        ResultHandlerImpl resultHandler = new ResultHandlerImpl();        
+        getPipeline(ksession).insert( inXml, resultHandler );        
+        String outXml = ( String ) resultHandler.getObject();
+        
+        String expectedXml = "";
+        expectedXml +="<batch-execution-results>\n";
+        expectedXml +="  <result identifier='cheeses'>\n";
+        expectedXml +="    <query-results>\n";
+        expectedXml +="      <identifiers>\n";
+        expectedXml +="        <identifier>stilton</identifier>\n";
+        expectedXml +="        <identifier>cheddar</identifier>\n";
+        expectedXml +="      </identifiers>\n";
+        expectedXml +="      <row>\n";
+        expectedXml +="        <org.drools.Cheese>\n";
+        expectedXml +="          <type>stilton</type>\n";
+        expectedXml +="          <price>2</price>\n";
+        expectedXml +="          <oldPrice>0</oldPrice>\n";
+        expectedXml +="        </org.drools.Cheese>\n";
+        expectedXml +="        <org.drools.Cheese>\n";
+        expectedXml +="          <type>cheddar</type>\n";
+        expectedXml +="          <price>2</price>\n";
+        expectedXml +="          <oldPrice>0</oldPrice>\n";
+        expectedXml +="        </org.drools.Cheese>\n";
+        expectedXml +="      </row>\n";
+        expectedXml +="      <row>\n";
+        expectedXml +="        <org.drools.Cheese>\n";
+        expectedXml +="          <type>stilton</type>\n";
+        expectedXml +="          <price>1</price>\n";
+        expectedXml +="          <oldPrice>0</oldPrice>\n";
+        expectedXml +="        </org.drools.Cheese>\n";
+        expectedXml +="        <org.drools.Cheese>\n";
+        expectedXml +="          <type>cheddar</type>\n";
+        expectedXml +="          <price>1</price>\n";
+        expectedXml +="          <oldPrice>0</oldPrice>\n";
+        expectedXml +="        </org.drools.Cheese>\n";
+        expectedXml +="      </row>\n";
+        expectedXml +="    </query-results>\n";
+        expectedXml +="  </result>\n";
+        expectedXml +="</batch-execution-results>\n";
+        
+        assertXMLEqual(expectedXml, outXml ); 
+        
+        BatchExecutionResult batchResult = ( BatchExecutionResult ) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        
+        Cheese stilton1 = new Cheese( "stilton", 1);
+        Cheese cheddar1 = new Cheese( "cheddar", 1);
+        Cheese stilton2 = new Cheese( "stilton", 2);
+        Cheese cheddar2 = new Cheese( "cheddar", 2);  
+        
+        Set set = new HashSet();
+        List list = new ArrayList();
+        list.add(stilton1);
+        list.add(cheddar1);
+        set.add( list );
+        
+        list = new ArrayList();
+        list.add(stilton2);
+        list.add(cheddar2);
+        set.add( list );
+        
+        org.drools.runtime.rule.QueryResults results = ( org.drools.runtime.rule.QueryResults) batchResult.getValue( "cheeses" );
+        assertEquals( 2, results.size() );        
+        assertEquals( 2, results.getIdentifiers().length );
+        Set newSet = new HashSet();
+        for ( org.drools.runtime.rule.QueryResultsRow result : results ) {
+            list = new ArrayList();
+            list.add( result.get( "stilton" ) );
+            list.add( result.get( "cheddar" ));
+            newSet.add( list );
+        }
+        assertEquals( set, newSet );  
+    }       
+    
+    private Pipeline getPipeline(StatelessKnowledgeSession ksession) {
+        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+        
+        Action assignResult = PipelineFactory.newAssignObjectAsResult();
+        assignResult.setReceiver( executeResultHandler );
+        
+        Transformer outTransformer = PipelineFactory.newXStreamToXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+        outTransformer.setReceiver( assignResult );
+
+        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newBatchExecutor();
+        batchExecution.setReceiver( outTransformer );
+
+
+        Transformer inTransformer = PipelineFactory.newXStreamFromXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+        inTransformer.setReceiver( batchExecution );
+
+        Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline( ksession );
+        pipeline.setReceiver( inTransformer );  
+        
+        return pipeline;
+    }
+
+
+    public static class ResultHandlerImpl
+        implements
+        ResultHandler {
+        Object object;
+
+        public void handleResult(Object object) {
+            this.object = object;
+        }
+
+        public Object getObject() {
+            return this.object;
+        }
+    }
+    
+    private StatelessKnowledgeSession getSession2(String fileName) throws Exception {
+        return getSession2( ResourceFactory.newClassPathResource( fileName, getClass() ) );
+    }
+        
+    private StatelessKnowledgeSession getSession2(Resource resource) throws Exception {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add( resource, ResourceType.DRL );
+        
+        if (kbuilder.hasErrors() ) {
+            System.out.println( kbuilder.getErrors() );
+        }
+        
+        assertFalse( kbuilder.hasErrors() );
+        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        
+       
+        kbase.addKnowledgePackages( pkgs );
+        StatelessKnowledgeSession session = kbase.newStatelessKnowledgeSession();
+
+        return session;
+    }       
+
+}

Modified: labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamStatelessSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamStatelessSessionTest.java	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-pipeline/drools-transformer-xstream/src/test/java/org/drools/runtime/pipeline/impl/XStreamStatelessSessionTest.java	2009-03-06 06:30:32 UTC (rev 25515)
@@ -13,6 +13,7 @@
 import org.drools.io.ResourceFactory;
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.runtime.pipeline.Action;
+import org.drools.runtime.pipeline.Expression;
 import org.drools.runtime.pipeline.KnowledgeRuntimeCommand;
 import org.drools.runtime.pipeline.Pipeline;
 import org.drools.runtime.pipeline.PipelineFactory;
@@ -40,11 +41,20 @@
         ksession.setGlobal( "list",
                             list );
 
-        KnowledgeRuntimeCommand execute = PipelineFactory.newStatelessKnowledgeSessionExecute();
+        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+        
+        Action assignResult = PipelineFactory.newAssignObjectAsResult();
+        assignResult.setReceiver( executeResultHandler );
 
+        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newBatchExecutor();
+        batchExecution.setReceiver( assignResult );
+        
+        KnowledgeRuntimeCommand insertStage = PipelineFactory.newInsertObjectCommand();
+        insertStage.setReceiver( batchExecution );
+
         XStream xstream = new XStream();
         Transformer transformer = PipelineFactory.newXStreamFromXmlTransformer( xstream );
-        transformer.setReceiver( execute );
+        transformer.setReceiver( insertStage );
 
         Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline( ksession );
         pipeline.setReceiver( transformer );
@@ -77,14 +87,23 @@
         ksession.setGlobal( "list",
                             list );
 
-        KnowledgeRuntimeCommand execute = PipelineFactory.newStatelessKnowledgeSessionExecute();
+        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+        
+        Action assignResult = PipelineFactory.newAssignObjectAsResult();
+        assignResult.setReceiver( executeResultHandler );
 
-        Action mvelAction = PipelineFactory.newMvelAction( "context.setIterable( this  )" );
-        mvelAction.setReceiver( execute );
+        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newBatchExecutor();
+        batchExecution.setReceiver( assignResult );
+        
+        KnowledgeRuntimeCommand insertElementsStage = PipelineFactory.newInsertElementsCommand();
+        insertElementsStage.setReceiver( batchExecution );
+        
+        Expression mvelExpression = PipelineFactory.newMvelExpression( "this.children" );
+        mvelExpression.setReceiver( insertElementsStage );
 
         XStream xstream = new XStream();
         Transformer transformer = PipelineFactory.newXStreamFromXmlTransformer( xstream );
-        transformer.setReceiver( mvelAction );
+        transformer.setReceiver( insertElementsStage );
 
         Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline( ksession );
         pipeline.setReceiver( transformer );

Modified: labs/jbossrules/trunk/drools-server/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-server/.classpath	2009-03-06 04:11:37 UTC (rev 25514)
+++ labs/jbossrules/trunk/drools-server/.classpath	2009-03-06 06:30:32 UTC (rev 25515)
@@ -17,9 +17,9 @@
   <classpathentry kind="var" path="M2_REPO/org/codehaus/jettison/jettison/1.0.1/jettison-1.0.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+  <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.7-SNAPSHOT/mvel2-2.0.7-SNAPSHOT.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.8-SNAPSHOT/mvel2-2.0.8-SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
   <classpathentry kind="var" path="M2_REPO/stax/stax/1.2.0/stax-1.2.0.jar"/>




More information about the jboss-svn-commits mailing list