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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Feb 12 02:07:55 EST 2009


Author: mark.proctor at jboss.com
Date: 2009-02-12 02:07:55 -0500 (Thu, 12 Feb 2009)
New Revision: 25237

Added:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java
Modified:
   labs/jbossrules/trunk/drools-api/pom.xml
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseFactory.java
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java
   labs/jbossrules/trunk/drools-compiler/.classpath
   labs/jbossrules/trunk/drools-compiler/.project
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/EnvironmentFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseProviderImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryXaResource.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteooRuleBaseTest.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
Log:
JBRULES-1965 Add Environment support

Modified: labs/jbossrules/trunk/drools-api/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-api/pom.xml	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-api/pom.xml	2009-02-12 07:07:55 UTC (rev 25237)
@@ -52,7 +52,7 @@
 		  <artifactId>jms</artifactId>
 		  <version>1.1</version>
           <scope>provided</scope>
-        </dependency>  	         
+        </dependency>  	 
         
   </dependencies>
   
@@ -85,8 +85,14 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-javadoc-plugin</artifactId>
                 <version>2.5</version>
+              
                 <configuration>
                     <aggregate>false</aggregate>
+                    <doclet>ydoc.doclets.YStandard</doclet>
+                    <docletPath>                        ${ydoc.home}/lib/ydoc.jar${path.separator}${ydoc.home}/lib/class2svg.jar${path.separator}${ydoc.home}/resources
+                    </docletPath>
+                    <additionalparam>-umlautogen -tag y.precondition -tag y.postcondition -tag y.complexity -tag param -tag return -tag see -tag y.uml
+                    </additionalparam>                            
                     <links>
                         <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
                     </links>
@@ -115,7 +121,6 @@
                 </configuration>
             </plugin>
         </plugins>
-    </reporting>        
+    </reporting>     
 
-
 </project>

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -7,6 +7,7 @@
 import org.drools.definition.rule.Rule;
 import org.drools.definition.type.FactType;
 import org.drools.event.knowledgebase.KnowledgeBaseEventManager;
+import org.drools.runtime.Environment;
 import org.drools.runtime.KnowledgeSessionConfiguration;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
@@ -114,16 +115,18 @@
      * @param processId
      */
     void removeProcess(String processId);
-
+    
     /**
-     * Create a new StatefulKnowledgeSession using the given session configuration.
+     * Create a new StatefulKnowledgeSession using the given session configuration and/or environment.
+     * Either one can be null and it will use a default.
+     * 
      * Don't forget to dispose() session when you are done.
-     * 
      * @param conf
+     * @param environment
      * @return
      *     The StatefulKnowledgeSession.
      */
-    StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf);
+    StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf, Environment environment);
 
     /**
      * Create a new StatefulKnowledgeSession using the default session configuration.

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseFactory.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBaseFactory.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -4,6 +4,7 @@
 
 import org.drools.runtime.Environment;
 import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.util.ProviderLocator;
 
 /**
  * <p>
@@ -26,7 +27,7 @@
  *
  * @see org.drools.KnowledgeBase
  */
-public class KnowledgeBaseFactory {
+public class KnowledgeBaseFactory extends ProviderLocator {
     private static KnowledgeBaseProvider provider;
 
     /**
@@ -90,6 +91,13 @@
         return getKnowledgeBaseProvider().newEnvironment();
     }
 
+//    private static synchronized KnowledgeBaseProvider getKnowledgeBaseProvider() {
+//        if ( provider == null ) {
+//            provider = newProviderFor( KnowledgeBaseProvider.class );
+//        }
+//        return provider;
+//    }
+    
     private static synchronized void setKnowledgeBaseProvider(KnowledgeBaseProvider provider) {
         KnowledgeBaseFactory.provider = provider;
     }
@@ -108,8 +116,7 @@
             Class<KnowledgeBaseProvider> cls = (Class<KnowledgeBaseProvider>) Class.forName( "org.drools.impl.KnowledgeBaseProviderImpl" );
             setKnowledgeBaseProvider( cls.newInstance() );
         } catch ( Exception e ) {
-            throw new ProviderInitializationException( "Provider org.drools.impl.KnowledgeBaseProviderImpl could not be set.",
-                                                       e );
+            throw new ProviderInitializationException( "Provider org.drools.impl.KnowledgeBaseProviderImpl could not be set.", e );
         }
     }
 }

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-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/runtime/pipeline/PipelineFactory.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -85,7 +85,7 @@
  * </p>
  * 
  * <p>
- * Pipeline is provides an adapter to insert the payload and internal create the correct PipelineContext. Two types of Pipelines
+ * Pipeline is provides an adapter to insert the payload and internally create the correct PipelineContext. Two types of Pipelines
  * are provided, both requiring a different PipelineContext. StatefulKnowledgeSessionPipeline and StatelessKnowledgeSessionPipeline.
  * Pipeline itself implements both Stage and Emitter, this means it's a Stage in a pipeline and emits the payload to a receiver. It does
  * not implement Receiver itself, as it the start adapter for the pipeline. PipelineFactory provides methods to create both of the two
@@ -120,13 +120,9 @@
  * </pre>
  * 
  * <p>
- * See StatefullKnowledgeSessionPipeline, StatelessKnowledgeSessionPipeline for more specific information and capabilities on these pipelines.
- * </p>
- * 
- * <p>
  * While the above example is for loading a resource from disk it is also possible to work from a running messaging service. Drools currently
- * provides a single Service for JMS, called JmsMessenger. Other Services will be added later. Look at the factory method for JmsMessenger for more details, but below shows
- * part of a unit test:
+ * provides a single Service for JMS, called JmsMessenger.  Support for other Services will be added later. Below shows part of a unit test which 
+ * illustrates part of the JmsMessenger in action
  * </p>
  * 
  * <pre>

Modified: labs/jbossrules/trunk/drools-compiler/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.classpath	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-compiler/.classpath	2009-02-12 07:07:55 UTC (rev 25237)
@@ -1,27 +1,26 @@
-<?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src/main/java"/>
-	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
-	<classpathentry excluding="**/*.java" including="**" kind="src" output="target/test-classes" path="src/test/resources"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.1.1/antlr-3.1.1.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
-	<classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.0.0.SNAPSHOT/drools-api-5.0.0.SNAPSHOT.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar" sourcepath="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-sources.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar" sourcepath="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1-sources.jar"/>
-	<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" sourcepath="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2-sources.jar"/>
-	<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
-	<classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.6/mvel2-2.0.6.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" sourcepath="M2_REPO/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c-sources.jar"/>
-	<classpathentry kind="var" path="M2_REPO/com/thoughtworks/xstream/xstream/1.3.1/xstream-1.3.1.jar"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+  <classpathentry kind="src" path="src/main/java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
+  <classpathentry kind="output" path="target/classes"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+  <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.7/antlr-2.7.7.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr/3.1.1/antlr-3.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+  <classpathentry kind="src" path="/drools-api"/>
+  <classpathentry kind="src" path="/drools-core"/>
+  <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/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/junit/junit/3.8.1/junit-3.8.1.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.6/mvel2-2.0.6.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"/>
+</classpath>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-compiler/.project
===================================================================
--- labs/jbossrules/trunk/drools-compiler/.project	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-compiler/.project	2009-02-12 07:07:55 UTC (rev 25237)
@@ -1,7 +1,10 @@
 <projectDescription>
   <name>drools-compiler</name>
   <comment>A rule production system</comment>
-  <projects/>
+  <projects>
+    <project>drools-api</project>
+    <project>drools-core</project>
+  </projects>
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/CepEspTest.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -83,7 +83,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession session = ruleBase.newStatefulSession( conf );
+        StatefulSession session = ruleBase.newStatefulSession( conf, null );
 
         final List results = new ArrayList();
 
@@ -138,7 +138,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         final List results = new ArrayList();
 
@@ -218,7 +218,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         final List results = new ArrayList();
 
@@ -304,7 +304,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         final PseudoClockScheduler clock = (PseudoClockScheduler) wm.getSessionClock();
 
@@ -511,7 +511,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         final List<?> results = new ArrayList<Object>();
 
@@ -562,7 +562,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         final List<?> results = new ArrayList<Object>();
 
@@ -613,7 +613,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         final List<?> results = new ArrayList<Object>();
 
@@ -666,7 +666,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         List results = new ArrayList();
 
@@ -799,7 +799,7 @@
 
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.REALTIME_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         final List results = new ArrayList();
 
@@ -887,7 +887,7 @@
         
         SessionConfiguration conf = new SessionConfiguration();
         conf.setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulSession wm = ruleBase.newStatefulSession( conf );
+        StatefulSession wm = ruleBase.newStatefulSession( conf, null );
 
         final List results = new ArrayList();
 

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-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -5926,34 +5926,34 @@
     }
 
     //FIXME
-    public void FIXME_testListOfMaps() {
-        //    	KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
-        //		kbuilder.add(ResourceFactory.newClassPathResource("test_TestMapVariableRef.drl", getClass()), ResourceType.DRL);
-        //		KnowledgeBuilderErrors errors = kbuilder.getErrors();
-        //		if (errors.size() > 0) {
-        //			for (KnowledgeBuilderError error: errors) {
-        //				System.err.println(error);
-        //			}
-        //			throw new IllegalArgumentException("Could not parse knowledge.");
-        //		}
-        //		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
-        //		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
-        //		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-        //		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
-        //		
-        //		Map mapOne = new HashMap<String,Object>();
-        //		Map mapTwo = new HashMap<String,Object>();
-        //		
-        //		mapOne.put("MSG", "testMessage");
-        //		mapTwo.put("MSGTWO", "testMessage");
-        //		
-        //		list.add(mapOne);
-        //		list.add(mapTwo);
-        //		ksession.insert(list);
-        //		ksession.fireAllRules();
-        //		
-        //		assertEquals(3, list.size());
-
+    public void FIXME_testListOfMaps(){
+    	KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+		kbuilder.add(ResourceFactory.newClassPathResource("test_TestMapVariableRef.drl", getClass()), ResourceType.DRL);
+		KnowledgeBuilderErrors errors = kbuilder.getErrors();
+		if (errors.size() > 0) {
+			for (KnowledgeBuilderError error: errors) {
+				System.err.println(error);
+			}
+			throw new IllegalArgumentException("Could not parse knowledge.");
+		}
+		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
+		
+		Map mapOne = new HashMap<String,Object>();
+		Map mapTwo = new HashMap<String,Object>();
+		
+		mapOne.put("MSG", "testMessage");
+		mapTwo.put("MSGTWO", "testMessage");
+		
+		list.add(mapOne);
+		list.add(mapTwo);
+		ksession.insert(list);
+		ksession.fireAllRules();
+		
+		assertEquals(3, list.size());
+		
     }
 
     public void testKnowledgeContextMVEL() {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -62,7 +62,7 @@
         conf.setKeepReference( true ); // this is just for documentation purposes, since the default value is "true"
         try {
             for( i = 0; i < 300000; i++ ) {
-                final StatefulSession session = ruleBase.newStatefulSession( conf );
+                final StatefulSession session = ruleBase.newStatefulSession( conf, null );
                 session.dispose();
             } 
         } catch ( Throwable e ) {

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StreamsTest.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -82,7 +82,7 @@
 
         KnowledgeSessionConfiguration conf = new SessionConfiguration();
         ((SessionConfiguration) conf).setClockType( ClockType.PSEUDO_CLOCK );
-        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( conf );
+        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession( conf, null );
 
         final List results = new ArrayList();
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/testframework/MockRuleBase.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -15,6 +15,7 @@
 import org.drools.event.RuleBaseEventListener;
 import org.drools.marshalling.Marshaller;
 import org.drools.rule.Package;
+import org.drools.runtime.Environment;
 
 public class MockRuleBase implements RuleBase {
 
@@ -53,7 +54,7 @@
 		return null;
 	}
 
-	public StatefulSession newStatefulSession(SessionConfiguration config) {
+	public StatefulSession newStatefulSession(SessionConfiguration config, Environment environment ) {
 		// TODO Auto-generated method stub
 		return null;
 	}
@@ -165,4 +166,9 @@
         // TODO Auto-generated method stub
         
     }
+
+    public StatefulSession newStatefulSession(boolean keepReference) {
+        // TODO Auto-generated method stub
+        return null;
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -24,6 +24,7 @@
 import org.drools.definition.type.FactType;
 import org.drools.marshalling.Marshaller;
 import org.drools.rule.Package;
+import org.drools.runtime.Environment;
 import org.drools.WorkingMemory;
 
 /**
@@ -65,6 +66,8 @@
      */
     StatefulSession newStatefulSession();
 
+    StatefulSession newStatefulSession(boolean keepReference);
+    
     /**
      * Create a new <code>WorkingMemory</code> session for this
      * <code>RuleBase</code>.
@@ -77,7 +80,7 @@
      *
      * @return A newly initialized <code>WorkingMemory</code>.
      */
-    StatefulSession newStatefulSession(SessionConfiguration config);
+    StatefulSession newStatefulSession(SessionConfiguration config, Environment environment);
 
     StatefulSession readStatefulSession(InputStream stream,
                                         Marshaller marshaller) throws IOException,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -45,6 +45,7 @@
 import org.drools.definition.type.FactType;
 import org.drools.event.RuleBaseEventListener;
 import org.drools.event.RuleBaseEventSupport;
+import org.drools.impl.EnvironmentFactory;
 import org.drools.marshalling.Marshaller;
 import org.drools.process.core.Process;
 import org.drools.rule.CompositeClassLoader;
@@ -333,7 +334,7 @@
      * @see RuleBase
      */
     public StatefulSession newStatefulSession() {
-        return newStatefulSession( new SessionConfiguration() );
+        return newStatefulSession( new SessionConfiguration(), EnvironmentFactory.newEnvironment() );
     }
 
     public synchronized void disposeStatefulSession(final StatefulSession statefulSession) {

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-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -84,6 +84,7 @@
 import org.drools.rule.Rule;
 import org.drools.rule.TimeMachine;
 import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.runtime.Environment;
 import org.drools.runtime.ExitPoint;
 import org.drools.runtime.KnowledgeRuntime;
 import org.drools.runtime.process.EventListener;
@@ -209,6 +210,8 @@
     
     private Map<String, ExitPoint>                           exitPoints;
 
+    private Environment                                      environment;
+    
     // ------------------------------------------------------------
     // Constructors
     // ------------------------------------------------------------
@@ -225,13 +228,16 @@
     public AbstractWorkingMemory(final int id,
                                  final InternalRuleBase ruleBase,
                                  final FactHandleFactory handleFactory,
-                                 final SessionConfiguration config) {
+                                 final SessionConfiguration config,
+                                 final Environment environment)
+    {
         this( id,
               ruleBase,
               handleFactory,
               null,
               0,
-              config );
+              config,
+              environment );
     }
 
     public AbstractWorkingMemory(final int id,
@@ -239,12 +245,14 @@
                                  final FactHandleFactory handleFactory,
                                  final InitialFactHandle initialFactHandle,
                                  final long propagationContext,
-                                 final SessionConfiguration config) {
+                                 final SessionConfiguration config,
+                                 final Environment environment) {
         this.id = id;
         this.config = config;
         this.ruleBase = ruleBase;
         this.handleFactory = handleFactory;
         this.globalResolver = new MapGlobalResolver();
+        this.environment = environment;
 
         final RuleBaseConfiguration conf = this.ruleBase.getConfiguration();
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/EnvironmentFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/EnvironmentFactory.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/EnvironmentFactory.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -7,12 +7,13 @@
 	private static ThreadLocal<Environment> environment = new ThreadLocal<Environment>();
 	
 	public static Environment newEnvironment() {
-		Environment environment = EnvironmentFactory.environment.get();
-		if (environment == null) {
-			environment = new EnvironmentImpl();
-			EnvironmentFactory.environment.set(environment);
-		}
-		return environment;
+	    return new EnvironmentImpl();
+//		Environment environment = EnvironmentFactory.environment.get();
+//		if (environment == null) {
+//			environment = new EnvironmentImpl();
+//			EnvironmentFactory.environment.set(environment);
+//		}
+//		return environment;
 	}
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -55,6 +55,7 @@
 import org.drools.reteoo.ReteooRuleBase;
 import org.drools.reteoo.ReteooStatefulSession;
 import org.drools.rule.Package;
+import org.drools.runtime.Environment;
 import org.drools.runtime.KnowledgeSessionConfiguration;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
@@ -130,15 +131,25 @@
     }
 
     public StatefulKnowledgeSession newStatefulKnowledgeSession() {
-    	return newStatefulKnowledgeSession(new SessionConfiguration());
+    	return newStatefulKnowledgeSession(new SessionConfiguration(), EnvironmentFactory.newEnvironment() );
     }
     
-    public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf) {
+    public StatefulKnowledgeSession newStatefulKnowledgeSession(KnowledgeSessionConfiguration conf, Environment environment) {
+        // NOTE if you update here, you'll also need to update the JPAService
+        if ( conf == null ) {
+            conf = new SessionConfiguration();
+        }
+        
+        if ( environment == null ) {
+            environment = EnvironmentFactory.newEnvironment();
+        }
+        
     	CommandService commandService = ((SessionConfiguration) conf).getCommandService(this.ruleBase);
     	if (commandService != null) {
 			return new CommandBasedStatefulKnowledgeSession(commandService);
     	} else {
-    		ReteooStatefulSession session = (ReteooStatefulSession) this.ruleBase.newStatefulSession( (SessionConfiguration) conf );
+    		ReteooStatefulSession session = (ReteooStatefulSession) this.ruleBase.newStatefulSession( (SessionConfiguration) conf, 
+    		                                                                                          environment );
     		return new StatefulKnowledgeSessionImpl( session, this );
     	}
     }    

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseProviderImpl.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseProviderImpl.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -38,6 +38,6 @@
     }
 
 	public Environment newEnvironment() {
-		return EnvironmentFactory.newEnvironment();
+		return new EnvironmentImpl(); //EnvironmentFactory.newEnvironment();
 	}
 }

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-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -28,6 +28,7 @@
 import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
 import org.drools.rule.EntryPoint;
+import org.drools.runtime.Environment;
 import org.drools.runtime.KnowledgeSessionConfiguration;
 import org.drools.runtime.Parameters;
 import org.drools.runtime.StatelessKnowledgeSession;
@@ -54,6 +55,7 @@
     public RuleFlowEventSupport                                               ruleFlowEventSupport      = new RuleFlowEventSupport();
     
     private KnowledgeSessionConfiguration conf;
+    private Environment environment;
 
     public StatelessKnowledgeSessionImpl() {
     }
@@ -61,6 +63,7 @@
     public StatelessKnowledgeSessionImpl(final InternalRuleBase ruleBase, final KnowledgeSessionConfiguration conf) {
         this.ruleBase = ruleBase;
         this.conf = ( conf != null ) ? conf : new SessionConfiguration() ;
+        this.environment = EnvironmentFactory.newEnvironment();
     }
 
     public InternalRuleBase getRuleBase() {
@@ -71,7 +74,8 @@
         synchronized ( this.ruleBase.getPackagesMap() ) {
             InternalWorkingMemory wm = new ReteooWorkingMemory( this.ruleBase.nextWorkingMemoryCounter(),
                                                                 this.ruleBase,
-                                                                (SessionConfiguration) this.conf );
+                                                                (SessionConfiguration) this.conf,
+                                                                this.environment );
 
             DelegatingGlobalResolver resolver = new DelegatingGlobalResolver();
             resolver.setDelegate( this.sessionGlobals );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -16,7 +16,8 @@
     implements
     Marshaller {
     GlobalResolver                     globalResolver;
-    RuleBaseConfiguration              config;
+    RuleBaseConfiguration              ruleBaseConfig;
+    MarshallingConfiguration           marshallingConfig;
     PlaceholderResolverStrategyFactory factory;
 
     public DefaultMarshaller() {
@@ -28,18 +29,20 @@
               null );
     }
 
-    public DefaultMarshaller(RuleBaseConfiguration config,
-                             PlaceholderResolverStrategyFactory factory) {
-        this.config = (config != null) ? config : new RuleBaseConfiguration();
-
-        if ( factory == null ) {
+    public DefaultMarshaller(RuleBaseConfiguration ruleBaseConfig,
+                             MarshallingConfiguration marshallingConfig) {
+        this.ruleBaseConfig = (ruleBaseConfig != null) ? ruleBaseConfig : new RuleBaseConfiguration();
+        this.marshallingConfig = marshallingConfig;
+        
+        if ( marshallingConfig.getPlaceholderResolverStrategyFactory() == null ) {
             this.factory = new PlaceholderResolverStrategyFactory();
             ClassPlaceholderResolverStrategyAcceptor acceptor = new ClassPlaceholderResolverStrategyAcceptor( "*.*" );
             IdentityPlaceholderResolverStrategy strategy = new IdentityPlaceholderResolverStrategy( acceptor );
             this.factory.addStrategy( strategy );
         } else {
-            this.factory = factory;
+            this.factory = marshallingConfig.getPlaceholderResolverStrategyFactory();
         }
+        
     }
 
     /* (non-Javadoc)
@@ -53,7 +56,10 @@
         MarshallerReaderContext context = new MarshallerReaderContext( stream,
                                                                        ruleBase,
                                                                        RuleBaseNodes.getNodeMap( ruleBase ),
-                                                                       factory );
+                                                                       factory,
+                                                                       marshallingConfig.isMarshallProcessInstances(),
+                                                                       marshallingConfig.isMarshallWorkItems(),
+                                                                       marshallingConfig.isMarshallTimers() );
 
         ReteooStatefulSession session = InputMarshaller.readSession( context,
                                                                      id,
@@ -70,7 +76,10 @@
         MarshallerReaderContext context = new MarshallerReaderContext( stream,
                                                                        ruleBase,
                                                                        RuleBaseNodes.getNodeMap( ruleBase ),
-                                                                       factory );
+                                                                       factory,
+                                                                       marshallingConfig.isMarshallProcessInstances(),
+                                                                       marshallingConfig.isMarshallWorkItems(),
+                                                                       marshallingConfig.isMarshallTimers());
 
         session = InputMarshaller.readSession( (ReteooStatefulSession) session,
                                                context );
@@ -89,7 +98,10 @@
                                                                      ruleBase,
                                                                      (InternalWorkingMemory) session,
                                                                      RuleBaseNodes.getNodeMap( ruleBase ),
-                                                                     this.factory );
+                                                                     this.factory,
+                                                                     marshallingConfig.isMarshallProcessInstances(),
+                                                                     marshallingConfig.isMarshallWorkItems(),
+                                                                     marshallingConfig.isMarshallTimers() );
         OutputMarshaller.writeSession( context );
         context.close();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -29,6 +29,7 @@
 import org.drools.common.RuleFlowGroupImpl;
 import org.drools.common.TruthMaintenanceSystem;
 import org.drools.concurrent.ExecutorService;
+import org.drools.impl.EnvironmentFactory;
 import org.drools.process.core.context.swimlane.SwimlaneContext;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.instance.ProcessInstance;
@@ -65,6 +66,7 @@
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.Environment;
 import org.drools.runtime.process.NodeInstance;
 import org.drools.runtime.process.NodeInstanceContainer;
 import org.drools.spi.Activation;
@@ -154,6 +156,14 @@
                                                     int id,
                                                     ExecutorService executor) throws IOException,
                                                                              ClassNotFoundException {
+        return readSession( context, id, executor, EnvironmentFactory.newEnvironment() );
+    }
+    
+    public static ReteooStatefulSession readSession(MarshallerReaderContext context,
+                                                    int id,
+                                                    ExecutorService executor,
+                                                    Environment environment) throws IOException,
+                                                                             ClassNotFoundException {
 
         boolean multithread = context.readBoolean();
         
@@ -179,7 +189,8 @@
                                                                    initialFactHandle,
                                                                    propagationCounter,
                                                                    new SessionConfiguration(), // FIXME: must deserialize configuration  
-                                                                   agenda );
+                                                                   agenda,
+                                                                   environment );
 
         // RuleFlowGroups need to reference the session
         for ( RuleFlowGroup group : agenda.getRuleFlowGroupsMap().values() ) {
@@ -195,18 +206,24 @@
             readTruthMaintenanceSystem( context );
         }
 
-        readProcessInstances( context );
+        if ( context.marshalProcessInstances ) {
+            readProcessInstances( context );
+        }
 
-        readWorkItems( context );
+        if ( context.marshalWorkItems ) {
+            readWorkItems( context );
+        }
 
-        readTimers( context );
+        if ( context.marshalTimers ) {
+            readTimers( context );
+        }
 
         if( multithread ) {
             session.startPartitionManagers();
         }
 
         return session;
-    }
+    }    
 
     public static void readAgenda(MarshallerReaderContext context,
                                   DefaultAgenda agenda) throws IOException {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerReaderContext.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -19,7 +19,7 @@
 import org.drools.spi.PropagationContext;
 
 public class MarshallerReaderContext extends ObjectInputStream {
-    public final MarshallerReaderContext           stream;
+    public final MarshallerReaderContext            stream;
     public final InternalRuleBase                   ruleBase;
     public InternalWorkingMemory                    wm;
     public final Map<Integer, BaseNode>             sinks;
@@ -34,10 +34,30 @@
 
     public final Map<Long, PropagationContext>      propagationContexts;
 
+    public final boolean                            marshalProcessInstances;
+    public final boolean                            marshalWorkItems;
+    public final boolean                            marshalTimers;
+
     public MarshallerReaderContext(InputStream stream,
-                                    InternalRuleBase ruleBase,
-                                    Map<Integer, BaseNode> sinks,
-                                    PlaceholderResolverStrategyFactory resolverStrategyFactory) throws IOException {
+                                   InternalRuleBase ruleBase,
+                                   Map<Integer, BaseNode> sinks,
+                                   PlaceholderResolverStrategyFactory resolverStrategyFactory) throws IOException {
+        this( stream,
+              ruleBase,
+              sinks,
+              resolverStrategyFactory,
+              true,
+              true,
+              true );
+    }
+
+    public MarshallerReaderContext(InputStream stream,
+                                   InternalRuleBase ruleBase,
+                                   Map<Integer, BaseNode> sinks,
+                                   PlaceholderResolverStrategyFactory resolverStrategyFactory,
+                                   boolean marshalProcessInstances,
+                                   boolean marshalWorkItems,
+                                   boolean marshalTimers) throws IOException {
         super( stream );
         this.stream = this;
         this.ruleBase = ruleBase;
@@ -48,5 +68,8 @@
         this.entryPoints = new HashMap<String, EntryPoint>();
         this.propagationContexts = new HashMap<Long, PropagationContext>();
         this.resolverStrategyFactory = resolverStrategyFactory;
+        this.marshalProcessInstances = marshalProcessInstances;
+        this.marshalWorkItems = marshalWorkItems;
+        this.marshalTimers = marshalTimers;
     }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallerWriteContext.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -26,12 +26,27 @@
     public final PlaceholderResolverStrategyFactory resolverStrategyFactory;
 
     public final Map<LeftTuple, Integer>            terminalTupleMap;
+    
+    public final boolean                            marshalProcessInstances;
+    public final boolean                            marshalWorkItems;
+    public final boolean                            marshalTimers;    
+    
+    public MarshallerWriteContext(OutputStream stream,
+                                  InternalRuleBase ruleBase,
+                                  InternalWorkingMemory wm,
+                                  Map<Integer, BaseNode> sinks,
+                                  PlaceholderResolverStrategyFactory resolverStrategyFactory) throws IOException {
+        this(stream, ruleBase, wm, sinks, resolverStrategyFactory, true, true, true);
+    }
 
     public MarshallerWriteContext(OutputStream stream,
                                      InternalRuleBase ruleBase,
                                      InternalWorkingMemory wm,
                                      Map<Integer, BaseNode> sinks,
-                                     PlaceholderResolverStrategyFactory resolverStrategyFactory) throws IOException {
+                                     PlaceholderResolverStrategyFactory resolverStrategyFactory,
+                                     boolean marshalProcessInstances,
+                                     boolean marshalWorkItems,
+                                     boolean marshalTimers) throws IOException {
         super( stream );
         this.stream = this;
         this.ruleBase = ruleBase;
@@ -41,5 +56,9 @@
         this.resolverStrategyFactory = resolverStrategyFactory;
         
         this.terminalTupleMap = new IdentityHashMap<LeftTuple, Integer>();
+        
+        this.marshalProcessInstances = marshalProcessInstances;
+        this.marshalWorkItems = marshalWorkItems;
+        this.marshalTimers = marshalTimers;        
     }
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfiguration.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -0,0 +1,8 @@
+package org.drools.marshalling;
+
+public interface MarshallingConfiguration {
+    PlaceholderResolverStrategyFactory getPlaceholderResolverStrategyFactory();
+    boolean isMarshallProcessInstances();
+    boolean  isMarshallWorkItems();
+    boolean isMarshallTimers();
+} 

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/MarshallingConfigurationImpl.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -0,0 +1,55 @@
+package org.drools.marshalling;
+
+public class MarshallingConfigurationImpl implements  MarshallingConfiguration {
+    private PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory;
+    private boolean marshallProcessInstances;
+    private boolean marshallWorkItems;
+    private boolean marshallTimers;        
+    
+    public MarshallingConfigurationImpl() {
+        
+    }
+    
+    public MarshallingConfigurationImpl(PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory,
+                                        boolean marshallProcessInstances,
+                                        boolean marshallWorkItems,
+                                        boolean marshallTimers) {
+        this.marshallProcessInstances = marshallProcessInstances;
+        this.marshallWorkItems = marshallWorkItems;
+        this.marshallTimers = marshallTimers;
+        this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
+    }
+
+    public boolean isMarshallProcessInstances() {
+        return this.marshallProcessInstances;
+    }
+
+    public void setMarshallProcessInstances(boolean marshallProcessInstances) {
+        this.marshallProcessInstances = marshallProcessInstances;
+    }
+
+    public boolean isMarshallWorkItems() {
+        return this.marshallWorkItems;
+    }
+
+    public void setMarshallWorkItems(boolean marshallWorkItems) {
+        this.marshallWorkItems = marshallWorkItems;
+    }
+
+    public boolean isMarshallTimers() {
+        return this.marshallTimers;
+    }
+
+    public void setMarshallTimers(boolean marshallTimers) {
+        this.marshallTimers = marshallTimers;
+    }
+
+    public PlaceholderResolverStrategyFactory getPlaceholderResolverStrategyFactory() {
+        return this.placeholderResolverStrategyFactory;
+    }
+
+    public void setPlaceholderResolverStrategyFactory(PlaceholderResolverStrategyFactory placeholderResolverStrategyFactory) {
+        this.placeholderResolverStrategyFactory = placeholderResolverStrategyFactory;
+    }
+    
+} 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -105,11 +105,17 @@
             context.writeBoolean( false );
         }
 
-        writeProcessInstances( context );
+        if ( context.marshalProcessInstances ) {
+            writeProcessInstances( context );
+        }
 
-        writeWorkItems( context );
+        if ( context.marshalWorkItems ) {
+            writeWorkItems( context );
+        }
 
-        writeTimers( context );
+        if ( context.marshalTimers ) {
+            writeTimers( context );
+        }
         
         if( multithread ) {
             wm.startPartitionManagers();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryXaResource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryXaResource.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/memory/MemoryXaResource.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -12,7 +12,9 @@
     private MemoryPersister pm;
     
     Map<Xid, byte[]> data = new HashMap<Xid, byte[]>();
-    LinkedList<Xid> list = new LinkedList<Xid>();       
+    LinkedList<Xid> list = new LinkedList<Xid>();    
+    
+    private boolean nestedSavePointsAllowed = false;
 
     public MemoryXaResource(MemoryPersister pm) {
         this.pm = pm;
@@ -22,16 +24,24 @@
     	return list.size() > 0;
     }
 
+
+    public int prepare(Xid xid) throws XAException {
+        return 0;
+    }
+    
     public void start(Xid xid,
                       int flags) throws XAException {
         byte[] bytes = pm.getSnapshot();
         // The start of the first transaction is recorded as  save point, for HA.
-        if ( this.list.isEmpty() ) {
+        if ( this.list.isEmpty() && this.nestedSavePointsAllowed ) {
         	pm.setLastSave( bytes );
         }        
         
-        this.list.add( xid );
-        this.data.put( xid, bytes );
+        if ( this.nestedSavePointsAllowed || this.list.isEmpty() ) {
+            // either this is the first snapshot, or nested snapshots is allowed
+            this.list.add( xid );
+            this.data.put( xid, bytes );
+        }
     }     
     
     public void rollback(Xid xid) throws XAException {   
@@ -86,16 +96,32 @@
         return false;
     }
 
-    public int prepare(Xid xid) throws XAException {
-        return 0;
-    }
-
     public Xid[] recover(int flag) throws XAException {
         return null;
     }
 
     public boolean setTransactionTimeout(int seconds) throws XAException {
         return false;
-    }      
+    }
 
+    public boolean isNestedSavePointsAllowed() {
+        return nestedSavePointsAllowed;
+    }
+
+    public void setNestedSavePointsAllowed(boolean nestedSavePointsAllowed) {
+        this.nestedSavePointsAllowed = nestedSavePointsAllowed;
+    }    
+    
+
+//    public boolean equals(Object object) {
+//        if ( object == null || !(object instanceof MemoryXaResource)) {
+//            return false;
+//        }
+//        
+//        
+//        return this == object;
+//    }
+    
+    
+    
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/persistence/session/StatefulSessionSnapshotter.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -10,7 +10,7 @@
 import org.drools.common.InternalRuleBase;
 import org.drools.marshalling.DefaultMarshaller;
 import org.drools.marshalling.Marshaller;
-import org.drools.marshalling.PlaceholderResolverStrategyFactory;
+import org.drools.marshalling.MarshallingConfiguration;
 import org.drools.persistence.ByteArraySnapshotter;
 
 public class StatefulSessionSnapshotter implements ByteArraySnapshotter<StatefulSession> {
@@ -24,24 +24,24 @@
 		this(ruleBase, null);
 	}
 
-	public StatefulSessionSnapshotter(RuleBase ruleBase, PlaceholderResolverStrategyFactory factory) {
-		this(ruleBase, new SessionConfiguration(), factory);
+	public StatefulSessionSnapshotter(RuleBase ruleBase, MarshallingConfiguration marshallingConfiguration) {
+		this(ruleBase, new SessionConfiguration(), marshallingConfiguration);
 	}
 
-	public StatefulSessionSnapshotter(RuleBase ruleBase, SessionConfiguration conf, PlaceholderResolverStrategyFactory factory) {
+	public StatefulSessionSnapshotter(RuleBase ruleBase, SessionConfiguration conf, MarshallingConfiguration marshallingConfiguration) {
 		this.ruleBase = ruleBase;
 		this.conf = conf;
-		this.marshaller = new DefaultMarshaller(((InternalRuleBase) ruleBase).getConfiguration(), factory);
+		this.marshaller = new DefaultMarshaller(((InternalRuleBase) ruleBase).getConfiguration(), marshallingConfiguration);
 	}
 
 	public StatefulSessionSnapshotter(StatefulSession session) {
 		this(session, null);
 	}
 
-	public StatefulSessionSnapshotter(StatefulSession session, PlaceholderResolverStrategyFactory factory) {
+	public StatefulSessionSnapshotter(StatefulSession session, MarshallingConfiguration marshallingConfiguration) {
 		this.session = session;
 		this.ruleBase = session.getRuleBase();
-		this.marshaller = new DefaultMarshaller(((InternalRuleBase) ruleBase).getConfiguration(), factory);
+		this.marshaller = new DefaultMarshaller(((InternalRuleBase) ruleBase).getConfiguration(), marshallingConfiguration);
 	}
 
 	public byte[] getSnapshot() {
@@ -57,7 +57,7 @@
 
 	public void loadSnapshot(byte[] bytes) {
 		if (session == null) {
-			session = ruleBase.newStatefulSession(conf);
+			session = ruleBase.newStatefulSession(conf, null);
 		}
 		ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
 		try {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -41,12 +41,14 @@
 import org.drools.concurrent.CommandExecutor;
 import org.drools.concurrent.ExecutorService;
 import org.drools.event.RuleBaseEventListener;
+import org.drools.impl.EnvironmentFactory;
 import org.drools.marshalling.Marshaller;
 import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
 import org.drools.rule.EntryPoint;
 import org.drools.rule.InvalidPatternException;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
+import org.drools.runtime.Environment;
 import org.drools.FactHandle;
 import org.drools.spi.ExecutorServiceFactory;
 import org.drools.spi.FactHandleFactory;
@@ -232,8 +234,17 @@
                                  context,
                                  workingMemory );
     }
+    
 
-    public synchronized StatefulSession newStatefulSession(final SessionConfiguration sessionConfig) {
+    public synchronized StatefulSession newStatefulSession(boolean keepReference) {
+        SessionConfiguration config = new SessionConfiguration();
+        config.setKeepReference( keepReference );
+                       
+        return newStatefulSession( config, EnvironmentFactory.newEnvironment() );
+    }
+    
+    
+    public synchronized StatefulSession newStatefulSession(final SessionConfiguration sessionConfig, final Environment environment) {
         if ( this.config.isSequential() ) {
             throw new RuntimeException( "Cannot have a stateful rule session, with sequential configuration set to true" );
         }
@@ -244,7 +255,8 @@
             session = new ReteooStatefulSession( nextWorkingMemoryCounter(),
                                                  this,
                                                  executor,
-                                                 sessionConfig );
+                                                 sessionConfig,
+                                                 environment );
 
             executor.setCommandExecutor( new CommandExecutor( session ) );
 

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-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -15,7 +15,9 @@
 import org.drools.concurrent.Future;
 import org.drools.concurrent.RetractObject;
 import org.drools.concurrent.UpdateObject;
+import org.drools.impl.EnvironmentFactory;
 import org.drools.FactHandle;
+import org.drools.runtime.Environment;
 import org.drools.spi.AgendaFilter;
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.RuleBaseUpdateListener;
@@ -36,16 +38,19 @@
         this( id,
               ruleBase,
               executorService,
-              new SessionConfiguration() );
+              new SessionConfiguration(),
+              EnvironmentFactory.newEnvironment() );
     }
 
     public ReteooStatefulSession(final int id,
                                  final InternalRuleBase ruleBase,
                                  final ExecutorService executorService,
-                                 final SessionConfiguration config) {
+                                 final SessionConfiguration config,
+                                 final Environment environment) {
         super( id,
                ruleBase,
-               config );
+               config,
+               environment );
         this.executor = executorService;
     }
 
@@ -56,14 +61,16 @@
                                  final InitialFactHandle initialFactHandle,
                                  final long propagationContext,
                                  final SessionConfiguration config,
-                                 final InternalAgenda agenda) {
+                                 final InternalAgenda agenda,
+                                 final Environment environment) {
         super( id,
                ruleBase,
                handleFactory,
                initialFactHandle,
                propagationContext,
                config,
-               agenda );
+               agenda,
+               environment );
         this.executor = executorService;
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -27,6 +27,7 @@
 import org.drools.event.RuleFlowEventSupport;
 import org.drools.event.WorkingMemoryEventListener;
 import org.drools.event.WorkingMemoryEventSupport;
+import org.drools.impl.EnvironmentFactory;
 import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
 import org.drools.rule.EntryPoint;
 import org.drools.spi.AgendaFilter;
@@ -84,7 +85,8 @@
         synchronized ( this.ruleBase.getPackagesMap() ) {
             InternalWorkingMemory wm = new ReteooWorkingMemory( this.ruleBase.nextWorkingMemoryCounter(),
                                                                 this.ruleBase,
-                                                                new SessionConfiguration() );
+                                                                new SessionConfiguration(),
+                                                                EnvironmentFactory.newEnvironment() );
 
             wm.setGlobalResolver( this.globalResolver );
             wm.setWorkingMemoryEventSupport( this.workingMemoryEventSupport );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -35,12 +35,14 @@
 import org.drools.common.InternalWorkingMemory;
 import org.drools.common.PropagationContextImpl;
 import org.drools.common.WorkingMemoryAction;
+import org.drools.impl.EnvironmentFactory;
 import org.drools.marshalling.MarshallerReaderContext;
 import org.drools.marshalling.MarshallerWriteContext;
 import org.drools.rule.EntryPoint;
 import org.drools.rule.Package;
 import org.drools.rule.Query;
 import org.drools.rule.Rule;
+import org.drools.runtime.Environment;
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.PropagationContext;
 
@@ -62,7 +64,8 @@
                                final InternalRuleBase ruleBase) {
         this( id,
               ruleBase,
-              new SessionConfiguration() );
+              new SessionConfiguration(),
+              EnvironmentFactory.newEnvironment() );
     }
 
     /**
@@ -73,11 +76,13 @@
      */
     public ReteooWorkingMemory(final int id,
                                final InternalRuleBase ruleBase,
-                               final SessionConfiguration config) {
+                               final SessionConfiguration config,
+                               final Environment environment) {
         super( id,
                ruleBase,
                ruleBase.newFactHandleFactory(),
-               config );
+               config,
+               environment );
         this.agenda = new DefaultAgenda( ruleBase );
         this.agenda.setWorkingMemory( this );
     }
@@ -88,14 +93,16 @@
                                final InitialFactHandle initialFactHandle,
                                final long propagationContext,
                                final SessionConfiguration config,
-                               final InternalAgenda agenda) {
+                               final InternalAgenda agenda,
+                               final Environment environment) {
         super( id,
                ruleBase,
                handleFactory,
                initialFactHandle,
                //ruleBase.newFactHandleFactory(context),
                propagationContext,
-               config );
+               config,
+               environment );
         this.agenda = agenda;
         this.agenda.setWorkingMemory( this );
         //        InputPersister.readFactHandles( context );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteooRuleBaseTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteooRuleBaseTest.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/ReteooRuleBaseTest.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -66,8 +66,8 @@
     public void testNoKeepReference() throws Exception {
         SessionConfiguration conf = new SessionConfiguration();
         conf.setKeepReference( false );
-        final WorkingMemory wm5 = this.ruleBase.newStatefulSession( conf );
-        final WorkingMemory wm6 = this.ruleBase.newStatefulSession( conf );
+        final WorkingMemory wm5 = this.ruleBase.newStatefulSession( conf, null );
+        final WorkingMemory wm6 = this.ruleBase.newStatefulSession( conf, null );
         assertLength( 4,
                       this.ruleBase.getStatefulSessions() );
         assertNotContains( wm5, this.ruleBase.getStatefulSessions() );

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2009-02-12 04:40:45 UTC (rev 25236)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2009-02-12 07:07:55 UTC (rev 25237)
@@ -1856,7 +1856,7 @@
                                                        cl );
         SessionConfiguration sessionConfiguration = new SessionConfiguration();
         sessionConfiguration.setKeepReference( false );
-        InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb.newStatefulSession( sessionConfiguration );
+        InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb.newStatefulSession( sessionConfiguration, null );
         if ( coverage != null ) workingMemory.addEventListener( coverage );
         try {
             AuditLogReporter logger = new AuditLogReporter( workingMemory );




More information about the jboss-svn-commits mailing list