[jboss-svn-commits] JBL Code SVN: r34241 - in labs/jbossrules/trunk: drools-camel/src/main/java/org/drools/camel/component and 17 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 28 00:34:35 EDT 2010


Author: mark.proctor at jboss.com
Date: 2010-07-28 00:34:31 -0400 (Wed, 28 Jul 2010)
New Revision: 34241

Added:
   labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/ChangeCollector.java
   labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/Cheese.java
   labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/Person.java
   labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/TestVariable.java
   labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedWorkingMemoryEntryPoint.java
Removed:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactHandleDummyObject.java
Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactoryService.java
   labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsPolicy.java
   labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamHelper.java
   labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamJson.java
   labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamXml.java
   labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointTest.java
   labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/runtime/pipeline/impl/DroolsJaxbHelperProviderImpl.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/StatefulSessionTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/StandardQueryViewChangedEventListener.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetObjectCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertObjectInEntryPointCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/ModifyCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/RetractCommand.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.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/DefaultFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EventFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QueryElementFactHandle.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceChangeScannerImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.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/main/java/org/drools/reteoo/RightInputAdapterNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamHelper.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamJSon.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamXML.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/DroolsJaxbContextHelper.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/EqualityKeyTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/DefaultFactHandleFactoryTest.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FactHandleTest.java
Log:
JBRULES-2601 Remove DisconnectedFactHandle and make DefaultFactHandle capable of being disconnected
-DisconnectedFactHandle now removed
-DefaultFactHandle can now work in a disconnected manner
-Cleanup of InitialFact, removing InitialFactHandle, seems no need for it.
-Cleanup of WorkingMemoryEntryPoint, so it nearly always comes as a constructor

Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactoryService.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactoryService.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/builder/KnowledgeBuilderFactoryService.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -24,7 +24,7 @@
 import com.sun.tools.xjc.Options;
 
 /**
- * KnowledgeBuilderFactoryService is used by the KnowledgeBuilderFacotry to "provide" it's concrete implementation.
+ * KnowledgeBuilderFactoryService is used by the KnowledgeBuilderFactory to "provide" it's concrete implementation.
  * 
  * This class is not considered stable and may change, the user is protected from this change by using 
  * the Factory api, which is considered stable.

Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsPolicy.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsPolicy.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/DroolsPolicy.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -64,7 +64,6 @@
 import org.drools.command.runtime.rule.RetractCommand;
 import org.drools.command.runtime.rule.ModifyCommand.SetterImpl;
 import org.drools.common.DefaultFactHandle;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.core.util.StringUtils;
 import org.drools.runtime.CommandExecutor;
 import org.drools.runtime.impl.ExecutionResultImpl;
@@ -367,7 +366,7 @@
 
     public static final String[] JAXB_ANNOTATED_CMD = {BatchExecutionCommand.class.getName(), SetGlobalCommand.class.getName(), GetGlobalCommand.class.getName(), FireAllRulesCommand.class.getName(), InsertElementsCommand.class.getName(),
             InsertObjectCommand.class.getName(), ModifyCommand.class.getName(), SetterImpl.class.getName(), QueryCommand.class.getName(), RetractCommand.class.getName(), AbortWorkItemCommand.class.getName(), SignalEventCommand.class.getName(),
-            StartProcessCommand.class.getName(), BatchExecutionCommand.class.getName(), ExecutionResultImpl.class.getName(), DefaultFactHandle.class.getName(), JaxbListWrapper.class.getName(), DisconnectedFactHandle.class.getName(),
+            StartProcessCommand.class.getName(), BatchExecutionCommand.class.getName(), ExecutionResultImpl.class.getName(), DefaultFactHandle.class.getName(), JaxbListWrapper.class.getName(),
             FlatQueryResults.class.getName(), CompleteWorkItemCommand.class.getName(), GetObjectsCommand.class.getName()};
 
 }

Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamHelper.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamHelper.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -40,7 +40,6 @@
 import org.drools.command.runtime.rule.RetractCommand;
 import org.drools.command.runtime.rule.ModifyCommand.SetterImpl;
 import org.drools.common.DefaultFactHandle;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.runtime.impl.ExecutionResultImpl;
 import org.drools.runtime.rule.impl.FlatQueryResults;
 import org.drools.runtime.rule.impl.NativeQueryResults;
@@ -92,8 +91,6 @@
                  NativeQueryResults.class.getName() );
         map.put( "fact-handle",
                  DefaultFactHandle.class.getName() );
-        map.put( "fact-handle",
-                 DisconnectedFactHandle.class.getName() );
 
         dataFormat.setAliases( map );
     }

Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamJson.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamJson.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamJson.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -43,7 +43,7 @@
 import org.drools.command.runtime.rule.ModifyCommand;
 import org.drools.command.runtime.rule.QueryCommand;
 import org.drools.command.runtime.rule.RetractCommand;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.help.impl.CommandsObjectContainer;
 import org.drools.runtime.help.impl.ObjectsObjectContainer;
@@ -194,7 +194,7 @@
                 }
                 reader.moveUp();
             }
-            return new RowItemContainer( new DisconnectedFactHandle( externalForm ),
+            return new RowItemContainer( new DefaultFactHandle( externalForm ),
                                          object );
         }
 
@@ -368,7 +368,7 @@
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext unmarshallingContext) {
             reader.moveDown();
-            DisconnectedFactHandle factHandle = new DisconnectedFactHandle( reader.getValue() );
+            DefaultFactHandle factHandle = new DefaultFactHandle( reader.getValue() );
             reader.moveUp();
             return factHandle;
         }
@@ -465,7 +465,7 @@
                 reader.moveDown();
                 String name = reader.getNodeName();
                 if ( "fact-handle".equals( name ) ) {
-                    factHandle = new DisconnectedFactHandle( reader.getValue() );
+                    factHandle = new DefaultFactHandle( reader.getValue() );
                 } else if ( "out-identifier".equals( "out-identifier" ) ) {
                     outIdentifier = reader.getValue();
                 }
@@ -504,7 +504,7 @@
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
             reader.moveDown();
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getValue() );
+            FactHandle factHandle = new DefaultFactHandle( reader.getValue() );
             reader.moveUp();
 
             Command cmd = CommandFactory.newRetract( factHandle );
@@ -546,7 +546,7 @@
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
             reader.moveDown();
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getValue() );
+            FactHandle factHandle = new DefaultFactHandle( reader.getValue() );
             reader.moveUp();
 
             List<Setter> setters = new ArrayList();
@@ -754,7 +754,7 @@
                         reader.moveUp();
 
                         facts.put( identifier,
-                                   new DisconnectedFactHandle( externalForm ) );
+                                   new DefaultFactHandle( externalForm ) );
                     } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
                         List list = new ArrayList();
                         String identifier = null;
@@ -764,7 +764,7 @@
                             reader.moveUp();
                             while ( reader.hasMoreChildren() ) {
                                 reader.moveDown();
-                                FactHandle factHandle = new DisconnectedFactHandle( (String) readItem( reader,
+                                FactHandle factHandle = new DefaultFactHandle( (String) readItem( reader,
                                                                                                        context,
                                                                                                        null ) );
                                 list.add( factHandle );

Modified: labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamXml.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamXml.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-camel/src/main/java/org/drools/camel/component/XStreamXml.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -45,7 +45,7 @@
 import org.drools.command.runtime.rule.ModifyCommand;
 import org.drools.command.runtime.rule.QueryCommand;
 import org.drools.command.runtime.rule.RetractCommand;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.rule.Declaration;
 import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.impl.ExecutionResultImpl;
@@ -215,7 +215,7 @@
 
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getAttribute( "fact-handle" ) );
+            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
 
             List<Setter> setters = new ArrayList();
             while ( reader.hasMoreChildren() ) {
@@ -256,7 +256,7 @@
 
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getAttribute( "fact-handle" ) );
+            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
 
             Command cmd = CommandFactory.newRetract( factHandle );
 
@@ -407,7 +407,7 @@
 
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getAttribute( "fact-handle" ) );
+            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
             String identifierOut = reader.getAttribute( "out-identifier" );
 
             GetObjectCommand cmd = new GetObjectCommand( factHandle );
@@ -867,13 +867,13 @@
                 } else if ( reader.getNodeName().equals( "fact-handle" ) ) {
                     String identifier = reader.getAttribute( "identifier" );
                     facts.put( identifier,
-                               new DisconnectedFactHandle( reader.getAttribute( "external-form" ) ) );
+                               new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
                 } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
                     String identifier = reader.getAttribute( "identifier" );
                     List<FactHandle> list = new ArrayList();
                     while ( reader.hasMoreChildren() ) {
                         reader.moveDown();
-                        list.add( new DisconnectedFactHandle( reader.getAttribute( "external-form" ) ) );
+                        list.add( new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
                         reader.moveUp();
                     }
                     facts.put( identifier,
@@ -979,7 +979,7 @@
                     reader.moveUp();
 
                     reader.moveDown();
-                    FactHandle handle = new DisconnectedFactHandle( reader.getAttribute( "external-form" ) );
+                    FactHandle handle = new DefaultFactHandle( reader.getAttribute( "external-form" ) );
                     reader.moveUp();
 
                     objects.add( object );

Added: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/ChangeCollector.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/ChangeCollector.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/ChangeCollector.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -0,0 +1,52 @@
+package org.drools;
+
+
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.event.rule.ObjectInsertedEvent;
+import org.drools.event.rule.ObjectUpdatedEvent;
+import org.drools.event.rule.ObjectRetractedEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Michael Neale
+ */
+public class ChangeCollector implements WorkingMemoryEventListener {
+
+    private List<String> retracted;
+    private List changes;
+
+
+
+
+    public List<String> getRetracted() {
+        return retracted;
+    }
+
+
+    public List getChanges() {
+        return changes;
+    }
+
+
+    public void objectInserted(ObjectInsertedEvent event) {
+        
+    }
+
+    public void objectUpdated(ObjectUpdatedEvent event) {
+        if (changes == null) changes = new ArrayList();
+        if (event.getObject() instanceof Cheese) {
+            Cheese c = (Cheese) event.getObject();
+            changes.add(c);
+        }
+    }
+
+    public void objectRetracted(ObjectRetractedEvent event) {
+        if (retracted == null) retracted = new ArrayList<String>();
+        if (event.getOldObject() instanceof Cheese) {
+            Cheese c = (Cheese) event.getOldObject();
+            retracted.add(c.getType());
+        }
+    }
+}

Added: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/Cheese.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/Cheese.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/Cheese.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -0,0 +1,123 @@
+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-camel/src/test/java/org/drools/Person.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/Person.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/Person.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -0,0 +1,270 @@
+package org.drools;
+
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
+public class Person
+    implements
+    Serializable {
+    /**
+     *
+     */
+    private static final long serialVersionUID = 400L;
+    private String            name;
+    private String            likes;
+    private int               age;
+    private BigDecimal        bigDecimal;
+    private BigInteger        bigInteger;
+    private String            hair;
+
+    private char              sex;
+
+    private boolean           alive;
+
+    private String            status;
+
+    private Cheese            cheese;
+
+    private List              addresses = new ArrayList();
+
+//    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+//        name    = (String)in.readObject();
+//        likes    = (String)in.readObject();
+//        age     = in.readInt();
+//        bigDecimal    = (BigDecimal)in.readObject();
+//        bigInteger    = (BigInteger)in.readObject();
+//        hair    = (String)in.readObject();
+//        sex     = in.readChar();
+//        alive   = in.readBoolean();
+//        status    = (String)in.readObject();
+//        cheese    = (Cheese)in.readObject();
+//        addresses    = (List)in.readObject();
+//    }
+//
+//    public void writeExternal(ObjectOutput out) throws IOException {
+//        out.writeObject(name);
+//        out.writeObject(likes);
+//        out.writeObject(bigDecimal);
+//        out.writeObject(bigInteger);
+//        out.writeObject(hair);
+//        out.writeChar(sex);
+//        out.writeBoolean(alive);
+//        out.writeObject(status);
+//        out.writeObject(cheese);
+//        out.writeObject(addresses);
+//    }
+
+    public List getAddresses() {
+        return addresses;
+    }
+
+    public void setAddresses(List addresses) {
+        this.addresses = addresses;
+    }
+
+    public Person() {
+
+    }
+
+    public Person(String name,
+                  int age) {
+        super();
+        this.name = name;
+        this.age = age;
+    }
+
+    public Person(final String name) {
+        this( name,
+              "",
+              0 );
+    }
+
+    public Person(final String name,
+                  final String likes) {
+        this( name,
+              likes,
+              0 );
+    }
+
+    public Person(final String name,
+                  final String likes,
+                  final int age) {
+        this.name = name;
+        this.likes = likes;
+        this.age = age;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#getStatus()
+     */
+    public String getStatus() {
+        return this.status;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#setStatus(java.lang.String)
+     */
+    public void setStatus(final String status) {
+        this.status = status;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#getLikes()
+     */
+    public String getLikes() {
+        return this.likes;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#getName()
+     */
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(final String name) {
+        this.name = name;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#getAge()
+     */
+    public int getAge() {
+        return this.age;
+    }
+
+    public void setAge(final int age) {
+        this.age = age;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#isAlive()
+     */
+    public boolean isAlive() {
+        return this.alive;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#setAlive(boolean)
+     */
+    public void setAlive(final boolean alive) {
+        this.alive = alive;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#getSex()
+     */
+    public char getSex() {
+        return this.sex;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#setSex(char)
+     */
+    public void setSex(final char sex) {
+        this.sex = sex;
+    }
+
+    public String getHair() {
+        return this.hair;
+    }
+
+    public void setHair(final String hair) {
+        this.hair = hair;
+    }
+
+    public String toString() {
+        return "[Person name='" + this.name + "']";
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + this.age;
+        result = PRIME * result + (this.alive ? 1231 : 1237);
+        result = PRIME * result + ((this.name == null) ? 0 : this.name.hashCode());
+        result = PRIME * result + this.sex;
+        return result;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public boolean equals(final Object obj) {
+        if ( this == obj ) {
+            return true;
+        }
+        if ( obj == null ) {
+            return false;
+        }
+        if ( getClass() != obj.getClass() ) {
+            return false;
+        }
+        final Person other = (Person) obj;
+        if ( this.age != other.age ) {
+            return false;
+        }
+        if ( this.alive != other.alive ) {
+            return false;
+        }
+        if ( this.name == null ) {
+            if ( other.name != null ) {
+                return false;
+            }
+        } else if ( !this.name.equals( other.name ) ) {
+            return false;
+        }
+        if ( this.sex != other.sex ) {
+            return false;
+        }
+        return true;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#getBigDecimal()
+     */
+    public BigDecimal getBigDecimal() {
+        return this.bigDecimal;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#setBigDecimal(java.math.BigDecimal)
+     */
+    public void setBigDecimal(final BigDecimal bigDecimal) {
+        this.bigDecimal = bigDecimal;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#getBigInteger()
+     */
+    public BigInteger getBigInteger() {
+        return this.bigInteger;
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.PersonInterface#setBigInteger(java.math.BigInteger)
+     */
+    public void setBigInteger(final BigInteger bigInteger) {
+        this.bigInteger = bigInteger;
+    }
+
+    public void setLikes(final String likes) {
+        this.likes = likes;
+    }
+
+    public Cheese getCheese() {
+        return this.cheese;
+    }
+
+    public void setCheese(final Cheese cheese) {
+        this.cheese = cheese;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/TestVariable.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/TestVariable.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/TestVariable.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -0,0 +1,23 @@
+package org.drools;
+/**
+ * 
+ */
+
+
+public class TestVariable {
+    
+    private String name;
+    
+    public TestVariable(String name) {
+        this.name = name;
+    }
+    
+    public String getName() {
+        return name;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointTest.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -41,7 +41,7 @@
 import org.drools.command.runtime.BatchExecutionCommand;
 import org.drools.command.runtime.rule.GetObjectCommand;
 import org.drools.command.runtime.rule.InsertObjectCommand;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.pipeline.camel.Person;
 import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.StatefulKnowledgeSession;
@@ -74,7 +74,7 @@
     }
 
     public void testSessionGetObject() throws Exception {
-        FactHandle factHandle = new DisconnectedFactHandle(handle);
+        FactHandle factHandle = new DefaultFactHandle(handle);
         GetObjectCommand cmd = (GetObjectCommand) CommandFactory.newGetObject(factHandle);
         cmd.setOutIdentifier("rider");
 

Modified: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -64,7 +64,6 @@
 import org.drools.command.runtime.rule.RetractCommand;
 import org.drools.command.runtime.rule.ModifyCommand.SetterImpl;
 import org.drools.common.DefaultFactHandle;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.impl.KnowledgeBaseImpl;
 import org.drools.io.ResourceFactory;
 import org.drools.pipeline.camel.Person;
@@ -138,7 +137,7 @@
 
         BatchExecutionCommand cmd = new BatchExecutionCommand();
         cmd.setLookup( "ksession1" );
-        cmd.getCommands().add( new GetObjectCommand( new DisconnectedFactHandle( handle ),
+        cmd.getCommands().add( new GetObjectCommand( new DefaultFactHandle( handle ),
                                                      "hadrian" ) );
 
         StringWriter xmlReq = new StringWriter();

Added: labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-camel/src/test/java/org/drools/camel/component/XStreamBatchExecutionTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -0,0 +1,2026 @@
+package org.drools.camel.component;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+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 javax.naming.Context;
+
+import junit.framework.TestCase;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.builder.RouteBuilder;
+import org.custommonkey.xmlunit.Diff;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier;
+import org.drools.Cheese;
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.KnowledgeBaseFactoryService;
+import org.drools.Person;
+import org.drools.builder.DirectoryLookupFactoryService;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.KnowledgeBuilderFactoryService;
+import org.drools.builder.ResourceType;
+import org.drools.command.Command;
+import org.drools.command.runtime.rule.ModifyCommand;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalRuleBase;
+import org.drools.definition.KnowledgePackage;
+import org.drools.grid.ExecutionNode;
+import org.drools.grid.local.LocalConnection;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.io.Resource;
+import org.drools.io.ResourceFactory;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.runtime.CommandExecutor;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.runtime.process.WorkflowProcessInstance;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.QueryResultsRow;
+import org.xml.sax.SAXException;
+
+import com.thoughtworks.xstream.XStream;
+
+public class XStreamBatchExecutionTest extends ContextTestSupport {
+    protected ExecutionNode node;
+    protected CommandExecutor exec;
+    
+    
+    protected Context createJndiContext() throws Exception {
+        Context context = super.createJndiContext();
+
+        LocalConnection connection = new LocalConnection();
+        node = connection.getExecutionNode(null);
+        node.setId("node");
+        context.bind("node", node);
+        node.get(DirectoryLookupFactoryService.class).register("ksession1", this.exec);
+        return context;
+    }    
+    
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            public void configure() throws Exception {
+                from("direct:exec").policy( new DroolsPolicy() ).unmarshal( "xstream" ).to("drools://node/ksession1").marshal( "xstream" );
+                from("direct:unmarshal").policy( new DroolsPolicy() ).unmarshal( "xstream" );
+                from("direct:marshal").policy( new DroolsPolicy() ).marshal( "xstream" );                
+            }
+        };
+    }    
+    
+    public void setExec(CommandExecutor exec) {
+        this.exec = exec;
+        try {
+            super.setUp();
+        } catch ( Exception e ) {
+            throw new RuntimeException(e);
+        }        
+    }
+
+    @Override
+    public void setUp() throws Exception {
+        XMLUnit.setIgnoreComments( true );
+        XMLUnit.setIgnoreWhitespace( true );
+        XMLUnit.setIgnoreAttributeOrder( true );
+        XMLUnit.setNormalizeWhitespace( true );
+        XMLUnit.setNormalize( true );
+    }
+
+    private void assertXMLEqual(String expectedXml,
+                                String resultXml) {
+        try {
+            Diff diff = new Diff( expectedXml,
+                                  resultXml );
+            diff.overrideElementQualifier( new RecursiveElementNameAndTextQualifier() );
+            XMLAssert.assertXMLEqual( diff,
+                                      true );
+        } catch ( Exception e ) {
+            throw new RuntimeException( "XML Assertion failure",
+                                        e );
+        }
+    }
+
+    public void testListenForChanges() throws Exception {
+
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Cheese \n";
+        str += "import org.drools.ChangeCollector \n";
+        str += "rule rule1 \n";
+        str += "  when \n";
+        str += "    $c : Cheese(price==25) \n";
+        str += " \n";
+        str += "  then \n";
+        str += "end\n";
+
+        str += "rule rule2 \n";
+        str += "  when \n";
+        str += "    p : Person(name=='mic') \n";
+        str += "    c : Cheese(price != 42) \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    c.setPrice( 42 ); \n";
+        str += "    update(c); \n";
+        str += "end\n";
+
+        str += "rule rule3 \n";
+        str += "  when \n";
+        str += "    p : Person(name=='mark') \n";
+        str += "    c : Cheese(price == 42) \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    retract(c); \n";
+        str += "end\n";
+
+        str += "rule ruleBootStrap \n";
+        str += "salience 10000\n";
+        str += "  when \n";
+        str += "    $c : ChangeCollector() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    kcontext.getKnowledgeRuntime().addEventListener($c); \n";
+        str += "end\n";
+
+        str += "rule ruleCleanup \n";
+        str += "salience -10000\n";
+        str += "  when \n";
+        str += "    $c : ChangeCollector() \n";
+        str += " \n";
+        str += "  then \n";
+        str += "    kcontext.getKnowledgeRuntime().removeEventListener($c); \n";
+        str += "    retract($c); \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 += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert out-identifier='person'>";
+        inXml += "    <org.drools.Person>";
+        inXml += "      <name>mic</name>";
+        inXml += "    </org.drools.Person>";
+        inXml += "  </insert>";
+        inXml += "  <insert out-identifier='changes'>";
+        inXml += "    <org.drools.ChangeCollector/>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        assertTrue( outXml.indexOf( "<changes>" ) > -1 );
+
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <insert out-identifier='person'>";
+        inXml += "    <org.drools.Person>";
+        inXml += "      <name>mark</name>";
+        inXml += "    </org.drools.Person>";
+        inXml += "  </insert>";
+        inXml += "  <insert out-identifier='changes'>";
+        inXml += "    <org.drools.ChangeCollector/>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        assertTrue( outXml.indexOf( "<retracted>" ) > -1 );
+
+    }
+      
+
+    public void testInsertWithDefaults() 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 += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class); 
+            
+        Cheese stilton = (Cheese) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
+        stilton = (Cheese) ksession.getObject( factHandle );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        String expectedXml = "";
+        expectedXml += "<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 += "  <fact-handle identifier=\"outStilton\" external-form=\"" + ((InternalFactHandle) result.getFactHandle( "outStilton" )).toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+    }
+
+    public void testInsertWithReturnObjectFalse() 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' return-object='false'>";
+        inXml += "    <org.drools.Cheese>";
+        inXml += "      <type>stilton</type>";
+        inXml += "      <price>25</price>";
+        inXml += "      <oldPrice>0</oldPrice>";
+        inXml += "    </org.drools.Cheese>";
+        inXml += "  </insert>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+
+        assertNull( result.getValue( "outStilton" ) );
+
+        FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
+        Cheese stilton = (Cheese) ksession.getObject( factHandle );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n";
+        expectedXml += "  <fact-handle identifier=\"outStilton\" external-form=\"" + ((InternalFactHandle) result.getFactHandle( "outStilton" )).toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+    }
+
+    public void testGetObject() 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 += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+        
+        Cheese stilton = (Cheese) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <get-object out-identifier='outStilton' fact-handle='" + factHandle.toExternalForm() + "' />";
+        inXml += "</batch-execution>";
+        outXml = template.requestBody("direct:exec", inXml, String.class);
+        result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+        stilton = (Cheese) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );
+    }
+
+    public void testRetractObject() 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 += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+        
+        Cheese stilton = (Cheese) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <retract fact-handle='" + factHandle.toExternalForm() + "' />";
+        inXml += "</batch-execution>";
+        template.requestBody("direct:exec", inXml, String.class);
+
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <get-object out-identifier='outStilton' fact-handle='" + factHandle.toExternalForm() + "' />";
+        inXml += "</batch-execution>";
+        
+        outXml = template.requestBody("direct:exec", inXml, String.class);
+        result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+        assertNull( result.getValue( "outStilton" ) );
+    }
+
+    public void testModifyObject() 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 += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+        Cheese stilton = (Cheese) result.getValue( "outStilton" );
+        assertEquals( 30,
+                      stilton.getPrice() );
+
+        FactHandle factHandle = ((FactHandle) result.getFactHandle( "outStilton" ));
+
+        String expectedXml = "";
+        expectedXml += "<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 += "  <fact-handle identifier=\"outStilton\" external-form=\"" + factHandle.toExternalForm() + "\" /> \n";
+        expectedXml += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <modify fact-handle='" + factHandle.toExternalForm() + "'> <set accessor='oldPrice' value='\"42\"' /><set accessor='price' value='50' /></modify>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+        template.requestBody("direct:exec", inXml, String.class);
+
+
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <get-object out-identifier='outCheddar' fact-handle='" + factHandle.toExternalForm() + "' />";
+        inXml += "</batch-execution>";
+        setExec( ksession );
+
+        outXml = template.requestBody("direct:exec", inXml, String.class);
+        result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+
+        Cheese cheddar = (Cheese) result.getValue( "outCheddar" );
+        assertEquals( 42,
+                      cheddar.getOldPrice() );
+        assertEquals( 55,
+                      cheddar.getPrice() );
+
+        //now test for code injection:
+        ModifyCommand.ALLOW_MODIFY_EXPRESSIONS = false;
+        inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <modify fact-handle='" + factHandle.toExternalForm() + "'> <set accessor='type' value='44\"; System.exit(1);' /><set accessor='price' value='50' /></modify>";
+        inXml += "  <fire-all-rules />";
+        inXml += "</batch-execution>";
+        
+        outXml = template.requestBody("direct:exec", inXml, String.class);
+        result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+        
+        result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+        ModifyCommand.ALLOW_MODIFY_EXPRESSIONS = true;
+
+    }
+
+    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' return-objects='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() ) );
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        String expectedXml = "";
+        expectedXml += "<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 += "</execution-results>\n";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+        ExecutionResults result = template.requestBody("direct:unmarshal", outXml, ExecutionResults.class);
+
+        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 testFactHandleReturn() 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 += "    System.err.println(42); \n";
+        str += "end\n";
+
+        String inXml = "";
+        inXml += "<batch-execution>";
+        inXml += "  <get-global identifier='list' out-identifier='out-list'/>";
+        inXml += "</batch-execution>";
+
+        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+        FactHandle fh = ksession.insert( new Person( "mic",
+                                                     42 ) );
+        List<FactHandle> list = new ArrayList<FactHandle>();
+        list.add( fh );
+
+        ksession.setGlobal( "list",
+                            list );
+
+        setExec( ksession );
+
+        String outXml = template.requestBody("direct:exec", inXml, String.class);
+
+        System.err.println( outXml );
+        String expectedXml = "";
+        expectedXml += "<execution-results>\n" + "  <result identifier=\"out-list\">\n" + "    <list>\n" + "      <fact-handle external-form=\"" + fh.toExternalForm() + "\"/>\n" + "    </list>\n" + "  </result>\n" + "</execution-results>";
+
+        assertXMLEqual( expectedXml,
+                        outXml );
+
+    }
+//
+//    public void testInsertElementsWithReturnObjects() 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 out-identifier='myfacts' return-objects='true'>";
+//        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 += "  <fire-all-rules/>";
+//        inXml += "</batch-execution>";
+//
+//        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                resultHandler );
+//        String outXml = (String) resultHandler.getObject();
+//
+//        Collection< ? extends FactHandle> factHandles = ksession.getFactHandles();
+//
+//        String expectedXml = "";
+//        expectedXml += "<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 += "  <result identifier=\"myfacts\">\n";
+//        expectedXml += "  <list>\n";
+//        expectedXml += "    <org.drools.Cheese reference=\"../../../result/list/org.drools.Cheese[2]\"/>\n";
+//        expectedXml += "    <org.drools.Cheese reference=\"../../../result/list/org.drools.Cheese\"/>\n";
+//        expectedXml += "  </list>\n";
+//        expectedXml += "  </result>\n";
+//        expectedXml += "  <fact-handles identifier=\"myfacts\">\n";
+//        for ( FactHandle factHandle : factHandles ) {
+//            if ( ((Cheese) ksession.getObject( factHandle )).getPrice() == 30 ) {
+//                expectedXml += "  <fact-handle external-form=\"" + factHandle.toExternalForm() + "\"/>\n";
+//            }
+//        }
+//
+//        for ( FactHandle factHandle : factHandles ) {
+//            if ( ((Cheese) ksession.getObject( factHandle )).getPrice() == 35 ) {
+//                expectedXml += "  <fact-handle external-form=\"" + factHandle.toExternalForm() + "\"/>\n";
+//            }
+//        }
+//        expectedXml += "  </fact-handles>\n";
+//
+//        expectedXml += "</execution-results>\n";
+//
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//
+//        ExecutionResults result = (ExecutionResults) 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 += "<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 += "</execution-results>\n";
+//
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//
+//        ExecutionResults result = (ExecutionResults) 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 += "<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 += "</execution-results>\n";
+//
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//    }
+//
+//    public void testGetObjects() 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-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 += "  <get-objects out-identifier='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 += "<execution-results>";
+//        expectedXml += "  <result identifier='list'>";
+//        expectedXml += "    <list>";
+//        expectedXml += "      <org.drools.Cheese>";
+//        expectedXml += "        <type>stilton</type>";
+//        expectedXml += "        <price>30</price>";
+//        expectedXml += "        <oldPrice>0</oldPrice>";
+//        expectedXml += "      </org.drools.Cheese>";
+//        expectedXml += "      <org.drools.Cheese>";
+//        expectedXml += "        <type>stilton</type>";
+//        expectedXml += "        <price>35</price>";
+//        expectedXml += "        <oldPrice>0</oldPrice>";
+//        expectedXml += "      </org.drools.Cheese>";
+//        expectedXml += "    </list>";
+//        expectedXml += "  </result>";
+//        expectedXml += "</execution-results>";
+//
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//
+//        ExecutionResults result = (ExecutionResults) 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 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";
+//        str += "query cheesesWithParams(String a, String b) \n";
+//        str += "    stilton : Cheese(type == a) \n";
+//        str += "    cheddar : Cheese(type == b, 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 += "  <query out-identifier='cheeses2' name='cheesesWithParams'>";
+//        inXml += "    <string>stilton</string>";
+//        inXml += "    <string>cheddar</string>";
+//        inXml += "  </query>";
+//        inXml += "</batch-execution>";
+//
+//        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                resultHandler );
+//        String outXml = (String) resultHandler.getObject();
+//
+//        Iterator<QueryResultsRow> it1 = ksession.getQueryResults( "cheeses" ).iterator();
+//        Iterator<QueryResultsRow> it2 = ksession.getQueryResults( "cheesesWithParams",
+//                                                                  new String[]{"stilton", "cheddar"} ).iterator();
+//        QueryResultsRow row = null;
+//
+//        String expectedXml = "";
+//        expectedXml += "<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";
+//        row = it1.next();
+//        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 += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
+//        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 += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
+//        expectedXml += "      </row>\n";
+//        expectedXml += "      <row>\n";
+//        row = it1.next();
+//        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 += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
+//        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 += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
+//        expectedXml += "      </row>\n";
+//        expectedXml += "    </query-results>\n";
+//        expectedXml += "  </result>\n";
+//        expectedXml += "  <result identifier='cheeses2'>\n";
+//        expectedXml += "    <query-results>\n";
+//        expectedXml += "      <identifiers>\n";
+//        expectedXml += "        <identifier>stilton</identifier>\n";
+//        expectedXml += "        <identifier>cheddar</identifier>\n";
+//        expectedXml += "      </identifiers>\n";
+//        expectedXml += "      <row>\n";
+//        row = it2.next();
+//        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row/org.drools.Cheese\"/>\n";
+//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
+//        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row/org.drools.Cheese[2]\"/>\n";
+//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
+//        expectedXml += "      </row>\n";
+//        expectedXml += "      <row>\n";
+//        row = it2.next();
+//        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row[2]/org.drools.Cheese\"/>\n";
+//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "stilton" ).toExternalForm() + "' />";
+//        expectedXml += "        <org.drools.Cheese reference=\"../../../../result/query-results/row[2]/org.drools.Cheese[2]\"/>\n";
+//        expectedXml += "        <fact-handle external-form='" + row.getFactHandle( "cheddar" ).toExternalForm() + "' />";
+//        expectedXml += "      </row>\n";
+//        expectedXml += "    </query-results>\n";
+//        expectedXml += "  </result>\n";
+//        expectedXml += "</execution-results>\n";
+//
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//
+//        ExecutionResults batchResult = (ExecutionResults) 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 );
+//    }
+//
+//    public void testManualFireAllRules() 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 += "  <fire-all-rules />";
+//        inXml += "  <insert out-identifier='outBrie'>";
+//        inXml += "    <org.drools.Cheese>";
+//        inXml += "      <type>brie</type>";
+//        inXml += "      <price>10</price>";
+//        inXml += "      <oldPrice>5</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();
+//
+//        FactHandle factHandle = (FactHandle) ((ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml )).getFactHandle( "outBrie" );
+//
+//        String expectedXml = "";
+//        expectedXml += "<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 += "  <result identifier='outBrie'>\n";
+//        expectedXml += "    <org.drools.Cheese>\n";
+//        expectedXml += "      <type>brie</type>\n";
+//        expectedXml += "      <price>10</price>\n";
+//        expectedXml += "      <oldPrice>5</oldPrice>\n";
+//        expectedXml += "    </org.drools.Cheese>\n";
+//        expectedXml += "  </result>\n";
+//        expectedXml += "  <fact-handle identifier=\"outBrie\" external-form=\"" + factHandle.toExternalForm() + "\" /> \n";
+//        expectedXml += "</execution-results>\n";
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//
+//        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+//
+//        // brie should not have been added to the list
+//        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 ) );
+//
+//        // brie should not have changed
+//        Cheese brie10 = new Cheese( "brie",
+//                                    10 );
+//        brie10.setOldPrice( 5 );
+//        assertEquals( brie10,
+//                      result.getValue( "outBrie" ) );
+//    }
+//
+//    public void testProcess() throws SAXException,
+//                             IOException {
+//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+//
+//        String str = "";
+//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+//        str += "\n";
+//        str += "  <header>\n";
+//        str += "    <imports>\n";
+//        str += "      <import name=\"org.drools.TestVariable\" />\n";
+//        str += "    </imports>\n";
+//        str += "    <globals>\n";
+//        str += "      <global identifier=\"list\" type=\"java.util.List\" />\n";
+//        str += "    </globals>\n";
+//        str += "    <variables>\n";
+//        str += "      <variable name=\"person\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"TestVariable\" />\n";
+//        str += "      </variable>\n";
+//        str += "    </variables>\n";
+//        str += "  </header>\n";
+//        str += "\n";
+//        str += "  <nodes>\n";
+//        str += "    <start id=\"1\" name=\"Start\" />\n";
+//        str += "    <actionNode id=\"2\" name=\"MyActionNode\" >\n";
+//        str += "      <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Triggered\");\n";
+//        str += "list.add(person.name);\n";
+//        str += "</action>\n";
+//        str += "    </actionNode>\n";
+//        str += "    <end id=\"3\" name=\"End\" />\n";
+//        str += "  </nodes>\n";
+//        str += "\n";
+//        str += "  <connections>\n";
+//        str += "    <connection from=\"1\" to=\"2\" />\n";
+//        str += "    <connection from=\"2\" to=\"3\" />\n";
+//        str += "  </connections>\n" + "\n";
+//        str += "</process>";
+//
+//        Reader source = new StringReader( str );
+//        kbuilder.add( ResourceFactory.newReaderResource( source ),
+//                      ResourceType.DRF );
+//        if ( kbuilder.hasErrors() ) {
+//            fail( kbuilder.getErrors().toString() );
+//        }
+//
+//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+//        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+//        StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession();
+//        List<String> list = new ArrayList<String>();
+//        ksession.setGlobal( "list",
+//                            list );
+//        TestVariable person = new TestVariable( "John Doe" );
+//
+//        String inXml = "";
+//        inXml += "<batch-execution>";
+//        inXml += "  <start-process processId='org.drools.actions'>";
+//        inXml += "    <parameter identifier='person'>";
+//        inXml += "       <org.drools.TestVariable>";
+//        inXml += "         <name>John Doe</name>";
+//        inXml += "    </org.drools.TestVariable>";
+//        inXml += "    </parameter>";
+//        inXml += "  </start-process>";
+//        inXml += "  <get-global identifier='list' out-identifier='out-list'/>";
+//        inXml += "</batch-execution>";
+//
+//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+//        getPipeline( ksession ).insert( inXml,
+//                                        resultHandler );
+//        String outXml = (String) resultHandler.getObject();
+//
+//        assertEquals( 1,
+//                      list.size() );
+//        assertEquals( "John Doe",
+//                      list.get( 0 ) );
+//
+//        String expectedXml = "";
+//        expectedXml += "<execution-results>\n";
+//        expectedXml += "  <result identifier=\"out-list\">\n";
+//        expectedXml += "    <list>\n";
+//        expectedXml += "      <string>John Doe</string>\n";
+//        expectedXml += "    </list>\n";
+//        expectedXml += "  </result>\n";
+//        expectedXml += "</execution-results>\n";
+//
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//    }
+//
+//    public void testProcessInstanceSignalEvent() throws Exception {
+//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+//        String str = "";
+//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
+//        str += "\n";
+//        str += "  <header>\n";
+//        str += "    <variables>\n";
+//        str += "      <variable name=\"MyVar\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "        <value>SomeText</value>\n";
+//        str += "      </variable>\n";
+//        str += "    </variables>\n";
+//        str += "  </header>\n";
+//        str += "\n";
+//        str += "  <nodes>\n";
+//        str += "    <start id=\"1\" name=\"Start\" />\n";
+//        str += "    <eventNode id=\"2\" name=\"Event\" variableName=\"MyVar\" >\n";
+//        str += "      <eventFilters>\n";
+//        str += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
+//        str += "      </eventFilters>\n";
+//        str += "    </eventNode>\n";
+//        str += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
+//        str += "    <end id=\"4\" name=\"End\" />\n";
+//        str += "  </nodes>\n";
+//        str += "\n";
+//        str += "  <connections>\n";
+//        str += "    <connection from=\"1\" to=\"3\" />\n";
+//        str += "    <connection from=\"2\" to=\"3\" />\n";
+//        str += "    <connection from=\"3\" to=\"4\" />\n";
+//        str += "  </connections>\n";
+//        str += "\n";
+//        str += "</process>";
+//
+//        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+//                      ResourceType.DRF );
+//
+//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+//        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+//        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+//
+//        ProcessInstance processInstance = ksession.startProcess( "org.drools.event" );
+//        assertEquals( ProcessInstance.STATE_ACTIVE,
+//                      processInstance.getState() );
+//
+//        String inXml = "";
+//        inXml += "<signal-event process-instance-id= '" + processInstance.getId() + "' event-type='MyEvent'>";
+//        inXml += "    <string>MyValue</string>";
+//        inXml += "</signal-event>";
+//
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                new ResultHandlerImpl() );
+//
+//        assertEquals( ProcessInstance.STATE_COMPLETED,
+//                      processInstance.getState() );
+//        assertEquals( "MyValue",
+//                      ((VariableScopeInstance) ((org.drools.process.instance.ProcessInstance) processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE )).getVariable( "MyVar" ) );
+//    }
+//
+//    public void testProcessRuntimeSignalEvent() throws Exception {
+//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+//        String str = "";
+//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.event\" package-name=\"org.drools\" version=\"1\" >\n";
+//        str += "\n";
+//        str += "  <header>\n";
+//        str += "    <variables>\n";
+//        str += "      <variable name=\"MyVar\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "        <value>SomeText</value>\n";
+//        str += "      </variable>\n";
+//        str += "    </variables>\n";
+//        str += "  </header>\n";
+//        str += "\n";
+//        str += "  <nodes>\n";
+//        str += "    <start id=\"1\" name=\"Start\" />\n";
+//        str += "    <eventNode id=\"2\" name=\"Event\" scope=\"external\" variableName=\"MyVar\" >\n";
+//        str += "      <eventFilters>\n";
+//        str += "        <eventFilter type=\"eventType\" eventType=\"MyEvent\" />\n";
+//        str += "      </eventFilters>\n";
+//        str += "    </eventNode>\n";
+//        str += "    <join id=\"3\" name=\"Join\" type=\"1\" />\n";
+//        str += "    <end id=\"4\" name=\"End\" />\n";
+//        str += "  </nodes>\n";
+//        str += "\n";
+//        str += "  <connections>\n";
+//        str += "    <connection from=\"1\" to=\"3\" />\n";
+//        str += "    <connection from=\"2\" to=\"3\" />\n";
+//        str += "    <connection from=\"3\" to=\"4\" />\n";
+//        str += "  </connections>\n";
+//        str += "\n";
+//        str += "</process>";
+//
+//        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+//                      ResourceType.DRF );
+//
+//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+//        kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+//
+//        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+//
+//        ProcessInstance processInstance = ksession.startProcess( "org.drools.event" );
+//        assertEquals( ProcessInstance.STATE_ACTIVE,
+//                      processInstance.getState() );
+//
+//        String inXml = "";
+//        inXml += "<signal-event event-type='MyEvent'>";
+//        inXml += "    <string>MyValue</string>";
+//        inXml += "</signal-event>";
+//
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                new ResultHandlerImpl() );
+//
+//        assertEquals( ProcessInstance.STATE_COMPLETED,
+//                      processInstance.getState() );
+//        assertEquals( "MyValue",
+//                      ((VariableScopeInstance) ((org.drools.process.instance.ProcessInstance) processInstance).getContextInstance( VariableScope.VARIABLE_SCOPE )).getVariable( "MyVar" ) );
+//    }
+//
+//    public void testCompleteWorkItem() {
+//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+//
+//        String str = "";
+//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+//        str += "\n";
+//        str += "  <header>\n";
+//        str += "    <variables>\n";
+//        str += "      <variable name=\"UserName\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "        <value>John Doe</value>\n";
+//        str += "      </variable>\n";
+//        str += "      <variable name=\"Person\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"org.drools.Person\" />\n";
+//        str += "      </variable>\n";
+//        str += "      <variable name=\"MyObject\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+//        str += "      </variable>\n";
+//        str += "      <variable name=\"Number\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.IntegerDataType\" />\n";
+//        str += "      </variable>\n";
+//        str += "    </variables>\n";
+//        str += "  </header>\n";
+//        str += "\n";
+//        str += "  <nodes>\n";
+//        str += "    <start id=\"1\" name=\"Start\" />\n";
+//        str += "    <workItem id=\"2\" name=\"HumanTask\" >\n";
+//        str += "      <work name=\"Human Task\" >\n";
+//        str += "        <parameter name=\"ActorId\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "          <value>#{UserName}</value>\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"Content\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "          <value>#{Person.name}</value>\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"TaskName\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "          <value>Do something</value>\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"Priority\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"Comment\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"Attachment\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+//        str += "        </parameter>\n";
+//        str += "      </work>\n";
+//        str += "      <mapping type=\"in\" from=\"MyObject\" to=\"Attachment\" />";
+//        str += "      <mapping type=\"in\" from=\"Person.name\" to=\"Comment\" />";
+//        str += "      <mapping type=\"out\" from=\"Result\" to=\"MyObject\" />";
+//        str += "      <mapping type=\"out\" from=\"Result.length()\" to=\"Number\" />";
+//        str += "    </workItem>\n";
+//        str += "    <end id=\"3\" name=\"End\" />\n";
+//        str += "  </nodes>\n";
+//        str += "\n";
+//        str += "  <connections>\n";
+//        str += "    <connection from=\"1\" to=\"2\" />\n";
+//        str += "    <connection from=\"2\" to=\"3\" />\n";
+//        str += "  </connections>\n";
+//        str += "\n";
+//        str += "</process>";
+//
+//        Reader source = new StringReader( str );
+//        kbuilder.add( ResourceFactory.newReaderResource( source ),
+//                      ResourceType.DRF );
+//
+//        Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
+//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+//        kbase.addKnowledgePackages( kpkgs );
+//        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+//
+//        TestWorkItemHandler handler = new TestWorkItemHandler();
+//        ksession.getWorkItemManager().registerWorkItemHandler( "Human Task",
+//                                                               handler );
+//        Map<String, Object> parameters = new HashMap<String, Object>();
+//        parameters.put( "UserName",
+//                        "John Doe" );
+//        Person person = new Person();
+//        person.setName( "John Doe" );
+//        parameters.put( "Person",
+//                        person );
+//        WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
+//                                                                                                   parameters );
+//        assertEquals( ProcessInstance.STATE_ACTIVE,
+//                      processInstance.getState() );
+//        WorkItem workItem = handler.getWorkItem();
+//        assertNotNull( workItem );
+//        assertEquals( "John Doe",
+//                      workItem.getParameter( "ActorId" ) );
+//        assertEquals( "John Doe",
+//                      workItem.getParameter( "Content" ) );
+//        assertEquals( "John Doe",
+//                      workItem.getParameter( "Comment" ) );
+//
+//        assertEquals( WorkItem.PENDING,
+//                      workItem.getState() );
+//
+//        String inXml = "";
+//        inXml = "<complete-work-item id='" + workItem.getId() + "' />";
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                new ResultHandlerImpl() );
+//
+//        assertEquals( WorkItem.COMPLETED,
+//                      workItem.getState() );
+//
+//        assertEquals( ProcessInstance.STATE_COMPLETED,
+//                      processInstance.getState() );
+//
+//        parameters = new HashMap<String, Object>();
+//        parameters.put( "UserName",
+//                        "Jane Doe" );
+//        parameters.put( "MyObject",
+//                        "SomeString" );
+//        person = new Person();
+//        person.setName( "Jane Doe" );
+//        parameters.put( "Person",
+//                        person );
+//        processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
+//                                                                           parameters );
+//        assertEquals( ProcessInstance.STATE_ACTIVE,
+//                      processInstance.getState() );
+//        workItem = handler.getWorkItem();
+//        assertNotNull( workItem );
+//        assertEquals( "Jane Doe",
+//                      workItem.getParameter( "ActorId" ) );
+//        assertEquals( "SomeString",
+//                      workItem.getParameter( "Attachment" ) );
+//        assertEquals( "Jane Doe",
+//                      workItem.getParameter( "Content" ) );
+//        assertEquals( "Jane Doe",
+//                      workItem.getParameter( "Comment" ) );
+//
+//        assertEquals( WorkItem.PENDING,
+//                      workItem.getState() );
+//
+//        inXml = "";
+//        inXml += "<complete-work-item id='" + workItem.getId() + "' >";
+//        inXml += "    <result identifier='Result'>";
+//        inXml += "        <string>SomeOtherString</string>";
+//        inXml += "    </result>";
+//        inXml += "</complete-work-item>";
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                new ResultHandlerImpl() );
+//
+//        assertEquals( WorkItem.COMPLETED,
+//                      workItem.getState() );
+//
+//        assertEquals( ProcessInstance.STATE_COMPLETED,
+//                      processInstance.getState() );
+//        assertEquals( "SomeOtherString",
+//                      processInstance.getVariable( "MyObject" ) );
+//        assertEquals( 15,
+//                      processInstance.getVariable( "Number" ) );
+//    }
+//
+//    public void testAbortWorkItem() {
+//        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+//
+//        String str = "";
+//        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+//        str += "<process xmlns=\"http://drools.org/drools-5.0/process\"\n";
+//        str += "         xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
+//        str += "         xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
+//        str += "         type=\"RuleFlow\" name=\"flow\" id=\"org.drools.actions\" package-name=\"org.drools\" version=\"1\" >\n";
+//        str += "\n";
+//        str += "  <header>\n";
+//        str += "    <variables>\n";
+//        str += "      <variable name=\"UserName\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "        <value>John Doe</value>\n";
+//        str += "      </variable>\n";
+//        str += "      <variable name=\"Person\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"org.drools.Person\" />\n";
+//        str += "      </variable>\n";
+//        str += "      <variable name=\"MyObject\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+//        str += "      </variable>\n";
+//        str += "      <variable name=\"Number\" >\n";
+//        str += "        <type name=\"org.drools.process.core.datatype.impl.type.IntegerDataType\" />\n";
+//        str += "      </variable>\n";
+//        str += "    </variables>\n";
+//        str += "  </header>\n";
+//        str += "\n";
+//        str += "  <nodes>\n";
+//        str += "    <start id=\"1\" name=\"Start\" />\n";
+//        str += "    <workItem id=\"2\" name=\"HumanTask\" >\n";
+//        str += "      <work name=\"Human Task\" >\n";
+//        str += "        <parameter name=\"ActorId\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "          <value>#{UserName}</value>\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"Content\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "          <value>#{Person.name}</value>\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"TaskName\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "          <value>Do something</value>\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"Priority\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"Comment\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n";
+//        str += "        </parameter>\n";
+//        str += "        <parameter name=\"Attachment\" >\n";
+//        str += "          <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.lang.Object\" />\n";
+//        str += "        </parameter>\n";
+//        str += "      </work>\n";
+//        str += "      <mapping type=\"in\" from=\"MyObject\" to=\"Attachment\" />";
+//        str += "      <mapping type=\"in\" from=\"Person.name\" to=\"Comment\" />";
+//        str += "      <mapping type=\"out\" from=\"Result\" to=\"MyObject\" />";
+//        str += "      <mapping type=\"out\" from=\"Result.length()\" to=\"Number\" />";
+//        str += "    </workItem>\n";
+//        str += "    <end id=\"3\" name=\"End\" />\n";
+//        str += "  </nodes>\n";
+//        str += "\n";
+//        str += "  <connections>\n";
+//        str += "    <connection from=\"1\" to=\"2\" />\n";
+//        str += "    <connection from=\"2\" to=\"3\" />\n";
+//        str += "  </connections>\n";
+//        str += "\n";
+//        str += "</process>";
+//
+//        Reader source = new StringReader( str );
+//        kbuilder.add( ResourceFactory.newReaderResource( source ),
+//                      ResourceType.DRF );
+//
+//        Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
+//        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+//        kbase.addKnowledgePackages( kpkgs );
+//        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+//
+//        TestWorkItemHandler handler = new TestWorkItemHandler();
+//        ksession.getWorkItemManager().registerWorkItemHandler( "Human Task",
+//                                                               handler );
+//        Map<String, Object> parameters = new HashMap<String, Object>();
+//        parameters.put( "UserName",
+//                        "John Doe" );
+//        Person person = new Person();
+//        person.setName( "John Doe" );
+//        parameters.put( "Person",
+//                        person );
+//        WorkflowProcessInstance processInstance = (WorkflowProcessInstance) ksession.startProcess( "org.drools.actions",
+//                                                                                                   parameters );
+//        assertEquals( ProcessInstance.STATE_ACTIVE,
+//                      processInstance.getState() );
+//        WorkItem workItem = handler.getWorkItem();
+//        assertNotNull( workItem );
+//
+//        assertEquals( WorkItem.PENDING,
+//                      workItem.getState() );
+//
+//        String inXml = "<abort-work-item id='" + workItem.getId() + "' />";
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                new ResultHandlerImpl() );
+//
+//        assertEquals( WorkItem.ABORTED,
+//                      workItem.getState() );
+//    }
+//
+//    public static class TestWorkItemHandler
+//        implements
+//        WorkItemHandler {
+//        private WorkItem workItem;
+//
+//        public void executeWorkItem(WorkItem workItem,
+//                                    WorkItemManager manager) {
+//            this.workItem = workItem;
+//        }
+//
+//        public void abortWorkItem(WorkItem workItem,
+//                                  WorkItemManager manager) {
+//        }
+//
+//        public WorkItem getWorkItem() {
+//            return workItem;
+//        }
+//    }
+//
+//    public void testInsertObjectWithDeclaredFact() throws Exception {
+//        String str = "";
+//        str += "package org.foo \n";
+//        str += "declare Whee \n\ttype: String\n\tprice: Integer\n\toldPrice: Integer\nend\n";
+//        str += "rule rule1 \n";
+//        str += "  when \n";
+//        str += "    $c : Whee() \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.foo.Whee>";
+//        inXml += "      <type>stilton</type>";
+//        inXml += "      <price>25</price>";
+//        inXml += "      <oldPrice>0</oldPrice>";
+//        inXml += "    </org.foo.Whee>";
+//        inXml += "  </insert>";
+//        inXml += "  <fire-all-rules />";
+//        inXml += "</batch-execution>";
+//
+//        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                resultHandler );
+//        String outXml = (String) resultHandler.getObject();
+//
+//        ClassLoader cl = ((InternalRuleBase) ((StatefulKnowledgeSessionImpl) ksession).getRuleBase()).getRootClassLoader();
+//        XStream xstream = BatchExecutionHelper.newXStreamMarshaller();
+//        xstream.setClassLoader( cl );
+//        FactHandle factHandle = (FactHandle) ((ExecutionResults) xstream.fromXML( outXml )).getFactHandle( "outStilton" );
+//
+//        String expectedXml = "";
+//        expectedXml += "<execution-results>\n";
+//        expectedXml += "  <result identifier=\"outStilton\">\n";
+//        expectedXml += "    <org.foo.Whee>\n";
+//        expectedXml += "      <type>stilton</type>\n";
+//        expectedXml += "      <oldPrice>0</oldPrice>\n";
+//        expectedXml += "      <price>30</price>\n";
+//        expectedXml += "    </org.foo.Whee>\n";
+//        expectedXml += "  </result>\n";
+//        expectedXml += "  <fact-handle identifier=\"outStilton\" external-form=\"" + factHandle.toExternalForm() + "\" /> \n";
+//        expectedXml += "</execution-results>\n";
+//
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//
+//    }
+//
+//    public void testInsertObjectStateful() throws Exception {
+//        String str = "";
+//        str += "package org.foo \n";
+//        str += "declare Whee \n\ttype: String\n\tprice: Integer\n\toldPrice: Integer\nend\n";
+//        str += "rule rule1 \n";
+//        str += "  when \n";
+//        str += "    $c : Whee(price < 30) \n";
+//        str += " \n";
+//        str += "  then \n";
+//        str += "    $c.setPrice( $c.getPrice() + 5 ); \n update($c);\n";
+//        str += "end\n";
+//        str += "query results\n";
+//        str += "    w: Whee(price == 30)";
+//        str += "end\n";
+//
+//        String inXml = "";
+//        inXml += "<batch-execution>";
+//        inXml += "  <insert>";
+//        inXml += "    <org.foo.Whee>";
+//        inXml += "      <type>stilton</type>";
+//        inXml += "      <price>25</price>";
+//        inXml += "      <oldPrice>0</oldPrice>";
+//        inXml += "    </org.foo.Whee>";
+//        inXml += "  </insert>";
+//        inXml += "</batch-execution>";
+//
+//        StatefulKnowledgeSession ksession = getSessionStateful( ResourceFactory.newByteArrayResource( str.getBytes() ) );
+//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                resultHandler );
+//
+//        getPipelineStateful( ksession ).insert( "<batch-execution><query out-identifier='matchingthings' name='results'/></batch-execution>",
+//                                                resultHandler );
+//        String outXml = (String) resultHandler.getObject();
+//
+//        //we have not fired the rules yet
+//        assertFalse( outXml.indexOf( "<price>30</price>" ) > -1 );
+//
+//        //lets send a command to execute them then
+//        inXml = "";
+//        inXml += "<batch-execution>";
+//        inXml += "  <fire-all-rules max='100'/>";
+//        inXml += "</batch-execution>";
+//        getPipelineStateful( ksession ).insert( inXml,
+//                                                resultHandler );
+//        //ksession.fireAllRules();
+//
+//        //ok lets try that again...
+//        getPipelineStateful( ksession ).insert( "<batch-execution><query out-identifier='matchingthings' name='results'/></batch-execution>",
+//                                                resultHandler );
+//        outXml = (String) resultHandler.getObject();
+//        assertTrue( outXml.indexOf( "<price>30</price>" ) > -1 );
+//    }
+//
+//    public void testVsmPipeline() 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 lookup=\"ksession1\" >";
+//        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 += "  <fire-all-rules />";
+//        inXml += "</batch-execution>";
+//
+//        LocalConnection connection = new LocalConnection();
+//        ExecutionNode node = connection.getExecutionNode(null);
+//
+//        StatefulKnowledgeSession ksession = getExecutionNodeSessionStateful(node, ResourceFactory.newByteArrayResource( str.getBytes() ) );
+//
+//        node.get(DirectoryLookupFactoryService.class).register("ksession1", ksession);
+//
+//        XStreamResolverStrategy xstreamStrategy = new XStreamResolverStrategy() {
+//            public XStream lookup(String name) {
+//                return BatchExecutionHelper.newXStreamMarshaller();
+//            }
+//        };
+//
+//        ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+//        getPipelineSessionStateful(node, xstreamStrategy).insert(inXml, resultHandler);
+//        String outXml = (String) resultHandler.getObject();
+//
+//        ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML( outXml );
+//        Cheese stilton = (Cheese) result.getValue( "outStilton" );
+//        assertEquals( 30,
+//                      stilton.getPrice() );
+//
+//        FactHandle factHandle = (FactHandle) result.getFactHandle( "outStilton" );
+//        stilton = (Cheese) ksession.getObject( factHandle );
+//        assertEquals( 30,
+//                      stilton.getPrice() );
+//
+//        String expectedXml = "";
+//        expectedXml += "<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 += "  <fact-handle identifier=\"outStilton\" external-form=\"" + ((InternalFactHandle) result.getFactHandle( "outStilton" )).toExternalForm() + "\" /> \n";
+//        expectedXml += "</execution-results>\n";
+//
+//        assertXMLEqual( expectedXml,
+//                        outXml );
+//    }
+//
+//    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.newCommandExecutor();
+//        batchExecution.setReceiver( outTransformer );
+//
+//        Transformer inTransformer = PipelineFactory.newXStreamFromXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+//        inTransformer.setReceiver( batchExecution );
+//
+//        Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline( ksession );
+//        pipeline.setReceiver( inTransformer );
+//
+//        return pipeline;
+//    }
+//
+//    private Pipeline getPipelineSessionStateful(ExecutionNode node, XStreamResolverStrategy xstreamResolverStrategy) {
+//        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+//
+//        Action assignResult = PipelineFactory.newAssignObjectAsResult();
+//        assignResult.setReceiver( executeResultHandler );
+//
+//        //Transformer outTransformer = PipelineFactory.newXStreamToXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+//        Transformer outTransformer = new XStreamToXmlGridTransformer();
+//        outTransformer.setReceiver( assignResult );
+//
+//        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newCommandExecutor();
+//        batchExecution.setReceiver( outTransformer );
+//
+//        //Transformer inTransformer = PipelineFactory.newXStreamFromXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+//        Transformer inTransformer = new XStreamFromXmlGridTransformer( xstreamResolverStrategy );
+//        inTransformer.setReceiver( batchExecution );
+//
+////        Transformer domTransformer = new ToXmlNodeTransformer();
+////        domTransformer.setReceiver( inTransformer );
+//
+//        //Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( ksession );
+//        Pipeline pipeline = new ExecutionNodePipelineImpl( node );
+//
+//        pipeline.setReceiver( inTransformer );
+//
+//        return pipeline;
+//    }
+//
+//    private Pipeline getPipelineStateful(StatefulKnowledgeSession ksession) {
+//        Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+//
+//        Action assignResult = PipelineFactory.newAssignObjectAsResult();
+//        assignResult.setReceiver( executeResultHandler );
+//
+//        Transformer outTransformer = PipelineFactory.newXStreamToXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+//        outTransformer.setReceiver( assignResult );
+//
+//        KnowledgeRuntimeCommand batchExecution = PipelineFactory.newCommandExecutor();
+//        batchExecution.setReceiver( outTransformer );
+//
+//        Transformer inTransformer = PipelineFactory.newXStreamFromXmlTransformer( BatchExecutionHelper.newXStreamMarshaller() );
+//        inTransformer.setReceiver( batchExecution );
+//
+//        Pipeline pipeline = PipelineFactory.newStatefulKnowledgeSessionPipeline( 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(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;
+    }
+
+    private StatefulKnowledgeSession getSessionStateful(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 );
+        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+
+        return session;
+    }
+//
+//    private StatefulKnowledgeSession getExecutionNodeSessionStateful(ExecutionNode node, Resource resource) throws Exception {
+//        KnowledgeBuilder kbuilder = node.get(KnowledgeBuilderFactoryService.class).newKnowledgeBuilder();
+//        kbuilder.add( resource,
+//                      ResourceType.DRL );
+//
+//        if ( kbuilder.hasErrors() ) {
+//            System.out.println( kbuilder.getErrors() );
+//        }
+//
+//        assertFalse( kbuilder.hasErrors() );
+//        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
+//
+//        KnowledgeBase kbase = node.get(KnowledgeBaseFactoryService.class).newKnowledgeBase();
+//
+//        kbase.addKnowledgePackages( pkgs );
+//        StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+//
+//        return session;
+//    }
+
+}

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/runtime/pipeline/impl/DroolsJaxbHelperProviderImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/runtime/pipeline/impl/DroolsJaxbHelperProviderImpl.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/runtime/pipeline/impl/DroolsJaxbHelperProviderImpl.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -52,7 +52,6 @@
 import org.drools.command.runtime.rule.RetractCommand;
 import org.drools.command.runtime.rule.ModifyCommand.SetterImpl;
 import org.drools.common.DefaultFactHandle;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.compiler.PackageBuilder;
 import org.drools.compiler.PackageRegistry;
@@ -62,7 +61,6 @@
 import org.drools.rule.builder.dialect.java.JavaDialect;
 import org.drools.runtime.impl.ExecutionResultImpl;
 import org.drools.runtime.rule.impl.FlatQueryResults;
-import org.drools.runtime.rule.impl.NativeQueryResults;
 import org.drools.xml.jaxb.util.JaxbListWrapper;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXParseException;
@@ -97,7 +95,6 @@
 														ExecutionResultImpl.class.getName() ,
 														DefaultFactHandle.class.getName(),
 														JaxbListWrapper.class.getName(),
-														DisconnectedFactHandle.class.getName(),
 														FlatQueryResults.class.getName(),
 														CompleteWorkItemCommand.class.getName(),
 														GetObjectsCommand.class.getName()

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	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -103,7 +103,6 @@
 import org.drools.common.AbstractWorkingMemory;
 import org.drools.common.DefaultAgenda;
 import org.drools.common.DefaultFactHandle;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.compiler.DescrBuildError;
 import org.drools.compiler.DrlParser;
@@ -1780,11 +1779,11 @@
         DefaultFactHandle helloHandle = (DefaultFactHandle) ksession.insert( "hello" );
         DefaultFactHandle goodbyeHandle = (DefaultFactHandle) ksession.insert( "goodbye" );
 
-        org.drools.runtime.rule.FactHandle key = new DisconnectedFactHandle( helloHandle.toExternalForm() );
+        org.drools.runtime.rule.FactHandle key = new DefaultFactHandle( helloHandle.toExternalForm() );
         assertEquals( "hello",
                       ksession.getObject( key ) );
 
-        key = new DisconnectedFactHandle( goodbyeHandle.toExternalForm() );
+        key = new DefaultFactHandle( goodbyeHandle.toExternalForm() );
         assertEquals( "goodbye",
                       ksession.getObject( key ) );
 

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatefulSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatefulSessionTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/StatefulSessionTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -14,7 +14,6 @@
 import org.drools.builder.ResourceType;
 import org.drools.command.Command;
 import org.drools.command.CommandFactory;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.compiler.PackageBuilder;
 import org.drools.concurrent.Future;
 import org.drools.io.ResourceFactory;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/StandardQueryViewChangedEventListener.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/StandardQueryViewChangedEventListener.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/StandardQueryViewChangedEventListener.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -19,7 +19,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.LeftTuple;
@@ -51,11 +51,12 @@
         // Add all the FactHandles except the root DroolQuery object
         while ( entry.getIndex() > 0 ) {
             InternalFactHandle handle = entry.getLastHandle();
-            handles[entry.getIndex()] = new DisconnectedFactHandle( handle.getId(),
-                                                                    handle.getIdentityHashCode(),
-                                                                    handle.getObjectHashCode(),
-                                                                    handle.getRecency(),
-                                                                    handle.getObject() );
+            handles[entry.getIndex()] = new DefaultFactHandle( handle.getId(),
+                                                               handle.getEntryPoint().getEntryPointId() ,
+                                                               handle.getIdentityHashCode(),
+                                                               handle.getObjectHashCode(),
+                                                               handle.getRecency(),
+                                                               handle.getObject() );
             entry = entry.getParent();
         }
 
@@ -73,11 +74,12 @@
                 newArgs[i] = args[i];
             }
         }
-        handles[entry.getIndex()] = new DisconnectedFactHandle( handle.getId(),
-                                                                handle.getIdentityHashCode(),
-                                                                handle.getObjectHashCode(),
-                                                                handle.getRecency(),
-                                                                new ArrayElements( newArgs ) );
+        handles[entry.getIndex()] = new DefaultFactHandle( handle.getId(),
+                                                           handle.getEntryPoint().getEntryPointId(),
+                                                           handle.getIdentityHashCode(),
+                                                           handle.getObjectHashCode(),
+                                                           handle.getRecency(),
+                                                           new ArrayElements( newArgs ) );
 
         this.results.add( handles );
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetObjectCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetObjectCommand.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/GetObjectCommand.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -23,7 +23,7 @@
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.impl.StatefulKnowledgeSessionImpl;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
@@ -58,7 +58,7 @@
 
     @XmlAttribute(name="fact-handle", required=true)
     public void setFactHandleFromString(String factHandleId) {
-    	factHandle = new DisconnectedFactHandle(factHandleId);
+    	factHandle = new DefaultFactHandle(factHandleId);
 	}
     
     public String getFactHandleFromString() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertObjectInEntryPointCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertObjectInEntryPointCommand.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/InsertObjectInEntryPointCommand.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -24,7 +24,7 @@
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.runtime.impl.ExecutionResultImpl;
 import org.drools.runtime.rule.FactHandle;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
@@ -59,7 +59,7 @@
         WorkingMemoryEntryPoint ep = ((KnowledgeCommandContext) context).getWorkingMemoryEntryPoint();
         FactHandle factHandle = ep.insert(object);
 
-        DisconnectedFactHandle disconectedHandle = new DisconnectedFactHandle(factHandle.toExternalForm());
+        DefaultFactHandle disconectedHandle = new DefaultFactHandle(factHandle.toExternalForm());
 
         if (outIdentifier != null) {
             if (this.returnObject) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/ModifyCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/ModifyCommand.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/ModifyCommand.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -34,7 +34,7 @@
 import org.drools.command.Setter;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 import org.drools.xml.jaxb.util.JaxbListAdapter;
@@ -86,7 +86,7 @@
     
     @XmlAttribute(name="fact-handle", required=true)
 	public void setFactHandleFromString(String factHandleId) {
-		handle = new DisconnectedFactHandle(factHandleId);
+		handle = new DefaultFactHandle(factHandleId);
 	}
     
     public String getFactHandleFromString() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/RetractCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/RetractCommand.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/command/runtime/rule/RetractCommand.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -23,7 +23,7 @@
 import org.drools.command.Context;
 import org.drools.command.impl.GenericCommand;
 import org.drools.command.impl.KnowledgeCommandContext;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.rule.FactHandle;
 
@@ -53,7 +53,7 @@
 
 	@XmlAttribute(name="fact-handle", required=true)
 	public void setFactHandleFromString(String factHandleId) {
-		handle = new DisconnectedFactHandle(factHandleId);
+		handle = new DefaultFactHandle(factHandleId);
 	}
 	
     public String getFactHandleFromString() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -20,6 +20,7 @@
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.drools.reteoo.ObjectTypeConf;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.spi.FactHandleFactory;
 
 public abstract class AbstractFactHandleFactory
@@ -54,7 +55,8 @@
     */
     public final InternalFactHandle newFactHandle(final Object object,
                                                   final ObjectTypeConf conf,
-                                                  final InternalWorkingMemory workingMemory) {
+                                                  final InternalWorkingMemory workingMemory,
+                                                  final WorkingMemoryEntryPoint wmEntryPoint) {
 // @FIXME make id re-cycling thread safe        
 //        if ( !this.factHandlePool.isEmpty() ) {
 //            return newFactHandle( this.factHandlePool.pop(),
@@ -66,7 +68,8 @@
         return newFactHandle( this.id.incrementAndGet(),
                               object,
                               conf,
-                              workingMemory );
+                              workingMemory,
+                              wmEntryPoint );
     }
 
     /* (non-Javadoc)
@@ -75,12 +78,14 @@
     protected final InternalFactHandle newFactHandle(final int id,
                                                      final Object object,
                                                      final ObjectTypeConf conf,
-                                                     final InternalWorkingMemory workingMemory) {
+                                                     final InternalWorkingMemory workingMemory,
+                                                     final WorkingMemoryEntryPoint wmEntryPoint) {
         return newFactHandle( id,
                               object,
                               this.counter.incrementAndGet(),
                               conf,
-                              workingMemory );
+                              workingMemory,
+                              wmEntryPoint );
     }
 
     /* (non-Javadoc)
@@ -90,7 +95,8 @@
                                                         final Object object,
                                                         final long recency,
                                                         final ObjectTypeConf conf,
-                                                        final InternalWorkingMemory workingMemory);
+                                                        final InternalWorkingMemory workingMemory,
+                                                        final WorkingMemoryEntryPoint wmEntryPoint);
 
     /* (non-Javadoc)
      * @see org.drools.reteoo.FactHandleFactory#increaseFactHandleRecency(org.drools.FactHandle)

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	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -78,8 +78,7 @@
 import org.drools.process.instance.event.SignalManager;
 import org.drools.process.instance.timer.TimerManager;
 import org.drools.reteoo.EntryPointNode;
-import org.drools.reteoo.InitialFactHandle;
-import org.drools.reteoo.InitialFactHandleDummyObject;
+import org.drools.reteoo.InitialFactImpl;
 import org.drools.reteoo.LIANodePropagation;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.ObjectTypeConf;
@@ -289,7 +288,7 @@
     public AbstractWorkingMemory(final int id,
                                  final InternalRuleBase ruleBase,
                                  final FactHandleFactory handleFactory,
-                                 final InitialFactHandle initialFactHandle,
+                                 final InternalFactHandle initialFactHandle,
                                  final long propagationContext,
                                  final SessionConfiguration config,
                                  final Environment environment) {
@@ -308,7 +307,7 @@
     public AbstractWorkingMemory(final int id,
                                  final InternalRuleBase ruleBase,
                                  final FactHandleFactory handleFactory,
-                                 final InitialFactHandle initialFactHandle,
+                                 final InternalFactHandle initialFactHandle,
                                  final long propagationContext,
                                  final SessionConfiguration config,
                                  final Environment environment,
@@ -347,9 +346,10 @@
         this.sequential = conf.isSequential();
 
         if ( initialFactHandle == null ) {
-            this.initialFactHandle = new InitialFactHandle( handleFactory.newFactHandle( new InitialFactHandleDummyObject(),
-                                                                                         null,
-                                                                                         this ) );
+            this.initialFactHandle = handleFactory.newFactHandle( InitialFactImpl.getInstance(),
+                                                                  null,
+                                                                  this,
+                                                                  this);
         } else {
             this.initialFactHandle = initialFactHandle;
         }
@@ -1142,8 +1142,8 @@
         InternalFactHandle handle;
         handle = this.handleFactory.newFactHandle( object,
                                                    typeConf,
+                                                   this,
                                                    this );
-        handle.setEntryPoint( this );
         this.objectStore.addHandle( handle,
                                     object );
         return handle;
@@ -1264,7 +1264,7 @@
             }
 
             // the handle might have been disconnected, so reconnect if it has
-            if ( factHandle instanceof DisconnectedFactHandle ) {
+            if ( handle.isDisconnected() ) {
                 handle = this.objectStore.reconnect( handle );
             }
 
@@ -1369,7 +1369,7 @@
             this.ruleBase.executeQueuedActions();
 
             // the handle might have been disconnected, so reconnect if it has
-            if ( factHandle instanceof DisconnectedFactHandle ) {
+            if ( ((InternalFactHandle)factHandle).isDisconnected() ) {
                 factHandle = this.objectStore.reconnect( factHandle );
             }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -24,8 +24,10 @@
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.drools.FactHandle;
+import org.drools.core.util.StringUtils;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.RightTuple;
+import org.drools.rule.EntryPoint;
 import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 
 /**
@@ -52,7 +54,7 @@
     private Object                  object;
     private EqualityKey             key;
     private int                     objectHashCode;
-    private transient int           identityHashCode;
+    private int                     identityHashCode;
     
     public RightTuple              firstRightTuple;
     public RightTuple              lastRightTuple;
@@ -70,9 +72,11 @@
 
     public DefaultFactHandle(final int id,
                              final Object object) {
+        // this is only used by tests, left as legacy as so many test rely on it.
         this( id,
               object,
-              id );
+              id,
+              new DisconnectedWorkingMemoryEntryPoint( EntryPoint.DEFAULT.getEntryPointId() ) );
     }
 
     /**
@@ -83,22 +87,33 @@
      */
     public DefaultFactHandle(final int id,
                              final Object object,
-                             final long recency) {
+                             final long recency,
+                             final WorkingMemoryEntryPoint wmEntryPoint) {
         this.id = id;
+        this.entryPoint = wmEntryPoint;
         this.recency = recency;
         this.object = object;
         this.objectHashCode = object.hashCode();
         setIdentityHashCode();
     }
 
-    public DefaultFactHandle(final int id,
-                             final int objectHashCode,
-                             final long recency) {
+    public DefaultFactHandle(String externalFormat) {
+        createFromExternalFormat( externalFormat );
+    }
+
+    public DefaultFactHandle(int id,
+                             String wmEntryPointId,
+                             int identityHashCode,
+                             int objectHashCode,
+                             long recency,
+                             Object object) {
         this.id = id;
+        this.entryPoint = (wmEntryPointId == null) ? null : new DisconnectedWorkingMemoryEntryPoint( wmEntryPointId );
+        this.identityHashCode = identityHashCode;
+        this.objectHashCode = objectHashCode;
         this.recency = recency;
-        this.objectHashCode = objectHashCode;
-        setIdentityHashCode();
-    }
+        this.object = object;
+    }    
         
     // ----------------------------------------------------------------------
     // Instance members
@@ -118,6 +133,24 @@
 
         return this.id == ((DefaultFactHandle) object).id;
     }
+    
+    
+    public void disconnect() {
+        this.key = null;
+        this.firstLeftTuple = null;
+        this.firstRightTuple = null;
+        this.lastLeftTuple = null;
+        this.lastRightTuple = null;
+        this.entryPoint =  (this.entryPoint == null) ? null : new DisconnectedWorkingMemoryEntryPoint( this.entryPoint.getEntryPointId() );
+    }
+    
+    public boolean isDisconnected() {
+        if ( this.entryPoint instanceof DisconnectedWorkingMemoryEntryPoint ) {
+            return true;
+        } else {
+            return false;
+        }
+    }
 
     public int getObjectHashCode() {
         return this.objectHashCode;
@@ -148,7 +181,7 @@
      * @see FactHandle
      */
     public String toExternalForm() {
-        return "0:" + this.id + ":" + getIdentityHashCode() + ":" + getObjectHashCode() + ":" + getRecency();
+        return "0:" + this.id + ":" + getIdentityHashCode() + ":" + getObjectHashCode() + ":" + getRecency() + ":" + ((this.entryPoint != null) ? this.entryPoint.getEntryPointId() : "null" );
     }
 
     @XmlAttribute(name="external-form")
@@ -257,8 +290,7 @@
     }
     
     public DefaultFactHandle clone() {
-        DefaultFactHandle clone =  new DefaultFactHandle(this.id, this.object, this.recency);
-        clone.entryPoint = this.entryPoint;
+        DefaultFactHandle clone =  new DefaultFactHandle(this.id, this.object, this.recency, this.entryPoint);
         clone.key = this.key;
         clone.firstLeftTuple = this.firstLeftTuple;
         clone.lastLeftTuple = this.lastLeftTuple;
@@ -288,4 +320,17 @@
     private Object toExternalString() {
         return "[F:"+this.getId()+" first="+System.identityHashCode( firstLeftTuple )+" last="+System.identityHashCode( lastLeftTuple )+" ]";
     }
+    
+    private void createFromExternalFormat(String externalFormat) {
+        String[] elements = externalFormat.split( ":" );
+        if ( elements.length != 6 ) {
+            throw new IllegalArgumentException( "externalFormat did not have enough elements" );
+        }
+        
+        this.id = Integer.parseInt( elements[1] );
+        this.identityHashCode = Integer.parseInt( elements[2] );
+        this.objectHashCode = Integer.parseInt( elements[3] );
+        this.recency = Long.parseLong( elements[4] );
+        this.entryPoint = StringUtils.isEmpty( elements[5] ) ? null : new DisconnectedWorkingMemoryEntryPoint( elements[5].trim() );
+    }    
 }

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -1,202 +0,0 @@
-/**
- * Copyright 2010 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.
- */
-
-package org.drools.common;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.drools.reteoo.LeftTuple;
-import org.drools.reteoo.RightTuple;
-import org.drools.runtime.rule.WorkingMemoryEntryPoint;
-
- at XmlAccessorType(XmlAccessType.NONE)
- at XmlRootElement(name="fact-handle")
-public class DisconnectedFactHandle
-    implements
-    InternalFactHandle {
-
-    private int  id;
-	private int  identityHashCode;
-    private int  objectHashCode;
-    private long recency;
-    private Object object;
-
-	protected DisconnectedFactHandle() {}
-	
-    public DisconnectedFactHandle(int id,
-                                  int identityHashCode,
-                                  int objectHashCode,
-                                  long recency,
-                                  Object object) {
-        this( id, identityHashCode, objectHashCode, recency );
-        this.object = object;
-    }    
-
-    public DisconnectedFactHandle(int id,
-                                  int identityHashCode,
-                                  int objectHashCode,
-                                  long recency) {
-        this.id = id;
-        this.identityHashCode = identityHashCode;
-        this.objectHashCode = objectHashCode;
-        this.recency = recency;
-    }
-    
-    public DisconnectedFactHandle(String externalFormat) {
-        createFromExternalFormat(externalFormat);
-    }
-
-    public int getId() {
-        return this.id;
-    }
-
-    public int getIdentityHashCode() {
-        return this.identityHashCode;
-    }
-
-    public int getObjectHashCode() {
-        return this.objectHashCode;
-    }
-
-    public long getRecency() {
-        return this.recency;
-    }
-
-    public LeftTuple getLastLeftTuple() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public Object getObject() {
-        if ( this.object != null ) {
-            return this.object;
-        }
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public WorkingMemoryEntryPoint getEntryPoint() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public EqualityKey getEqualityKey() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public RightTuple getRightTuple() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public void invalidate() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public boolean isEvent() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public boolean isValid() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public void setEntryPoint(WorkingMemoryEntryPoint ep) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public void setEqualityKey(EqualityKey key) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public void setFirstLeftTuple(LeftTuple leftTuple) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public void setObject(Object object) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public void setRecency(long recency) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public void setRightTuple(RightTuple rightTuple) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public DefaultFactHandle clone() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public String toExternalForm() {
-        return "0:" + this.id + ":" + this.identityHashCode + ":" + this.objectHashCode + ":" + this.recency;
-    }
-    
-    @XmlAttribute(name="external-form")
-    public String getExternalForm() {
-    	return toExternalForm();
-    }
-    
-    public void setExternalForm(String externalForm) {
-    	createFromExternalFormat(externalForm);
-    }
-    
-    public LeftTuple getFirstLeftTuple() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    
-    public RightTuple getFirstRightTuple() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    
-    public RightTuple getLastRightTuple() {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    
-    public void setFirstRightTuple(RightTuple rightTuple) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    
-    public void setLastLeftTuple(LeftTuple leftTuple) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    
-    public void setLastRightTuple(RightTuple rightTuple) {
-        throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
-    }
-
-    public String toTupleTree(int indent) {
-        return null;
-    }
-    
-    private void createFromExternalFormat(String externalFormat) {
-		String[] elements = externalFormat.split( ":" );
-        if ( elements.length != 5 ) {
-            throw new IllegalArgumentException( "externalFormat did not have enough elements" );
-        }
-        
-        this.id = Integer.parseInt( elements[1] );
-        this.identityHashCode = Integer.parseInt( elements[2] );
-        this.objectHashCode = Integer.parseInt( elements[3] );
-        this.recency = Long.parseLong( elements[4] );
-	}
-
-}

Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedWorkingMemoryEntryPoint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedWorkingMemoryEntryPoint.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedWorkingMemoryEntryPoint.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -0,0 +1,62 @@
+package org.drools.common;
+
+import java.util.Collection;
+
+import org.drools.runtime.ObjectFilter;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+
+public class DisconnectedWorkingMemoryEntryPoint implements WorkingMemoryEntryPoint {
+    
+    private String id;
+    
+    public DisconnectedWorkingMemoryEntryPoint(String id) {
+        this.id = id;
+    }
+
+    public String getEntryPointId() {
+        return this.id;
+    }
+
+    public long getFactCount() {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public FactHandle getFactHandle(Object object) {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public <T extends FactHandle> Collection<T> getFactHandles() {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public <T extends FactHandle> Collection<T> getFactHandles(ObjectFilter filter) {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public Object getObject(FactHandle factHandle) {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public Collection<Object> getObjects() {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public Collection<Object> getObjects(ObjectFilter filter) {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public FactHandle insert(Object object) {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public void retract(FactHandle handle) {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+    public void update(FactHandle handle,
+                       Object object) {
+        throw new UnsupportedOperationException( "This method is not supported for disconnected objects" );
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EventFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EventFactHandle.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EventFactHandle.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -17,6 +17,7 @@
 package org.drools.common;
 
 import org.drools.FactHandle;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 
 public class EventFactHandle extends DefaultFactHandle {
 
@@ -37,31 +38,7 @@
         this.duration = 0;
     }
 
-    public EventFactHandle(final int id,
-                           final Object object) {
-        super( id,
-               object );
-        this.startTimestamp = 0;
-        this.duration = 0;
-    }
-
     /**
-     * Construct.
-     *
-     * @param id
-     *            Handle id.
-     */
-    public EventFactHandle(final int id,
-                           final Object object,
-                           final long recency) {
-        super( id,
-               object,
-               recency );
-        this.startTimestamp = 0;
-        this.duration = 0;
-    }
-
-    /**
      * Creates a new event fact handle.
      *
      * @param id this event fact handle ID
@@ -74,10 +51,12 @@
                            final Object object,
                            final long recency,
                            final long timestamp,
-                           final long duration) {
+                           final long duration,
+                           final WorkingMemoryEntryPoint wmEntryPoint) {
         super( id,
                object,
-               recency );
+               recency,
+               wmEntryPoint );
         this.startTimestamp = timestamp;
         this.duration = duration;
     }
@@ -160,7 +139,8 @@
                                                       getObject(),
                                                       getRecency(),
                                                       startTimestamp,
-                                                      duration );
+                                                      duration,
+                                                      getEntryPoint() );
         clone.activationsCount = activationsCount;
         clone.expired = expired;
         clone.setEntryPoint( getEntryPoint() );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -46,6 +46,8 @@
 
     public int getObjectHashCode();
     
+    public boolean isDisconnected();
+    
     /**
      * Returns true if this FactHandle represents
      * and Event or false if this FactHandle represents

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NamedEntryPoint.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -133,8 +133,8 @@
 
             handle = this.handleFactory.newFactHandle( object,
                                                        typeConf,
-                                                       wm );
-            handle.setEntryPoint( this );
+                                                       wm,
+                                                       this );
             this.objectStore.addHandle( handle,
                                         object );
             if ( dynamic ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectFactory.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectFactory.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -20,9 +20,6 @@
 
 @XmlRegistry
 public class ObjectFactory {
-    public DisconnectedFactHandle createDisconnectedFactHandle() {
-        return new DisconnectedFactHandle();
-    }
     
     public DefaultFactHandle createDefaultFactHandle() {
         return new DefaultFactHandle();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QueryElementFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QueryElementFactHandle.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/QueryElementFactHandle.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -158,4 +158,8 @@
         return null;
     }
 
+    public boolean isDisconnected() {
+        return true;
+    }
+
 }

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	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -30,6 +30,7 @@
 import org.drools.command.impl.KnowledgeCommandContext;
 import org.drools.command.runtime.BatchExecutionCommand;
 import org.drools.command.runtime.rule.FireAllRulesCommand;
+import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.event.AgendaEventSupport;
 import org.drools.event.RuleFlowEventSupport;
@@ -40,8 +41,7 @@
 import org.drools.impl.StatefulKnowledgeSessionImpl.AgendaEventListenerWrapper;
 import org.drools.impl.StatefulKnowledgeSessionImpl.ProcessEventListenerWrapper;
 import org.drools.impl.StatefulKnowledgeSessionImpl.WorkingMemoryEventListenerWrapper;
-import org.drools.reteoo.InitialFactHandle;
-import org.drools.reteoo.InitialFactHandleDummyObject;
+import org.drools.reteoo.InitialFactImpl;
 import org.drools.reteoo.ReteooWorkingMemory;
 import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
 import org.drools.rule.EntryPoint;
@@ -130,11 +130,11 @@
             wm.setAgendaEventSupport( this.agendaEventSupport );
             wm.setRuleFlowEventSupport( this.ruleFlowEventSupport );
 
-            final InitialFactHandleDummyObject initialFact = new InitialFactHandleDummyObject();
-            final InitialFactHandle handle = new InitialFactHandle( wm.getFactHandleFactory().newFactHandle( initialFact,
-                                                                                                             wm.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
-                                                                                                                                                                        initialFact ),
-                                                                                                             wm ) );
+            final InternalFactHandle handle =  wm.getFactHandleFactory().newFactHandle( InitialFactImpl.getInstance(),
+                                                                                        wm.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
+                                                                                                                                                   InitialFactImpl.getInstance() ),
+                                                                                        wm,
+                                                                                        wm);
 
             wm.queueWorkingMemoryAction( new WorkingMemoryReteAssertAction( handle,
                                                                             false,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceChangeScannerImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceChangeScannerImpl.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/io/impl/ResourceChangeScannerImpl.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -34,318 +34,292 @@
 import org.drools.io.ResourceChangeScannerConfiguration;
 import org.drools.io.internal.InternalResource;
 
-public class ResourceChangeScannerImpl implements ResourceChangeScanner {
+public class ResourceChangeScannerImpl
+    implements
+    ResourceChangeScanner {
 
-	private Map<Resource, Set<ResourceChangeNotifier>> resources;
-	private Set<Resource> directories;
-	private SystemEventListener listener;
-	private int interval;
+    private Map<Resource, Set<ResourceChangeNotifier>> resources;
+    private Set<Resource>                              directories;
+    private SystemEventListener                        listener;
+    private int                                        interval;
 
-	public ResourceChangeScannerImpl() {
-		this.listener = SystemEventListenerFactory.getSystemEventListener();
-		this.resources = new HashMap<Resource, Set<ResourceChangeNotifier>>();
-		this.directories = new HashSet<Resource>();
-		this.setInterval(60);
+    public ResourceChangeScannerImpl() {
+        this.listener = SystemEventListenerFactory.getSystemEventListener();
+        this.resources = new HashMap<Resource, Set<ResourceChangeNotifier>>();
+        this.directories = new HashSet<Resource>();
+        this.setInterval( 60 );
         this.listener.info( "ResourceChangeScanner created with default interval=60" );
-	}
+    }
 
-	public void setSystemEventListener(SystemEventListener listener) {
-		this.listener = listener;
-	}
+    public void setSystemEventListener(SystemEventListener listener) {
+        this.listener = listener;
+    }
 
-	public void configure(ResourceChangeScannerConfiguration configuration) {
-        this.setInterval(((ResourceChangeScannerConfigurationImpl) configuration).getInterval());
+    public void configure(ResourceChangeScannerConfiguration configuration) {
+        this.setInterval( ((ResourceChangeScannerConfigurationImpl) configuration).getInterval() );
         this.listener.info( "ResourceChangeScanner reconfigured with interval=" + getInterval() );
 
-		// restart it if it's already running.
-		if (this.scannerScheduler != null && this.scannerScheduler.isRunning()) {
-			stop();
-			start();
-		}
-	}
+        // restart it if it's already running.
+        if ( this.scannerScheduler != null && this.scannerScheduler.isRunning() ) {
+            stop();
+            start();
+        }
+    }
 
-	public ResourceChangeScannerConfiguration newResourceChangeScannerConfiguration() {
-		return new ResourceChangeScannerConfigurationImpl();
-	}
+    public ResourceChangeScannerConfiguration newResourceChangeScannerConfiguration() {
+        return new ResourceChangeScannerConfigurationImpl();
+    }
 
-	public ResourceChangeScannerConfiguration newResourceChangeScannerConfiguration(
-			Properties properties) {
-		return new ResourceChangeScannerConfigurationImpl(properties);
-	}
+    public ResourceChangeScannerConfiguration newResourceChangeScannerConfiguration(Properties properties) {
+        return new ResourceChangeScannerConfigurationImpl( properties );
+    }
 
-	public void subscribeNotifier(ResourceChangeNotifier notifier,
-			Resource resource) {
-		synchronized (this.resources) {
-			if (((InternalResource) resource).isDirectory()) {
-				this.directories.add(resource);
-			}
-			Set<ResourceChangeNotifier> notifiers = this.resources
-					.get(resource);
-			if (notifiers == null) {
-				notifiers = new HashSet<ResourceChangeNotifier>();
-				this.resources.put(resource, notifiers);
-			}
-			this.listener.debug("ResourceChangeScanner subcribing notifier="
-					+ notifier + " to resource=" + resource);
-			notifiers.add(notifier);
-		}
-	}
+    public void subscribeNotifier(ResourceChangeNotifier notifier,
+                                  Resource resource) {
+        synchronized ( this.resources ) {
+            if ( ((InternalResource) resource).isDirectory() ) {
+                this.directories.add( resource );
+            }
+            Set<ResourceChangeNotifier> notifiers = this.resources.get( resource );
+            if ( notifiers == null ) {
+                notifiers = new HashSet<ResourceChangeNotifier>();
+                this.resources.put( resource,
+                                    notifiers );
+            }
+            this.listener.debug( "ResourceChangeScanner subcribing notifier=" + notifier + " to resource=" + resource );
+            notifiers.add( notifier );
+        }
+    }
 
-	public void unsubscribeNotifier(ResourceChangeNotifier notifier,
-			Resource resource) {
-		synchronized (this.resources) {
-			Set<ResourceChangeNotifier> notifiers = this.resources
-					.get(resource);
-			if (notifiers == null) {
-				return;
-			}
-			this.listener.debug("ResourceChangeScanner unsubcribing notifier="
-					+ notifier + " to resource=" + resource);
-			notifiers.remove(notifier);
-			if (notifiers.isEmpty()) {
-				this.listener.debug("ResourceChangeScanner resource="
-						+ resource + " now has no subscribers");
-				this.resources.remove(resource);
-				this.directories.remove(resource); // don't bother with
-				// isDirectory check, as
-				// doing a remove is
-				// harmless if it doesn't
-				// exist
-			}
-		}
-	}
+    public void unsubscribeNotifier(ResourceChangeNotifier notifier,
+                                    Resource resource) {
+        synchronized ( this.resources ) {
+            Set<ResourceChangeNotifier> notifiers = this.resources.get( resource );
+            if ( notifiers == null ) {
+                return;
+            }
+            this.listener.debug( "ResourceChangeScanner unsubcribing notifier=" + notifier + " to resource=" + resource );
+            notifiers.remove( notifier );
+            if ( notifiers.isEmpty() ) {
+                this.listener.debug( "ResourceChangeScanner resource=" + resource + " now has no subscribers" );
+                this.resources.remove( resource );
+                this.directories.remove( resource ); // don't bother with
+                // isDirectory check, as
+                // doing a remove is
+                // harmless if it doesn't
+                // exist
+            }
+        }
+    }
 
-	public void scan() {
-		this.listener.debug("ResourceChangeScanner attempt to scan "
-				+ this.resources.size() + " resources");
+    public void scan() {
+        this.listener.debug( "ResourceChangeScanner attempt to scan " + this.resources.size() + " resources" );
 
-		synchronized (this.resources) {
-			Map<ResourceChangeNotifier, ChangeSet> notifications = new HashMap<ResourceChangeNotifier, ChangeSet>();
+        synchronized ( this.resources ) {
+            Map<ResourceChangeNotifier, ChangeSet> notifications = new HashMap<ResourceChangeNotifier, ChangeSet>();
 
-			List<Resource> removed = new ArrayList<Resource>();
+            List<Resource> removed = new ArrayList<Resource>();
 
-			// detect modified and added
-			for (Resource resource : this.directories) {
-				this.listener.debug("ResourceChangeScanner scanning directory="
-						+ resource);
-				for (Resource child : ((InternalResource) resource)
-						.listResources()) {
-					if (((InternalResource) child).isDirectory()) {
-						continue; // ignore sub directories
-					}
-					if (!this.resources.containsKey(child)) {
+            // detect modified and added
+            for ( Resource resource : this.directories ) {
+                this.listener.debug( "ResourceChangeScanner scanning directory=" + resource );
+                for ( Resource child : ((InternalResource) resource).listResources() ) {
+                    if ( ((InternalResource) child).isDirectory() ) {
+                        continue; // ignore sub directories
+                    }
+                    if ( !this.resources.containsKey( child ) ) {
 
-						this.listener
-								.debug("ResourceChangeScanner new resource="
-										+ child);
-						// child is new
-						((InternalResource) child)
-								.setResourceType(((InternalResource) resource)
-										.getResourceType());
-						Set<ResourceChangeNotifier> notifiers = this.resources
-								.get(resource); // get notifiers for this
-						// directory
-						for (ResourceChangeNotifier notifier : notifiers) {
-							ChangeSetImpl changeSet = (ChangeSetImpl) notifications
-									.get(notifier);
-							if (changeSet == null) {
-								// lazy initialise changeSet
-								changeSet = new ChangeSetImpl();
-								notifications.put(notifier, changeSet);
-							}
-							if (changeSet.getResourcesAdded().isEmpty()) {
-								changeSet
-										.setResourcesAdded(new ArrayList<Resource>());
-							}
-							changeSet.getResourcesAdded().add(child);
-							notifier.subscribeChildResource(resource, child);
-						}
-					}
-				}
-			}
+                        this.listener.debug( "ResourceChangeScanner new resource=" + child );
+                        // child is new
+                        ((InternalResource) child).setResourceType( ((InternalResource) resource).getResourceType() );
+                        Set<ResourceChangeNotifier> notifiers = this.resources.get( resource ); // get notifiers for this
+                        // directory
+                        for ( ResourceChangeNotifier notifier : notifiers ) {
+                            ChangeSetImpl changeSet = (ChangeSetImpl) notifications.get( notifier );
+                            if ( changeSet == null ) {
+                                // lazy initialise changeSet
+                                changeSet = new ChangeSetImpl();
+                                notifications.put( notifier,
+                                                   changeSet );
+                            }
+                            if ( changeSet.getResourcesAdded().isEmpty() ) {
+                                changeSet.setResourcesAdded( new ArrayList<Resource>() );
+                            }
+                            changeSet.getResourcesAdded().add( child );
+                            notifier.subscribeChildResource( resource,
+                                                             child );
+                        }
+                    }
+                }
+            }
 
-			for (Entry<Resource, Set<ResourceChangeNotifier>> entry : this.resources
-					.entrySet()) {
-				Resource resource = entry.getKey();
-				Set<ResourceChangeNotifier> notifiers = entry.getValue();
+            for ( Entry<Resource, Set<ResourceChangeNotifier>> entry : this.resources.entrySet() ) {
+                Resource resource = entry.getKey();
+                Set<ResourceChangeNotifier> notifiers = entry.getValue();
 
-				if (!((InternalResource) resource).isDirectory()) {
-					// detect if Resource has been removed
-					long lastModified = ((InternalResource) resource)
-							.getLastModified();
-					long lastRead = ((InternalResource) resource).getLastRead();
-					if (lastModified == 0) {
-						this.listener
-								.debug("ResourceChangeScanner removed resource="
-										+ resource);
-						removed.add(resource);
-						// resource is no longer present
-						// iterate notifiers for this resource and add to each
-						// removed
-						for (ResourceChangeNotifier notifier : notifiers) {
-							ChangeSetImpl changeSet = (ChangeSetImpl) notifications
-									.get(notifier);
-							if (changeSet == null) {
-								// lazy initialise changeSet
-								changeSet = new ChangeSetImpl();
-								notifications.put(notifier, changeSet);
-							}
-							if (changeSet.getResourcesRemoved().isEmpty()) {
-								changeSet
-										.setResourcesRemoved(new ArrayList<Resource>());
-							}
-							changeSet.getResourcesRemoved().add(resource);
-						}
-					} else if (lastRead < lastModified && lastRead >= 0) {
-						this.listener
-								.debug("ResourceChangeScanner modified resource="
-										+ resource
-										+ " : "
-										+ lastRead
-										+ " : "
-										+ lastModified);
-						// it's modified
-						// iterate notifiers for this resource and add to each
-						// modified
-						for (ResourceChangeNotifier notifier : notifiers) {
-							ChangeSetImpl changeSet = (ChangeSetImpl) notifications
-									.get(notifier);
-							if (changeSet == null) {
-								// lazy initialise changeSet
-								changeSet = new ChangeSetImpl();
-								notifications.put(notifier, changeSet);
-							}
-							if (changeSet.getResourcesModified().isEmpty()) {
-								changeSet
-										.setResourcesModified(new ArrayList<Resource>());
-							}
-							changeSet.getResourcesModified().add(resource);
-						}
-					}
-				}
-			}
+                if ( !((InternalResource) resource).isDirectory() ) {
+                    // detect if Resource has been removed
+                    long lastModified = ((InternalResource) resource).getLastModified();
+                    long lastRead = ((InternalResource) resource).getLastRead();
+                    if ( lastModified == 0 ) {
+                        this.listener.debug( "ResourceChangeScanner removed resource=" + resource );
+                        removed.add( resource );
+                        // resource is no longer present
+                        // iterate notifiers for this resource and add to each
+                        // removed
+                        for ( ResourceChangeNotifier notifier : notifiers ) {
+                            ChangeSetImpl changeSet = (ChangeSetImpl) notifications.get( notifier );
+                            if ( changeSet == null ) {
+                                // lazy initialise changeSet
+                                changeSet = new ChangeSetImpl();
+                                notifications.put( notifier,
+                                                   changeSet );
+                            }
+                            if ( changeSet.getResourcesRemoved().isEmpty() ) {
+                                changeSet.setResourcesRemoved( new ArrayList<Resource>() );
+                            }
+                            changeSet.getResourcesRemoved().add( resource );
+                        }
+                    } else if ( lastRead < lastModified && lastRead >= 0 ) {
+                        this.listener.debug( "ResourceChangeScanner modified resource=" + resource + " : " + lastRead + " : " + lastModified );
+                        // it's modified
+                        // iterate notifiers for this resource and add to each
+                        // modified
+                        for ( ResourceChangeNotifier notifier : notifiers ) {
+                            ChangeSetImpl changeSet = (ChangeSetImpl) notifications.get( notifier );
+                            if ( changeSet == null ) {
+                                // lazy initialise changeSet
+                                changeSet = new ChangeSetImpl();
+                                notifications.put( notifier,
+                                                   changeSet );
+                            }
+                            if ( changeSet.getResourcesModified().isEmpty() ) {
+                                changeSet.setResourcesModified( new ArrayList<Resource>() );
+                            }
+                            changeSet.getResourcesModified().add( resource );
+                        }
+                    }
+                }
+            }
 
-			// now iterate and removed the removed resources, we do this so as
-			// not to mutate the foreach loop while iterating
-			for (Resource resource : removed) {
-				this.resources.remove(resource);
-			}
+            // now iterate and removed the removed resources, we do this so as
+            // not to mutate the foreach loop while iterating
+            for ( Resource resource : removed ) {
+                this.resources.remove( resource );
+            }
 
-			for (Entry<ResourceChangeNotifier, ChangeSet> entry : notifications
-					.entrySet()) {
-				ResourceChangeNotifier notifier = entry.getKey();
-				ChangeSet changeSet = entry.getValue();
-				notifier.publishChangeSet(changeSet);
-			}
-		}
-	}
-
-	public void setInterval(int interval) {
-            if (interval <= 0 ){
-                throw new IllegalArgumentException("Invalid interval time: "+interval+". It should be a positive number bigger than 0");
+            for ( Entry<ResourceChangeNotifier, ChangeSet> entry : notifications.entrySet() ) {
+                ResourceChangeNotifier notifier = entry.getKey();
+                ChangeSet changeSet = entry.getValue();
+                notifier.publishChangeSet( changeSet );
             }
+        }
+    }
 
-		this.interval = interval;
-		this.listener.info("ResourceChangeScanner reconfigured with interval="
-				+ getInterval());
+    public void setInterval(int interval) {
+        if ( interval <= 0 ) {
+            throw new IllegalArgumentException( "Invalid interval time: " + interval + ". It should be a positive number bigger than 0" );
+        }
 
-		if (this.scannerScheduler != null && this.scannerScheduler.isRunning()) {
-			stop();
-			start();
-		}
-	}
+        this.interval = interval;
+        this.listener.info( "ResourceChangeScanner reconfigured with interval=" + getInterval() );
 
-	public int getInterval() {
-		return this.interval;
-	}
+        if ( this.scannerScheduler != null && this.scannerScheduler.isRunning() ) {
+            stop();
+            start();
+        }
+    }
 
-	public void start() {
-		this.scannerScheduler = new ProcessChangeSet(this.resources, this,
-				this.listener, this.interval);
-		thread = new Thread(this.scannerScheduler);
-		thread.start();
-	}
+    public int getInterval() {
+        return this.interval;
+    }
 
-	public void stop() {
-		if (this.scannerScheduler != null && this.scannerScheduler.isRunning()) {
-			this.scannerScheduler.stop();
-			this.thread.interrupt();
-			this.scannerScheduler = null;
-		}
-	}
+    public void start() {
+        this.scannerScheduler = new ProcessChangeSet( this.resources,
+                                                      this,
+                                                      this.listener,
+                                                      this.interval );
+        thread = new Thread( this.scannerScheduler );
+        thread.start();
+    }
 
-	public void reset() {
-		this.resources.clear();
-		this.directories.clear();
-	}
+    public void stop() {
+        if ( this.scannerScheduler != null && this.scannerScheduler.isRunning() ) {
+            this.scannerScheduler.stop();
+            this.thread.interrupt();
+            this.scannerScheduler = null;
+        }
+    }
 
-	private Thread thread;
-	private ProcessChangeSet scannerScheduler;
+    public void reset() {
+        this.resources.clear();
+        this.directories.clear();
+    }
 
-	public static class ProcessChangeSet implements Runnable {
-		private volatile boolean scan;
-		private ResourceChangeScannerImpl scanner;
-		private long interval;
-		private Map<Resource, Set<ResourceChangeNotifier>> resources;
-		private SystemEventListener listener;
+    private Thread           thread;
+    private ProcessChangeSet scannerScheduler;
 
-		ProcessChangeSet(Map<Resource, Set<ResourceChangeNotifier>> resources,
-				ResourceChangeScannerImpl scanner,
-				SystemEventListener listener, int interval) {
-			this.resources = resources;
-			this.scanner = scanner;
-			this.listener = listener;
-			this.interval = interval;
-			this.scan = true;
-		}
+    public static class ProcessChangeSet
+        implements
+        Runnable {
+        private volatile boolean                           scan;
+        private ResourceChangeScannerImpl                  scanner;
+        private long                                       interval;
+        private Map<Resource, Set<ResourceChangeNotifier>> resources;
+        private SystemEventListener                        listener;
 
-		public int getInterval() {
-			return (int) this.interval;
-		}
+        ProcessChangeSet(Map<Resource, Set<ResourceChangeNotifier>> resources,
+                         ResourceChangeScannerImpl scanner,
+                         SystemEventListener listener,
+                         int interval) {
+            this.resources = resources;
+            this.scanner = scanner;
+            this.listener = listener;
+            this.interval = interval;
+            this.scan = true;
+        }
 
-		public void stop() {
-			this.scan = false;
-		}
+        public int getInterval() {
+            return (int) this.interval;
+        }
 
-		public boolean isRunning() {
-			return this.scan;
-		}
+        public void stop() {
+            this.scan = false;
+        }
 
-		public void run() {
-			synchronized (this) {
-				if (this.scan) {
-					this.listener
-							.info("ResourceChangeNotification scanner has started");
-				}
-				while (this.scan) {
-					Exception exception = null;
-					// System.out.println( "BEFORE : sync this.resources" );
-					synchronized (this.resources) {
-						// System.out.println( "DURING : sync this.resources" );
-						// lock the resources, as we don't want this modified
-						// while processing
-						this.scanner.scan();
-					}
-					// System.out.println( "AFTER : SCAN" );
-					try {
-						this.listener
-								.debug("ResourceChangeScanner thread is waiting for "
-										+ this.interval + " seconds.");
-						wait(this.interval * 1000);
-					} catch (InterruptedException e) {
-						exception = e;
-					}
+        public boolean isRunning() {
+            return this.scan;
+        }
 
-					if (this.scan && exception != null) {
-						this.listener
-								.exception(new RuntimeException(
-										"ResourceChangeNotification ChangeSet scanning thread was interrupted, but shutdown was not requested",
-										exception));
-					}
-				}
-				this.listener
-						.info("ResourceChangeNotification scanner has stopped");
-			}
-		}
-	}
+        public void run() {
+            synchronized ( this ) {
+                if ( this.scan ) {
+                    this.listener.info( "ResourceChangeNotification scanner has started" );
+                }
+                while ( this.scan ) {
+                    Exception exception = null;
+                    // System.out.println( "BEFORE : sync this.resources" );
+                    synchronized ( this.resources ) {
+                        // System.out.println( "DURING : sync this.resources" );
+                        // lock the resources, as we don't want this modified
+                        // while processing
+                        this.scanner.scan();
+                    }
+                    // System.out.println( "AFTER : SCAN" );
+                    try {
+                        this.listener.debug( "ResourceChangeScanner thread is waiting for " + this.interval + " seconds." );
+                        wait( this.interval * 1000 );
+                    } catch ( InterruptedException e ) {
+                        exception = e;
+                    }
+
+                    if ( this.scan && exception != null ) {
+                        this.listener.exception( new RuntimeException( "ResourceChangeNotification ChangeSet scanning thread was interrupted, but shutdown was not requested",
+                                                                       exception ) );
+                    }
+                }
+                this.listener.info( "ResourceChangeNotification scanner has stopped" );
+            }
+        }
+    }
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/InputMarshaller.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -32,6 +32,7 @@
 import org.drools.common.BinaryHeapQueueAgendaGroup;
 import org.drools.common.DefaultAgenda;
 import org.drools.common.DefaultFactHandle;
+import org.drools.common.DisconnectedWorkingMemoryEntryPoint;
 import org.drools.common.EqualityKey;
 import org.drools.common.InternalAgendaGroup;
 import org.drools.common.InternalFactHandle;
@@ -55,8 +56,7 @@
 import org.drools.reteoo.BetaMemory;
 import org.drools.reteoo.BetaNode;
 import org.drools.reteoo.EntryPointNode;
-import org.drools.reteoo.InitialFactHandle;
-import org.drools.reteoo.InitialFactHandleDummyObject;
+import org.drools.reteoo.InitialFactImpl;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.LeftTupleSink;
 import org.drools.reteoo.NodeTypeEnums;
@@ -74,6 +74,7 @@
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 import org.drools.runtime.Environment;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.spi.Activation;
 import org.drools.spi.AgendaGroup;
 import org.drools.spi.FactHandleFactory;
@@ -170,9 +171,11 @@
         FactHandleFactory handleFactory = context.ruleBase.newFactHandleFactory( context.readInt(),
                                                                                  context.readLong() );
 
-        InitialFactHandle initialFactHandle = new InitialFactHandle( new DefaultFactHandle( context.readInt(), //id
-                                                                                            new InitialFactHandleDummyObject(),
-                                                                                            context.readLong() ) ); //recency        
+        InternalFactHandle initialFactHandle = new DefaultFactHandle( context.readInt(), //id
+                                                                      InitialFactImpl.getInstance(),
+                                                                      context.readLong(),
+                                                                      null);
+        
         context.handles.put( initialFactHandle.getId(),
                              initialFactHandle );
 
@@ -191,6 +194,7 @@
                                                                    config,  
                                                                    agenda,
                                                                    environment );
+        initialFactHandle.setEntryPoint( session.getEntryPoints().get( EntryPoint.DEFAULT.getEntryPointId() ) );
 
         // RuleFlowGroups need to reference the session
         for ( RuleFlowGroup group : agenda.getRuleFlowGroupsMap().values() ) {
@@ -363,16 +367,20 @@
         int strategyIndex = context.stream.readInt();
         ObjectMarshallingStrategy strategy = context.resolverStrategyFactory.getStrategy( strategyIndex );
         Object object = strategy.read( context.stream );
+        
+        WorkingMemoryEntryPoint entryPoint = null;
+        if(context.readBoolean()){
+            String entryPointId = context.readUTF();
+            if(entryPointId != null && !entryPointId.equals("")){
+                entryPoint = context.wm.getEntryPoints().get(entryPointId);
+            } 
+        }        
 
         InternalFactHandle handle = new DefaultFactHandle( id,
                                                            object,
-                                                           recency );
-        if(context.readBoolean()){
-            String  entryPoint = context.readUTF();
-            if(entryPoint != null && !entryPoint.equals("")){
-                handle.setEntryPoint(context.wm.getEntryPoints().get(entryPoint));
-            }
-        }
+                                                           recency,
+                                                           entryPoint );
+
         return handle;
     }
 
@@ -583,7 +591,8 @@
                 long recency = stream.readLong();
                 InternalFactHandle handle = new DefaultFactHandle( id,
                                                                    parentLeftTuple,
-                                                                   recency );
+                                                                   recency,
+                                                                   context.wm.getEntryPoints().get( EntryPoint.DEFAULT.getEntryPointId() ) );
                 memory.put( parentLeftTuple, handle );
                 
                 readRightTuples( handle, context );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/OutputMarshaller.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -52,6 +52,7 @@
 import org.drools.process.instance.timer.TimerInstance;
 import org.drools.process.instance.timer.TimerManager;
 import org.drools.reteoo.BetaNode;
+import org.drools.reteoo.InitialFactImpl;
 import org.drools.reteoo.LeftTuple;
 import org.drools.reteoo.LeftTupleSink;
 import org.drools.reteoo.NodeTypeEnums;
@@ -342,7 +343,7 @@
         ObjectOutputStream stream = context.stream;
         InternalRuleBase ruleBase = context.ruleBase;
 
-        ObjectTypeNode initialFactNode = ruleBase.getRete().getEntryPointNode( EntryPoint.DEFAULT ).getObjectTypeNodes().get( new ClassObjectType( InitialFact.class ) );
+        ObjectTypeNode initialFactNode = ruleBase.getRete().getEntryPointNode( EntryPoint.DEFAULT ).getObjectTypeNodes().get( new ClassObjectType( InitialFactImpl.class ) );
 
         // do we write the fact to the objecttypenode memory
         if ( initialFactNode != null ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -594,7 +594,8 @@
             final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( result,
                                                                                                   workingMemory.getObjectTypeConfigurationRegistry().getObjectTypeConf( context.getEntryPoint(),
                                                                                                                                                                         result ),
-                                                                                                  workingMemory ); // so far, result is not an event
+                                                                                                  workingMemory,
+                                                                                                  null ); // so far, result is not an event
 
             accctx.result = new RightTuple( handle,
                                             this );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -129,7 +129,8 @@
 
             final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( object,
                                                                                                   null, // set this to null, otherwise it uses the driver fact's entrypoint
-                                                                                                  workingMemory );
+                                                                                                  workingMemory,
+                                                                                                  null );
 
             RightTuple rightTuple = new RightTuple( handle,
                                                     null );
@@ -216,7 +217,8 @@
                 // new match, propagate assert
                 final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( object,
                                                                                                       null, // set this to null, otherwise it uses the driver fact's entrypoint
-                                                                                                      workingMemory );
+                                                                                                      workingMemory,
+                                                                                                      null );
                 rightTuple = new RightTuple( handle,
                                              null );
             } else {

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactHandle.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactHandle.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -1,99 +0,0 @@
-/**
- * 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.
- */
-
-package org.drools.reteoo;
-
-import org.drools.common.DefaultFactHandle;
-import org.drools.common.InternalFactHandle;
-
-public class InitialFactHandle extends DefaultFactHandle {
-    /**
-     *
-     */
-    private static final long  serialVersionUID = 400L;
-
-    private InternalFactHandle delegate;
-
-    private Object             object;
-
-    public InitialFactHandle() {
-
-    }
-
-    public InitialFactHandle(final InternalFactHandle delegate) {
-        super();
-        this.delegate = delegate;
-        this.object = InitialFactImpl.getInstance();
-    }
-
-    // ----------------------------------------------------------------------
-    // Instance members
-    // ----------------------------------------------------------------------
-
-    /**
-     * @see Object
-     */
-    public boolean equals(final Object object) {
-        return this.delegate.equals( object );
-    }
-
-    /**
-     * @see Object
-     */
-    public int hashCode() {
-        return this.delegate.hashCode();
-    }
-
-    /**
-     * @see Object
-     */
-    public String toString() {
-        return toExternalForm();
-    }
-
-    public long getRecency() {
-        return this.delegate.getRecency();
-    }
-
-    public void setRecency(final long recency) {
-        this.delegate.setRecency( recency );
-    }
-
-    public int getId() {
-        return this.delegate.getId();
-    }
-
-    public void invalidate() {
-        this.delegate.invalidate();
-    }
-
-    public Object getObject() {
-        return this.object;
-    }
-
-    public void setObject(final Object object) {
-        // do nothign
-    }
-
-    public String toExternalForm() {
-        return "InitialFact";
-    }
-    
-    public InitialFactHandle clone() {
-        return this;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactHandleDummyObject.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactHandleDummyObject.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/InitialFactHandleDummyObject.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -1,38 +0,0 @@
-/**
- * Copyright 2010 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.
- */
-
-/**
- * 
- */
-package org.drools.reteoo;
-
-import java.io.Externalizable;
-import java.io.IOException;
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-public class InitialFactHandleDummyObject
-    implements
-    Externalizable {
-    private static final long serialVersionUID = 400L;
-
-    public void readExternal(ObjectInput in) throws IOException,
-                                            ClassNotFoundException {
-    }
-
-    public void writeExternal(ObjectOutput out) throws IOException {
-    }
-}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryElementNode.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -137,7 +137,8 @@
         InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( queryObject,
                                                                                         workingMemory.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
                                                                                                                                                               queryObject ),
-                                                                                        workingMemory );
+                                                                                        workingMemory,
+                                                                                        null );
 
         workingMemory.insert( handle,
                               queryObject,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooFactHandleFactory.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -24,6 +24,7 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.rule.TypeDeclaration;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 import org.drools.spi.FactHandleFactory;
 
 public class ReteooFactHandleFactory extends AbstractFactHandleFactory {
@@ -47,7 +48,8 @@
                                                      final Object object,
                                                      final long recency,
                                                      final ObjectTypeConf conf,
-                                                     final InternalWorkingMemory workingMemory) {
+                                                     final InternalWorkingMemory workingMemory,
+                                                     final WorkingMemoryEntryPoint wmEntryPoint) {
         if ( conf != null && conf.isEvent() ) {
             TypeDeclaration type = conf.getTypeDeclaration();
             long timestamp;
@@ -71,11 +73,13 @@
                                         object,
                                         recency,
                                         timestamp,
-                                        duration );
+                                        duration,
+                                        wmEntryPoint );
         } else {
             return new DefaultFactHandle( id,
                                           object,
-                                          recency );
+                                          recency,
+                                          wmEntryPoint );
         }
     }
 

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	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -29,6 +29,7 @@
 import org.drools.SessionConfiguration;
 import org.drools.StatefulSession;
 import org.drools.common.InternalAgenda;
+import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.concurrent.AssertObject;
 import org.drools.concurrent.AssertObjects;
@@ -87,7 +88,7 @@
                                  final InternalRuleBase ruleBase,
                                  final ExecutorService executorService,
                                  final FactHandleFactory handleFactory,
-                                 final InitialFactHandle initialFactHandle,
+                                 final InternalFactHandle initialFactHandle,
                                  final long propagationContext,
                                  final SessionConfiguration config,
                                  final InternalAgenda agenda,

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	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -29,6 +29,7 @@
 import org.drools.StatelessSession;
 import org.drools.StatelessSessionResult;
 import org.drools.base.MapGlobalResolver;
+import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalRuleBase;
 import org.drools.common.InternalStatelessSession;
 import org.drools.common.InternalWorkingMemory;
@@ -115,11 +116,11 @@
 
             wm.setGlobalResolver( this.globalResolver );
 
-            final InitialFactHandleDummyObject initialFact = new InitialFactHandleDummyObject();
-            final InitialFactHandle handle = new InitialFactHandle( wm.getFactHandleFactory().newFactHandle( initialFact,
-                                                                                                             wm.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
-                                                                                                                                                                        initialFact ),
-                                                                                                             wm ) );
+            final InternalFactHandle handle =  wm.getFactHandleFactory().newFactHandle( InitialFactImpl.getInstance(),
+                                                                                       wm.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
+                                                                                                                                                  InitialFactImpl.getInstance() ),
+                                                                                       wm,
+                                                                                       wm);
 
             wm.queueWorkingMemoryAction( new WorkingMemoryReteAssertAction( handle,
                                                                             false,

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	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -125,7 +125,7 @@
     public ReteooWorkingMemory(final int id,
                                final InternalRuleBase ruleBase,
                                final FactHandleFactory handleFactory,
-                               final InitialFactHandle initialFactHandle,
+                               final InternalFactHandle initialFactHandle,
                                final long propagationContext,
                                final SessionConfiguration config,
                                final InternalAgenda agenda,
@@ -174,6 +174,7 @@
             InternalFactHandle handle = this.handleFactory.newFactHandle( queryObject,
                                                                           this.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
                                                                                                                                        queryObject ),
+                                                                          this,
                                                                           this );
 
             insert( handle,
@@ -226,6 +227,7 @@
             InternalFactHandle handle = this.handleFactory.newFactHandle( queryObject,
                                                                           this.getObjectTypeConfigurationRegistry().getObjectTypeConf( EntryPoint.DEFAULT,
                                                                                                                                        queryObject ),
+                                                                          this,
                                                                           this );
 
             insert( handle,

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -122,7 +122,8 @@
         final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( tuple,
                                                                                               workingMemory.getObjectTypeConfigurationRegistry().getObjectTypeConf( context.getEntryPoint(),
                                                                                                                                                                     tuple ),
-                                                                                              workingMemory );
+                                                                                              workingMemory,
+                                                                                              null );
 
         if ( this.tupleMemoryEnabled ) {
             final ObjectHashMap memory = (ObjectHashMap) workingMemory.getNodeMemory( this );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamHelper.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamHelper.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -33,7 +33,6 @@
 import org.drools.command.runtime.rule.RetractCommand;
 import org.drools.command.runtime.rule.ModifyCommand.SetterImpl;
 import org.drools.common.DefaultFactHandle;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.runtime.impl.ExecutionResultImpl;
 import org.drools.runtime.rule.impl.FlatQueryResults;
 import org.drools.runtime.rule.impl.NativeQueryResults;
@@ -82,7 +81,5 @@
                        NativeQueryResults.class );
         xstream.alias( "fact-handle",
                        DefaultFactHandle.class );
-        xstream.alias( "fact-handle",
-                       DisconnectedFactHandle.class );
     }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamJSon.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamJSon.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamJSon.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -42,7 +42,7 @@
 import org.drools.command.runtime.rule.ModifyCommand;
 import org.drools.command.runtime.rule.QueryCommand;
 import org.drools.command.runtime.rule.RetractCommand;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.impl.ExecutionResultImpl;
 import org.drools.runtime.rule.FactHandle;
@@ -185,7 +185,7 @@
                 }
                 reader.moveUp();
             }
-            return new RowItemContainer( new DisconnectedFactHandle( externalForm ),
+            return new RowItemContainer( new DefaultFactHandle( externalForm ),
                                          object );
         }
 
@@ -361,7 +361,7 @@
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext unmarshallingContext) {
             reader.moveDown();
-            DisconnectedFactHandle factHandle = new DisconnectedFactHandle( reader.getValue() );
+            DefaultFactHandle factHandle = new DefaultFactHandle( reader.getValue() );
             reader.moveUp();
             return factHandle;
         }
@@ -458,7 +458,7 @@
                 reader.moveDown();
                 String name = reader.getNodeName();
                 if ( "fact-handle".equals( name ) ) {
-                    factHandle = new DisconnectedFactHandle( reader.getValue() );
+                    factHandle = new DefaultFactHandle( reader.getValue() );
                 } else if ( "out-identifier".equals( "out-identifier" ) ) {
                     outIdentifier = reader.getValue();
                 }
@@ -497,7 +497,7 @@
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
             reader.moveDown();
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getValue() );
+            FactHandle factHandle = new DefaultFactHandle( reader.getValue() );
             reader.moveUp();
 
             Command cmd = CommandFactory.newRetract( factHandle );
@@ -539,7 +539,7 @@
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
             reader.moveDown();
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getValue() );
+            FactHandle factHandle = new DefaultFactHandle( reader.getValue() );
             reader.moveUp();
 
             List<Setter> setters = new ArrayList();
@@ -747,7 +747,7 @@
                         reader.moveUp();
 
                         facts.put( identifier,
-                                   new DisconnectedFactHandle( externalForm ) );
+                                   new DefaultFactHandle( externalForm ) );
                     } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
                         List list = new ArrayList();
                         String identifier = null;
@@ -757,7 +757,7 @@
                             reader.moveUp();
                             while ( reader.hasMoreChildren() ) {
                                 reader.moveDown();
-                                FactHandle factHandle = new DisconnectedFactHandle( (String) readItem( reader,
+                                FactHandle factHandle = new DefaultFactHandle( (String) readItem( reader,
                                                                                                        context,
                                                                                                        null ) );
                                 list.add( factHandle );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamXML.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamXML.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/runtime/help/impl/XStreamXML.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -44,7 +44,7 @@
 import org.drools.command.runtime.rule.ModifyCommand;
 import org.drools.command.runtime.rule.QueryCommand;
 import org.drools.command.runtime.rule.RetractCommand;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.DefaultFactHandle;
 import org.drools.rule.Declaration;
 import org.drools.runtime.ExecutionResults;
 import org.drools.runtime.impl.ExecutionResultImpl;
@@ -204,7 +204,7 @@
 
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getAttribute( "fact-handle" ) );
+            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
 
             List<Setter> setters = new ArrayList();
             while ( reader.hasMoreChildren() ) {
@@ -245,7 +245,7 @@
 
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getAttribute( "fact-handle" ) );
+            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
 
             Command cmd = CommandFactory.newRetract( factHandle );
 
@@ -396,7 +396,7 @@
 
         public Object unmarshal(HierarchicalStreamReader reader,
                                 UnmarshallingContext context) {
-            FactHandle factHandle = new DisconnectedFactHandle( reader.getAttribute( "fact-handle" ) );
+            FactHandle factHandle = new DefaultFactHandle( reader.getAttribute( "fact-handle" ) );
             String identifierOut = reader.getAttribute( "out-identifier" );
 
             GetObjectCommand cmd = new GetObjectCommand( factHandle );
@@ -856,13 +856,13 @@
                 } else if ( reader.getNodeName().equals( "fact-handle" ) ) {
                     String identifier = reader.getAttribute( "identifier" );
                     facts.put( identifier,
-                               new DisconnectedFactHandle( reader.getAttribute( "external-form" ) ) );
+                               new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
                 } else if ( reader.getNodeName().equals( "fact-handles" ) ) {
                     String identifier = reader.getAttribute( "identifier" );
                     List<FactHandle> list = new ArrayList();
                     while ( reader.hasMoreChildren() ) {
                         reader.moveDown();
-                        list.add( new DisconnectedFactHandle( reader.getAttribute( "external-form" ) ) );
+                        list.add( new DefaultFactHandle( reader.getAttribute( "external-form" ) ) );
                         reader.moveUp();
                     }
                     facts.put( identifier,
@@ -968,7 +968,7 @@
                     reader.moveUp();
 
                     reader.moveDown();
-                    FactHandle handle = new DisconnectedFactHandle( reader.getAttribute( "external-form" ) );
+                    FactHandle handle = new DefaultFactHandle( reader.getAttribute( "external-form" ) );
                     reader.moveUp();
 
                     objects.add( object );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -20,6 +20,7 @@
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.reteoo.ObjectTypeConf;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
 
 /**
  * Factory Interface to return new <code>FactHandle</code>s
@@ -35,7 +36,7 @@
      * 
      * @return The handle.
      */
-    public InternalFactHandle newFactHandle(Object object, ObjectTypeConf conf, InternalWorkingMemory workingMemory );
+    public InternalFactHandle newFactHandle(Object object, ObjectTypeConf conf, InternalWorkingMemory workingMemory, WorkingMemoryEntryPoint wmEntryPoint );
     
     /**
      * Increases the recency of the FactHandle

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/DroolsJaxbContextHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/DroolsJaxbContextHelper.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/DroolsJaxbContextHelper.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -38,7 +38,6 @@
 import org.drools.command.runtime.rule.RetractCommand;
 import org.drools.command.runtime.rule.ModifyCommand.SetterImpl;
 import org.drools.common.DefaultFactHandle;
-import org.drools.common.DisconnectedFactHandle;
 import org.drools.runtime.impl.ExecutionResultImpl;
 import org.drools.runtime.rule.impl.FlatQueryResults;
 
@@ -65,7 +64,6 @@
 														ExecutionResultImpl.class.getName(),
 														DefaultFactHandle.class.getName(),
 														JaxbListWrapper.class.getName(),
-														DisconnectedFactHandle.class.getName(),
 														FlatQueryResults.class.getName(),
 														CompleteWorkItemCommand.class.getName(),
 														GetObjectsCommand.class.getName()

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/xml/jaxb/util/JaxbMapAdapter.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -25,7 +25,7 @@
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 
 import org.drools.FactHandle;
-import org.drools.common.DisconnectedFactHandle;
+import org.drools.common.InternalFactHandle;
 import org.drools.runtime.rule.impl.FlatQueryResults;
 import org.drools.runtime.rule.impl.NativeQueryResults;
 
@@ -45,10 +45,10 @@
 		    
 		    if ( obj instanceof NativeQueryResults ) {
 		        obj = new FlatQueryResults( ((NativeQueryResults )obj).getResults() );
-		    } else if (obj instanceof FactHandle && !(obj instanceof DisconnectedFactHandle)) {
-		        obj = new DisconnectedFactHandle(((FactHandle) obj).toExternalForm());
+		    } else if (obj instanceof FactHandle ) {
+		        obj = ((InternalFactHandle)obj).toExternalForm();
 	        } else if (List.class.isAssignableFrom(vClass) && !JaxbListWrapper.class.equals(vClass)) {    
-	                obj = new JaxbListWrapper( ((List<?>) obj).toArray( new Object[((List<?>) obj).size()]) );;
+	            obj = new JaxbListWrapper( ((List<?>) obj).toArray( new Object[((List<?>) obj).size()]) );;
 	        }
 			ret.add(new JaxbPair(entry.getKey(), obj));
 		}

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/base/TemporalEvaluatorFactoryTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -48,6 +48,7 @@
 import org.drools.base.evaluators.DuringEvaluatorDefinition;
 import org.drools.base.evaluators.EvaluatorDefinition;
 import org.drools.base.evaluators.EvaluatorRegistry;
+import org.drools.common.DisconnectedWorkingMemoryEntryPoint;
 import org.drools.common.EventFactHandle;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.rule.Declaration;
@@ -77,17 +78,20 @@
                                                    "foo",
                                                    1,
                                                    1,
-                                                   2 );
+                                                   2,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ));
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    4,
-                                                   3 );
+                                                   3,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      5,
-                                                     2 );
+                                                     2,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                 {drool, "after", foo, Boolean.TRUE}, 
@@ -162,17 +166,20 @@
                                                    "foo",
                                                    1,
                                                    1,
-                                                   2 );
+                                                   2,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    2,
-                                                   2 );
+                                                   2,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      5,
-                                                     3 );
+                                                     3,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                 {foo, "before", drool, Boolean.TRUE}, 
@@ -247,22 +254,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   3 );
+                                                   3,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    2,
-                                                   3 );
+                                                   3,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      2,
-                                                     2 );
+                                                     2,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     1,
-                                                    2 );
+                                                    2,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                 {foo, "coincides", bar, Boolean.TRUE}, 
@@ -309,22 +320,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   10 );
+                                                   10,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    4,
-                                                   7 );
+                                                   7,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      1,
-                                                     5 );
+                                                     5,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     7,
-                                                    6 );
+                                                    6,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                  {foo, "during", bar, Boolean.FALSE}, 
@@ -374,22 +389,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   10 );
+                                                   10,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    4,
-                                                   7 );
+                                                   7,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      1,
-                                                     5 );
+                                                     5,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     7,
-                                                    6 );
+                                                    6,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                  {bar, "includes", foo, Boolean.FALSE}, 
@@ -439,22 +458,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   10 );
+                                                   10,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    5,
-                                                   7 );
+                                                   7,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      2,
-                                                     10 );
+                                                     10,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     7,
-                                                    6 );
+                                                    6,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                  {bar,   "finishes", foo, Boolean.TRUE}, 
@@ -491,22 +514,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   10 );
+                                                   10,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    5,
-                                                   7 );
+                                                   7,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      2,
-                                                     10 );
+                                                     10,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     7,
-                                                    6 );
+                                                    6,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                  {foo, "finishedby", bar, Boolean.TRUE}, 
@@ -543,22 +570,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   10 );
+                                                   10,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    2,
-                                                   7 );
+                                                   7,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      2,
-                                                     10 );
+                                                     10,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     1,
-                                                    4 );
+                                                    4,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                  {bar,   "starts", foo, Boolean.TRUE}, 
@@ -595,22 +626,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   10 );
+                                                   10,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    2,
-                                                   7 );
+                                                   7,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      2,
-                                                     10 );
+                                                     10,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     1,
-                                                    6 );
+                                                    6,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
                  {foo, "startedby", bar, Boolean.TRUE}, 
@@ -647,22 +682,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   8 );
+                                                   8,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    10,
-                                                   7 );
+                                                   7,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      8,
-                                                     5 );
+                                                     5,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     11,
-                                                    4 );
+                                                    4,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
              {foo,   "meets", bar, Boolean.TRUE}, 
@@ -695,22 +734,26 @@
                                                    "foo",
                                                    1,
                                                    10,
-                                                   8 );
+                                                   8,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    2,
-                                                   8 );
+                                                   8,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      5,
-                                                     3 );
+                                                     3,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     4,
-                                                    7 );
+                                                    7,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
              {foo,   "metby", bar, Boolean.TRUE}, 
@@ -743,22 +786,26 @@
                                                    "foo",
                                                    1,
                                                    2,
-                                                   8 );
+                                                   8,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    7,
-                                                   7 );
+                                                   7,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      11,
-                                                     5 );
+                                                     5,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     5,
-                                                    5 );
+                                                    5,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
              {foo,   "overlaps", bar, Boolean.TRUE}, 
@@ -805,22 +852,26 @@
                                                    "foo",
                                                    1,
                                                    7,
-                                                   8 );
+                                                   8,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle bar = new EventFactHandle( 2,
                                                    "bar",
                                                    1,
                                                    2,
-                                                   8 );
+                                                   8,
+                                                   new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle drool = new EventFactHandle( 1,
                                                      "drool",
                                                      1,
                                                      11,
-                                                     5 );
+                                                     5,
+                                                     new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         EventFactHandle mole = new EventFactHandle( 1,
                                                     "mole",
                                                     1,
                                                     7,
-                                                    3 );
+                                                    3,
+                                                    new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
 
         final Object[][] data = {
              {foo,   "overlappedby", bar, Boolean.TRUE}, 

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/EqualityKeyTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/EqualityKeyTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/common/EqualityKeyTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -25,13 +25,13 @@
     public void test1() {
         ReteooFactHandleFactory factory = new ReteooFactHandleFactory();
         
-        InternalFactHandle ch1 = factory.newFactHandle( new Cheese ("c", 10), null, null );
+        InternalFactHandle ch1 = factory.newFactHandle( new Cheese ("c", 10), null, null, null );
         EqualityKey key = new EqualityKey( ch1 );
         
         assertSame( ch1, key.getFactHandle() );
         assertNull( key.getOtherFactHandle() );
         
-        InternalFactHandle ch2 = factory.newFactHandle( new Cheese ("c", 10), null, null );
+        InternalFactHandle ch2 = factory.newFactHandle( new Cheese ("c", 10), null, null, null );
         key.addFactHandle( ch2 );
         
         assertEquals( 1, key.getOtherFactHandle().size() );

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AccumulateNodeTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -129,14 +129,16 @@
 
         this.node.assertLeftTuple( new LeftTuple( this.workingMemory.getFactHandleFactory().newFactHandle( "cheese",
                                                                                                            null,
-                                                                                                           null ),
+                                                                                                           null,
+                                                                                                           workingMemory ),
                                                   null,
                                                   true ),
                                    this.context,
                                    this.workingMemory );
         this.node.assertLeftTuple( new LeftTuple( this.workingMemory.getFactHandleFactory().newFactHandle( "other cheese",
                                                                                                            null,
-                                                                                                           null ),
+                                                                                                           null,
+                                                                                                           workingMemory ),
                                                   null,
                                                   true ),
                                    this.context,
@@ -164,7 +166,8 @@
     public void testAssertTuple() {
         final DefaultFactHandle f0 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "cheese",
                                                                                                                   null,
-                                                                                                                  null );
+                                                                                                                  null,
+                                                                                                                  workingMemory );
         final LeftTuple tuple0 = new LeftTuple( f0,
                                                 null,
                                                 true );
@@ -184,7 +187,8 @@
         // assert tuple, should add left memory 
         final DefaultFactHandle f1 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "other cheese",
                                                                                                                   null,
-                                                                                                                  null );
+                                                                                                                  null,
+                                                                                                                  workingMemory );
 
         final LeftTuple tuple1 = new LeftTuple( f1,
                                                 null,
@@ -212,10 +216,12 @@
     public void testAssertTupleWithObjects() {
         final DefaultFactHandle f0 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "cheese",
                                                                                                                   null,
-                                                                                                                  null );
+                                                                                                                  null,
+                                                                                                                  workingMemory );
         final DefaultFactHandle f1 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "other cheese",
                                                                                                                   null,
-                                                                                                                  null );
+                                                                                                                  null,
+                                                                                                                  workingMemory);
 
         final LeftTuple tuple0 = new LeftTuple( f0,
                                                 null,
@@ -269,6 +275,7 @@
     public void testRetractTuple() {
         final DefaultFactHandle f0 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "cheese",
                                                                                                                   null,
+                                                                                                                  null,
                                                                                                                   null );
 
         final LeftTuple tuple0 = new LeftTuple( f0,
@@ -358,9 +365,11 @@
 
         final DefaultFactHandle f0 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "cheese",
                                                                                                                   null,
+                                                                                                                  null,
                                                                                                                   null );
         final DefaultFactHandle f1 = (DefaultFactHandle) this.workingMemory.getFactHandleFactory().newFactHandle( "other cheese",
                                                                                                                   null,
+                                                                                                                  null,
                                                                                                                   null );
 
         final LeftTuple tuple0 = new LeftTuple( f0,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -34,6 +34,7 @@
 import org.drools.base.evaluators.Operator;
 import org.drools.base.field.LongFieldImpl;
 import org.drools.base.field.ObjectFieldImpl;
+import org.drools.common.DisconnectedWorkingMemoryEntryPoint;
 import org.drools.common.EmptyBetaConstraints;
 import org.drools.common.InternalFactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -384,7 +385,8 @@
 
         InternalFactHandle handle = new ReteooFactHandleFactory().newFactHandle( new Cheese(),
                                                                                  null,
-                                                                                 null );
+                                                                                 null,
+                                                                                 new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ) );
         try {
             ad.propagateAssertObject( handle,
                                       null,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/DefaultFactHandleFactoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/DefaultFactHandleFactoryTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/DefaultFactHandleFactoryTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -43,21 +43,21 @@
      */
     public void testNewFactHandle() {
         final ReteooFactHandleFactory factory = new ReteooFactHandleFactory();
-        DefaultFactHandle handle = (DefaultFactHandle) factory.newFactHandle( "cheese", null, null );
+        DefaultFactHandle handle = (DefaultFactHandle) factory.newFactHandle( "cheese", null, null, null );
         assertEquals( 0,
                       handle.getId() );
         assertEquals( 0,
                       handle.getRecency() );
 
         // issue  new handle
-        handle = (DefaultFactHandle) factory.newFactHandle( "cheese", null, null );
+        handle = (DefaultFactHandle) factory.newFactHandle( "cheese", null, null, null );
         assertEquals( 1,
                       handle.getId() );
         assertEquals( 1,
                       handle.getRecency() );
 
         // issue  new handle, under a different reference so we  can destroy later        
-        final DefaultFactHandle handle2 = (DefaultFactHandle) factory.newFactHandle( "cheese", null, null );
+        final DefaultFactHandle handle2 = (DefaultFactHandle) factory.newFactHandle( "cheese", null, null, null );
         assertEquals( 2,
                       handle2.getId() );
         assertEquals( 2,
@@ -69,7 +69,7 @@
                       handle.getRecency() );
 
         // issue new handle and make sure  recency is still inline
-        handle = (DefaultFactHandle) factory.newFactHandle( "cheese", null, null );
+        handle = (DefaultFactHandle) factory.newFactHandle( "cheese", null, null, null );
         assertEquals( 3,
                       handle.getId() );
         assertEquals( 4,

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FactHandleTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FactHandleTest.java	2010-07-28 04:16:04 UTC (rev 34240)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/FactHandleTest.java	2010-07-28 04:34:31 UTC (rev 34241)
@@ -35,6 +35,7 @@
 import junit.framework.TestCase;
 
 import org.drools.common.DefaultFactHandle;
+import org.drools.common.DisconnectedWorkingMemoryEntryPoint;
 
 public class FactHandleTest extends TestCase {
     /*
@@ -55,7 +56,8 @@
     public void testFactHandleImpllonglong() {
         final DefaultFactHandle f0 = new DefaultFactHandle( 134,
                                                             "cheese",
-                                                            678 );
+                                                            678,
+                                                            new DisconnectedWorkingMemoryEntryPoint( "DEFAULT" ));
         assertEquals( 134,
                       f0.getId() );
         assertEquals( 678,



More information about the jboss-svn-commits mailing list