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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Aug 17 22:22:01 EDT 2008


Author: mark.proctor at jboss.com
Date: 2008-08-17 22:22:01 -0400 (Sun, 17 Aug 2008)
New Revision: 21587

Modified:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/Agenda.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/AgendaGroupFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroupFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NodeMemories.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectStore.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PriorityQueueAgendaGroupFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleFlowGroup.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ArrayIterator.java
   labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java
Log:
JBRULES-1737 Support WorkingMemory clearing without firing events
-differentiates between clear and clearAndCancel
-marshallers now can read into an existing session.

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -745,7 +745,7 @@
         // Check we have 0 activation cancellation events
         assertEquals( 0, activations.size() );
         
-        workingMemory.getAgenda().clearRuleFlowGroup( "flowgroup-1" );
+        workingMemory.getAgenda().clearAndCancelRuleFlowGroup( "flowgroup-1" );
         
         // Check the AgendaGroup and RuleFlowGroup  are now empty
         assertEquals( 0, agenda.getAgendaGroup( "MAIN" ).size() );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/Agenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/Agenda.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/Agenda.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -98,7 +98,7 @@
      * Clears all Activations from the Agenda
      * 
      */
-    public void clearAgenda();
+    public void clearAndCancel();
 
     /**
      * Clears all Activations from an Agenda Group. Any Activations that are also in an Xor Group are removed the
@@ -106,7 +106,7 @@
      * 
      * @param agendaGroup
      */
-    public void clearAgendaGroup(String name);
+    public void clearAndCancelAgendaGroup(String name);
 
     /**
      * Clears all Activations from an Agenda Group. Any Activations that are also in an Xor Group are removed the
@@ -114,7 +114,7 @@
      * 
      * @param agendaGroup
      */
-    public void clearAgendaGroup(AgendaGroup agendaGroup);
+    public void clearAndCancelAgendaGroup(AgendaGroup agendaGroup);
 
     /**
      * Clears all Activations from an Activation-Group. Any Activations that are also in an Agenda Group are removed
@@ -122,7 +122,7 @@
      * 
      * @param activationGroup
      */
-    public void clearActivationGroup(String name);
+    public void clearAndCancelActivationGroup(String name);
 
     /**
      * Clears all Activations from an Activation Group. Any Activations that are also in an Agenda Group are removed
@@ -130,11 +130,11 @@
      * 
      * @param activationGroup
      */
-    public void clearActivationGroup(ActivationGroup activationGroup);
+    public void clearAndCancelActivationGroup(ActivationGroup activationGroup);
     
-    public void clearRuleFlowGroup(final String name);
+    public void clearAndCancelRuleFlowGroup(final String name);
     
-    public void clearRuleFlowGroup(final RuleFlowGroup ruleFlowGroup);
+    public void clearAndCancelAndCancel(final RuleFlowGroup ruleFlowGroup);
 
     /**
      * Returns the name of the agenda group that currently

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	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -124,4 +124,9 @@
     public long getRecency() {
         return this.counter.get();
     }    
+    
+    public void clear(int id, long counter) {
+        this.id = new AtomicInteger( id );
+        this.counter = new AtomicLong( counter );        
+    }
 }

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	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -295,7 +295,24 @@
         this.entryPointNode = this.ruleBase.getRete().getEntryPointNode( this.entryPoint );
         this.typeConfReg = new ObjectTypeConfigurationRegistry( this.ruleBase );
     }
+    
+    public void reset(int handleId, long handleCounter, long propagationCounter) {
+        this.nodeMemories.clear();
+        this.agenda.clear();
+        this.objectStore.clear();
+        this.handleFactory.clear(handleId, handleCounter);
+        this.tms.clear();
+        this.liaPropagations.clear();
+        this.actionQueue.clear();
+        
+        this.propagationIdCounter = new AtomicLong( propagationCounter );
 
+        // TODO should these be cleared?
+        // we probably neeed to do CEP and Flow timers too        
+        // this.processInstanceManager.clear()
+        // this.workItemManager.clear();        
+    }
+
     public void setWorkingMemoryEventSupport(WorkingMemoryEventSupport workingMemoryEventSupport) {
         this.workingMemoryEventSupport = workingMemoryEventSupport;
     }
@@ -434,19 +451,19 @@
     }
 
     public void clearAgenda() {
-        this.agenda.clearAgenda();
+        this.agenda.clearAndCancel();
     }
 
     public void clearAgendaGroup(final String group) {
-        this.agenda.clearAgendaGroup( group );
+        this.agenda.clearAndCancelAgendaGroup( group );
     }
 
     public void clearActivationGroup(final String group) {
-        this.agenda.clearActivationGroup( group );
+        this.agenda.clearAndCancelActivationGroup( group );
     }
 
     public void clearRuleFlowGroup(final String group) {
-        this.agenda.clearRuleFlowGroup( group );
+        this.agenda.clearAndCancelRuleFlowGroup( group );
     }
 
     public RuleBase getRuleBase() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupFactory.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupFactory.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -1,7 +1,6 @@
 package org.drools.common;
 
-import org.drools.spi.AgendaGroup;
 
 public interface AgendaGroupFactory {    
-    AgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase);
+    InternalAgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase);
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -87,6 +87,7 @@
         this.index = this.array.length-1;
         this.lastIndex = 0;
     }
+    
 
     public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         name    = (String)in.readObject();
@@ -114,7 +115,8 @@
     }
 
     public void clear() {
-        this.array = new LinkedList[this.array.length];
+        this.lastIndex = 0;
+        this.array = new LinkedList[ this.array.length ];
     }
 
     /* (non-Javadoc)
@@ -206,7 +208,7 @@
 
     public String toString() {
         return "AgendaGroup '" + this.name + "'";
-    }
+    }   
 
     public boolean equal(final Object object) {
         if ( (object == null) || !(object instanceof ArrayAgendaGroup) ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroupFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroupFactory.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroupFactory.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -1,6 +1,5 @@
 package org.drools.common;
 
-import org.drools.spi.AgendaGroup;
 
 public class ArrayAgendaGroupFactory implements AgendaGroupFactory {
     private static final AgendaGroupFactory INSTANCE = new ArrayAgendaGroupFactory();
@@ -9,7 +8,7 @@
         return INSTANCE;
     }    
     
-    public AgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase) {
+    public InternalAgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase) {
         return new ArrayAgendaGroup( name,
                                      ruleBase );        
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -32,15 +32,12 @@
  */
 public class ConcurrentNodeMemories implements NodeMemories {
 
-    private static final long serialVersionUID = -2032997426288974117L;
+    private static final long            serialVersionUID = -2032997426288974117L;
 
     private AtomicReferenceArray<Object> memories;
-    private transient Lock lock;
-    private InternalRuleBase rulebase;
 
-    // required by the Externalizable framework
-    public ConcurrentNodeMemories() {
-    }
+    private Lock                         lock;
+    private InternalRuleBase             rulebase;
 
     public ConcurrentNodeMemories( InternalRuleBase rulebase ) {
         this.rulebase = rulebase;
@@ -49,32 +46,17 @@
     }
 
     /**
-     * @param in
-     * @throws IOException
-     * @throws ClassNotFoundException
-     */
-    public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException {
-        rulebase = (InternalRuleBase) in.readObject();
-        memories = (AtomicReferenceArray<Object>) in.readObject();
-        this.lock = new ReentrantLock();
-    }
-
-    /**
-     * @param out
-     * @throws IOException
-     */
-    public void writeExternal( ObjectOutput out ) throws IOException {
-        out.writeObject( rulebase );
-        out.writeObject( memories );
-    }
-
-    /**
      * @inheritDoc
      * @see org.drools.common.NodeMemories#clearNodeMemory(org.drools.common.NodeMemory)
      */
     public void clearNodeMemory( NodeMemory node ) {
-        this.memories.set( node.getId(), null );
+        this.memories.set( node.getId(),
+                           null );
     }
+    
+    public void clear() {
+        this.memories = new AtomicReferenceArray<Object>( this.rulebase.getNodeCount() );
+    }
 
     /**
      * @inheritDoc
@@ -123,8 +105,9 @@
             if( node.getId() >= this.memories.length() ) {
                 int size = Math.max( this.rulebase.getNodeCount(), node.getId() + 1 );
                 AtomicReferenceArray<Object> newMem = new AtomicReferenceArray<Object>( size );
-                for( int i = 0; i < this.memories.length(); i++ ) {
-                    newMem.set( i, this.memories.get( i ) );
+                for ( int i = 0; i < this.memories.length(); i++ ) {
+                    newMem.set( i,
+                                this.memories.get( i ) );
                 }
                 this.memories = newMem;
             }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -72,36 +72,36 @@
     /**
      * 
      */
-    private static final long            serialVersionUID = 400L;
+    private static final long                serialVersionUID = 400L;
 
     /** Working memory of this Agenda. */
-    private InternalWorkingMemory        workingMemory;
+    private InternalWorkingMemory            workingMemory;
 
-    private org.drools.util.LinkedList   scheduledActivations;
+    private org.drools.util.LinkedList       scheduledActivations;
 
     /** Items time-delayed. */
 
-    private Map<String, AgendaGroup>     agendaGroups;
+    private Map<String, InternalAgendaGroup> agendaGroups;
 
-    private Map<String, ActivationGroup> activationGroups;
+    private Map<String, ActivationGroup>     activationGroups;
 
-    private Map<String, RuleFlowGroup>   ruleFlowGroups;
+    private Map<String, RuleFlowGroup>       ruleFlowGroups;
 
-    private LinkedList<AgendaGroup>      focusStack;
+    private LinkedList<AgendaGroup>          focusStack;
 
-    private AgendaGroup                  currentModule;
+    private InternalAgendaGroup              currentModule;
 
-    private AgendaGroup                  main;
+    private InternalAgendaGroup              main;
 
-    private AgendaGroupFactory           agendaGroupFactory;
+    private AgendaGroupFactory               agendaGroupFactory;
 
-    private KnowledgeHelper              knowledgeHelper;
+    private KnowledgeHelper                  knowledgeHelper;
 
-    public int                           activeActivations;
+    public int                               activeActivations;
 
-    public int                           dormantActivations;
+    public int                               dormantActivations;
 
-    private ConsequenceExceptionHandler  consequenceExceptionHandler;
+    private ConsequenceExceptionHandler      consequenceExceptionHandler;
 
     // ------------------------------------------------------------
     // Constructors
@@ -133,7 +133,7 @@
     public DefaultAgenda(InternalRuleBase rb,
                          boolean initMain) {
 
-        this.agendaGroups = new HashMap<String, AgendaGroup>();
+        this.agendaGroups = new HashMap<String, InternalAgendaGroup>();
         this.activationGroups = new HashMap<String, ActivationGroup>();
         this.ruleFlowGroups = new HashMap<String, RuleFlowGroup>();
         this.focusStack = new LinkedList<AgendaGroup>();
@@ -164,6 +164,57 @@
         }
     }
 
+    //    public void write(WMSerialisationOutContext context) throws IOException {
+    //        BinaryHeapQueueAgendaGroup[] agendaGroups = (BinaryHeapQueueAgendaGroup[]) this.agendaGroups.values().toArray( new AgendaGroup[this.agendaGroups.size()] );
+    //        Arrays.sort( agendaGroups,
+    //                     AgendaGroupSorter.instance );
+    //
+    //        for ( BinaryHeapQueueAgendaGroup group : agendaGroups ) {
+    //            context.writeInt( PersisterEnums.AGENDA_GROUP );
+    //            group.write( context );
+    //        }
+    //        context.writeInt( PersisterEnums.END );
+    //
+    //        for ( ListIterator it = this.focusStack.listIterator( this.focusStack.size() - 1 ); it.hasPrevious(); ) {
+    //            AgendaGroup group = (AgendaGroup) it.previous();
+    //            context.writeInt( PersisterEnums.AGENDA_GROUP );
+    //            context.writeUTF( group.getName() );
+    //        }
+    //        context.writeInt( PersisterEnums.END );
+    //
+    //        RuleFlowGroupImpl[] ruleFlowGroups = (RuleFlowGroupImpl[]) this.ruleFlowGroups.values().toArray( new RuleFlowGroupImpl[this.ruleFlowGroups.size()] );
+    //        Arrays.sort( agendaGroups,
+    //                     AgendaGroupSorter.instance );
+    //
+    //        for ( BinaryHeapQueueAgendaGroup group : agendaGroups ) {
+    //            context.writeInt( PersisterEnums.RULE_FLOW_GROUP );
+    //            group.write( context );
+    //        }
+    //        context.writeInt( PersisterEnums.END );
+    //    }
+
+    //    public static class AgendaGroupSorter
+    //        implements
+    //        Comparator<AgendaGroup> {
+    //        public static final AgendaGroupSorter instance = new AgendaGroupSorter();
+    //
+    //        public int compare(AgendaGroup group1,
+    //                           AgendaGroup group2) {
+    //            return group1.getName().compareTo( group2.getName() );
+    //        }
+    //    }
+    //
+    //    public static class RuleFlowGroupSorter
+    //        implements
+    //        Comparator<AgendaGroup> {
+    //        public static final AgendaGroupSorter instance = new AgendaGroupSorter();
+    //
+    //        public int compare(AgendaGroup group1,
+    //                           AgendaGroup group2) {
+    //            return group1.getName().compareTo( group2.getName() );
+    //        }
+    //    }
+
     public void readExternal(ObjectInput in) throws IOException,
                                             ClassNotFoundException {
         workingMemory = (InternalWorkingMemory) in.readObject();
@@ -172,8 +223,8 @@
         activationGroups = (Map) in.readObject();
         ruleFlowGroups = (Map) in.readObject();
         focusStack = (LinkedList) in.readObject();
-        currentModule = (AgendaGroup) in.readObject();
-        main = (AgendaGroup) in.readObject();
+        currentModule = (InternalAgendaGroup) in.readObject();
+        main = (InternalAgendaGroup) in.readObject();
         agendaGroupFactory = (AgendaGroupFactory) in.readObject();
         knowledgeHelper = (KnowledgeHelper) in.readObject();
         activeActivations = in.readInt();
@@ -217,6 +268,7 @@
         Scheduler.getInstance().scheduleAgendaItem( item,
                                                     this );
 
+
         if ( this.scheduledActivations == null ) {
             this.scheduledActivations = new org.drools.util.LinkedList();
         }
@@ -355,7 +407,7 @@
 
     public void addAgendaGroup(final AgendaGroup agendaGroup) {
         this.agendaGroups.put( agendaGroup.getName(),
-                               agendaGroup );
+                               (InternalAgendaGroup) agendaGroup );
     }
 
     /*
@@ -435,7 +487,7 @@
      * 
      * @see org.drools.common.AgendaI#setCurrentAgendaGroup(org.drools.spi.AgendaGroup)
      */
-    public void setCurrentAgendaGroup(final AgendaGroup agendaGroup) {
+    public void setCurrentAgendaGroup(final InternalAgendaGroup agendaGroup) {
         this.currentModule = agendaGroup;
     }
 
@@ -476,7 +528,7 @@
         return (AgendaGroup[]) this.agendaGroups.values().toArray( new AgendaGroup[this.agendaGroups.size()] );
     }
 
-    public Map<String, AgendaGroup> getAgendaGroupsMap() {
+    public Map<String, InternalAgendaGroup> getAgendaGroupsMap() {
         return this.agendaGroups;
     }
 
@@ -593,17 +645,43 @@
     public org.drools.util.LinkedList getScheduledActivationsLinkedList() {
         return this.scheduledActivations;
     }
+    
+    public void clear() {
+        // reset focus stack
+        this.focusStack.clear();
+        this.focusStack.add( this.main );
+        
+        // reset scheduled activations
+        if ( this.scheduledActivations != null && !this.scheduledActivations.isEmpty() ) {
+            for ( ScheduledAgendaItem item = (ScheduledAgendaItem) this.scheduledActivations.removeFirst(); item != null; item = (ScheduledAgendaItem) this.scheduledActivations.removeFirst() ) {
+                Scheduler.getInstance().removeAgendaItem( item );
+            }
+        }            
 
-    /*
-     * (non-Javadoc)
-     * 
+        //reset all agenda groups
+        for ( InternalAgendaGroup group : this.agendaGroups.values() ) {
+            group.clear();
+        }
+
+        // reset all ruleflows
+        for ( RuleFlowGroup group : this.ruleFlowGroups.values() ) {
+            group.clear();
+        }
+
+        // reset all activation groups.
+        for ( ActivationGroup group : this.activationGroups.values() ) {
+            group.clear();
+        }
+    }    
+
+    /** (non-Javadoc)
      * @see org.drools.common.AgendaI#clearAgenda()
      */
-    public void clearAgenda() {
+    public void clearAndCancel() {
         // Cancel all items and fire a Cancelled event for each Activation
         for ( final java.util.Iterator agendaGroupIterator = this.agendaGroups.values().iterator(); agendaGroupIterator.hasNext(); ) {
             final AgendaGroup group = (AgendaGroup) agendaGroupIterator.next();
-            clearAgendaGroup( group );
+            clearAndCancelAgendaGroup( group );
         }
 
         final EventSupport eventsupport = (EventSupport) this.workingMemory;
@@ -614,6 +692,17 @@
                                                                               this.workingMemory );
             }
         }
+
+        // cancel all ruleflows
+        for ( RuleFlowGroup group : this.ruleFlowGroups.values() ) {
+            clearAndCancelAndCancel( group );
+        }
+
+        // cancel all activation groups.
+        for ( ActivationGroup group : this.activationGroups.values() ) {
+            clearAndCancelActivationGroup( group );
+        }
+
     }
 
     /*
@@ -621,10 +710,10 @@
      * 
      * @see org.drools.common.AgendaI#clearAgendaGroup(java.lang.String)
      */
-    public void clearAgendaGroup(final String name) {
+    public void clearAndCancelAgendaGroup(final String name) {
         final AgendaGroup agendaGroup = (AgendaGroup) this.agendaGroups.get( name );
         if ( agendaGroup != null ) {
-            clearAgendaGroup( agendaGroup );
+            clearAndCancelAgendaGroup( agendaGroup );
         }
     }
 
@@ -633,7 +722,7 @@
      * 
      * @see org.drools.common.AgendaI#clearAgendaGroup(org.drools.common.AgendaGroupImpl)
      */
-    public void clearAgendaGroup(final AgendaGroup agendaGroup) {
+    public void clearAndCancelAgendaGroup(final AgendaGroup agendaGroup) {
         final EventSupport eventsupport = (EventSupport) this.workingMemory;
 
         final Activation[] queueable = ((InternalAgendaGroup) agendaGroup).getQueue();
@@ -668,10 +757,10 @@
      * 
      * @see org.drools.common.AgendaI#clearActivationGroup(java.lang.String)
      */
-    public void clearActivationGroup(final String name) {
+    public void clearAndCancelActivationGroup(final String name) {
         final ActivationGroup activationGroup = (ActivationGroup) this.activationGroups.get( name );
         if ( activationGroup != null ) {
-            clearActivationGroup( activationGroup );
+            clearAndCancelActivationGroup( activationGroup );
         }
     }
 
@@ -680,7 +769,7 @@
      * 
      * @see org.drools.common.AgendaI#clearActivationGroup(org.drools.spi.ActivationGroup)
      */
-    public void clearActivationGroup(final ActivationGroup activationGroup) {
+    public void clearAndCancelActivationGroup(final ActivationGroup activationGroup) {
         final EventSupport eventsupport = (EventSupport) this.workingMemory;
 
         for ( final Iterator it = activationGroup.iterator(); it.hasNext(); ) {
@@ -704,14 +793,14 @@
         activationGroup.clear();
     }
 
-    public void clearRuleFlowGroup(final String name) {
+    public void clearAndCancelRuleFlowGroup(final String name) {
         final RuleFlowGroup ruleFlowGrlup = (RuleFlowGroup) this.ruleFlowGroups.get( name );
         if ( ruleFlowGrlup != null ) {
-            clearRuleFlowGroup( ruleFlowGrlup );
+            clearAndCancelAndCancel( ruleFlowGrlup );
         }
     }
 
-    public void clearRuleFlowGroup(final RuleFlowGroup ruleFlowGroup) {
+    public void clearAndCancelAndCancel(final RuleFlowGroup ruleFlowGroup) {
         final EventSupport eventsupport = (EventSupport) this.workingMemory;
 
         for ( Iterator it = ruleFlowGroup.iterator(); it.hasNext(); ) {
@@ -791,7 +880,7 @@
             // so lets remove the information now, before the consequence fires
             final ActivationGroup activationGroup = activation.getActivationGroupNode().getActivationGroup();
             activationGroup.removeActivation( activation );
-            clearActivationGroup( activationGroup );
+            clearAndCancelActivationGroup( activationGroup );
         }
         activation.setActivated( false );
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NodeMemories.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NodeMemories.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NodeMemories.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -25,12 +25,14 @@
  *
  * @author etirelli
  */
-public interface NodeMemories extends Externalizable {
+public interface NodeMemories {
 
     public Object getNodeMemory( NodeMemory node );
 
     public void clearNodeMemory( NodeMemory node );
 
     public void setRuleBaseReference(InternalRuleBase ruleBase);
+    
+    public void clear();
 
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectStore.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectStore.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectStore.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -9,6 +9,8 @@
     public abstract int size();
 
     public abstract boolean isEmpty();
+    
+    public void clear();    
 
     public abstract Object getObjectForHandle(InternalFactHandle handle);
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PriorityQueueAgendaGroupFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PriorityQueueAgendaGroupFactory.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PriorityQueueAgendaGroupFactory.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -5,7 +5,6 @@
 import java.io.IOException;
 import java.io.ObjectInput;
 
-import org.drools.spi.AgendaGroup;
 
 public class PriorityQueueAgendaGroupFactory implements AgendaGroupFactory, Externalizable {
     private static final AgendaGroupFactory INSTANCE = new PriorityQueueAgendaGroupFactory();
@@ -20,7 +19,7 @@
         return INSTANCE;
     }
 
-    public AgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase) {
+    public InternalAgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase) {
         return new BinaryHeapQueueAgendaGroup( name,
                                     ruleBase );
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -172,6 +172,7 @@
 
     public void clear() {
         this.list.clear();
+        this.active = false;
     }
 
     public int size() {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -72,6 +72,11 @@
     public boolean isEmpty() {
         return this.assertMap != null;
     }
+    
+    public void clear() {
+        this.assertMap.clear();
+        this.identityMap.clear();
+    }
 
     /* (non-Javadoc)
      * @see org.drools.common.ObjectStore#getObjectForHandle(org.drools.common.InternalFactHandle)

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -339,4 +339,9 @@
         }
         set.add( node );
     }
+    
+    public void clear() {
+        this.justifiedMap.clear();
+        this.assertMap.clear();
+    }
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -12,7 +12,9 @@
 import org.drools.reteoo.ReteooStatefulSession;
 import org.drools.spi.GlobalResolver;
 
-public class DefaultMarshaller implements Marshaller {
+public class DefaultMarshaller
+    implements
+    Marshaller {
     GlobalResolver                     globalResolver;
     private RuleBaseConfiguration      config;
     PlaceholderResolverStrategyFactory factory;
@@ -20,20 +22,21 @@
     public DefaultMarshaller() {
         this( null );
     }
-    
+
     public DefaultMarshaller(RuleBaseConfiguration config) {
-        this( config, null);
-    }    
+        this( config,
+              null );
+    }
 
     public DefaultMarshaller(RuleBaseConfiguration config,
-                      PlaceholderResolverStrategyFactory factory) {
+                             PlaceholderResolverStrategyFactory factory) {
         this.config = (config != null) ? config : new RuleBaseConfiguration();
-        
+
         if ( factory == null ) {
             this.factory = new PlaceholderResolverStrategyFactory();
             ClassPlaceholderResolverStrategyAcceptor acceptor = new ClassPlaceholderResolverStrategyAcceptor( "*.*" );
             IdentityPlaceholderResolverStrategy strategy = new IdentityPlaceholderResolverStrategy( acceptor );
-            this.factory.addStrategy( strategy );            
+            this.factory.addStrategy( strategy );
         } else {
             this.factory = factory;
         }
@@ -48,18 +51,34 @@
                                       final ExecutorService executor) throws IOException,
                                                                      ClassNotFoundException {
         MarshallerReaderContext context = new MarshallerReaderContext( stream,
-                                                                         ruleBase,
-                                                                         RuleBaseNodes.getNodeMap( ruleBase ),
-                                                                         factory );
+                                                                       ruleBase,
+                                                                       RuleBaseNodes.getNodeMap( ruleBase ),
+                                                                       factory );
 
         ReteooStatefulSession session = InputMarshaller.readSession( context,
-                                           id,
-                                           executor );
+                                                                     id,
+                                                                     executor );
         context.close();
         return session;
-        
+
     }
 
+    public ReteooStatefulSession read(final InputStream stream,
+                                      final InternalRuleBase ruleBase,
+                                      ReteooStatefulSession session) throws IOException,
+                                                                    ClassNotFoundException {
+        MarshallerReaderContext context = new MarshallerReaderContext( stream,
+                                                                       ruleBase,
+                                                                       RuleBaseNodes.getNodeMap( ruleBase ),
+                                                                       factory );
+
+        session = InputMarshaller.readSession( session,
+                                               context );
+        context.close();
+        return session;
+
+    }
+
     /* (non-Javadoc)
      * @see org.drools.marshalling.Marshaller#write(java.io.OutputStream, org.drools.common.InternalRuleBase, org.drools.StatefulSession)
      */
@@ -67,10 +86,10 @@
                       final InternalRuleBase ruleBase,
                       final StatefulSession session) throws IOException {
         MarshallerWriteContext context = new MarshallerWriteContext( stream,
-                                                                           ruleBase,
-                                                                           (InternalWorkingMemory) session,
-                                                                           RuleBaseNodes.getNodeMap( ruleBase ),
-                                                                           this.factory );
+                                                                     ruleBase,
+                                                                     (InternalWorkingMemory) session,
+                                                                     RuleBaseNodes.getNodeMap( ruleBase ),
+                                                                     this.factory );
         OutputMarshaller.writeSession( context );
         context.close();
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -68,6 +68,60 @@
 import org.drools.workflow.instance.node.WorkItemNodeInstance;
 
 public class InputMarshaller {
+    /**
+     * Stream the data into an existing session
+     * 
+     * @param session
+     * @param context
+     * @param id
+     * @param executor
+     * @return
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
+    public static ReteooStatefulSession readSession(ReteooStatefulSession session,
+                                                    MarshallerReaderContext context) throws IOException,
+                                                                             ClassNotFoundException {
+        int handleId = context.readInt();
+        long handleCounter = context.readLong();
+        long propagationCounter = context.readLong();                
+        
+        // these are for the InitialFactHandle, on a reset we just ignore
+        context.readInt();
+        context.readLong();           
+        
+        session.reset(handleId, handleCounter, propagationCounter);
+        DefaultAgenda agenda = ( DefaultAgenda ) session.getAgenda();
+        
+        readAgenda( context,
+                    agenda );   
+        
+        context.wm = session;   
+        
+        readFactHandles( context );
+
+        readActionQueue( context );
+
+        if ( context.readBoolean() ) {
+            readTruthMaintenanceSystem( context );
+        }
+
+        readProcessInstances( context );
+
+        readWorkItems( context );        
+        
+        return session;
+    }
+    
+    /**
+     * Create a new session into which to read the stream data
+     * @param context
+     * @param id
+     * @param executor
+     * @return
+     * @throws IOException
+     * @throws ClassNotFoundException
+     */
     public static ReteooStatefulSession readSession(MarshallerReaderContext context,
                                                     int id,
                                                     ExecutorService executor) throws IOException,

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	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -64,4 +64,6 @@
     public int getId();
 
     public long getRecency();
+    
+    public void clear(int id, long counter);    
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleFlowGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleFlowGroup.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleFlowGroup.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -42,4 +42,6 @@
      * activations when it was activated, it will be deactivated immediately.
      */
     void setAutoDeactivate(boolean autoDeactivate);
+
+    void clear();
 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ArrayIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ArrayIterator.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ArrayIterator.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -137,7 +137,7 @@
      * If an array has previously been set (using the single-arg constructor
      * or this method) then that array is discarded in favour of this one.
      * Iteration is restarted at the start of the new array.
-     * Although this can be used to reset iteration, the {@link #reset()} method
+     * Although this can be used to reset iteration, the {@link #clear()} method
      * is a more effective choice.
      *
      * @param array the array that the iterator should iterate over.

Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java	2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java	2008-08-18 02:22:01 UTC (rev 21587)
@@ -165,7 +165,7 @@
         assertEquals( 1,
                       agenda.getScheduledActivations().length );
 
-        agenda.clearAgenda();
+        agenda.clearAndCancel();
 
         assertEquals( 0,
                       agenda.getFocus().size() );
@@ -250,7 +250,7 @@
                       results.get( "fired" ) );
 
         // clear the agenda and the result map
-        agenda.clearAgenda();
+        agenda.clearAndCancel();
         results.clear();
 
         // False filter, activations should always be denied
@@ -587,7 +587,7 @@
                       agendaGroup.size() );
 
         // Clear the agenda we we can test again
-        agenda.clearAgenda();
+        agenda.clearAndCancel();
         assertEquals( 0,
                       agendaGroup.size() );
 
@@ -837,7 +837,7 @@
         assertEquals( 1,
                       activationGroup3.size() );
 
-        agenda.clearAgendaGroup( "agendaGroup3" );
+        agenda.clearAndCancelAgendaGroup( "agendaGroup3" );
         assertEquals( 3,
                       agenda.agendaSize() );
         assertEquals( 0,




More information about the jboss-svn-commits mailing list