[jboss-svn-commits] JBL Code SVN: r17896 - in labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools: event and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jan 16 09:06:11 EST 2008


Author: mark.proctor at jboss.com
Date: 2008-01-16 09:06:11 -0500 (Wed, 16 Jan 2008)
New Revision: 17896

Added:
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/ObjectStore.java
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java
Modified:
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/AgendaEventSupport.java
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/WorkingMemoryEventSupport.java
   labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/reteoo/ReteStatelessSessionResult.java
Log:
JBRULES-1390 Add support to streams
-ObjectStore now encapsulates the items in the WM
-EventSupport classes now use CopyOnWriteArrayList

Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-01-16 14:02:02 UTC (rev 17895)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -77,9 +77,6 @@
 import org.drools.spi.GlobalResolver;
 import org.drools.spi.PropagationContext;
 import org.drools.temporal.SessionClock;
-import org.drools.util.JavaIteratorAdapter;
-import org.drools.util.ObjectHashMap;
-import org.drools.util.AbstractHashTable.HashTableIterator;
 
 /**
  * Implementation of <code>WorkingMemory</code>.
@@ -110,9 +107,8 @@
     /** The actual memory for the <code>JoinNode</code>s. */
     protected final NodeMemories                         nodeMemories;
 
-    /** Object-to-handle mapping. */
-    private final ObjectHashMap                          assertMap;
-    private final ObjectHashMap                          identityMap;
+    
+    protected final ObjectStore                          objectStore;
 
     protected Map                                        queryResults                                  = Collections.EMPTY_MAP;
 
@@ -198,19 +194,11 @@
         } else {
             this.tms = null;
         }
-
-        this.assertMap = new ObjectHashMap();
+        
         final RuleBaseConfiguration conf = this.ruleBase.getConfiguration();
+        
+        this.objectStore = new SingleThreadedObjectStore(conf, this.lock);        
 
-        if ( conf.getAssertBehaviour() == AssertBehaviour.IDENTITY ) {
-            this.assertMap.setComparator( new IdentityAssertMapComparator() );
-            this.identityMap = assertMap;
-        } else {
-            this.assertMap.setComparator( new EqualityAssertMapComparator() );
-            this.identityMap = new ObjectHashMap();
-            this.identityMap.setComparator( new IdentityAssertMapComparator() );
-        }
-
         // Only takes effect if are using idententity behaviour for assert
         if ( conf.getLogicalOverride() == LogicalOverride.DISCARD ) {
             this.discardOnLogicalOverride = true;
@@ -256,111 +244,51 @@
     }
 
     public void addEventListener(final WorkingMemoryEventListener listener) {
-        try {
-            this.lock.lock();
-            this.workingMemoryEventSupport.addEventListener( listener );
-        } finally {
-            this.lock.unlock();
-        }
+        this.workingMemoryEventSupport.addEventListener( listener );
     }
 
     public void removeEventListener(final WorkingMemoryEventListener listener) {
-        try {
-            this.lock.lock();
-            this.workingMemoryEventSupport.removeEventListener( listener );
-        } finally {
-            this.lock.unlock();
-        }
+        this.workingMemoryEventSupport.removeEventListener( listener );
     }
 
     public List getWorkingMemoryEventListeners() {
-        try {
-            this.lock.lock();
-            return this.workingMemoryEventSupport.getEventListeners();
-        } finally {
-            this.lock.unlock();
-        }
+        return this.workingMemoryEventSupport.getEventListeners();
     }
 
     public void addEventListener(final AgendaEventListener listener) {
-        try {
-            this.lock.lock();
-            this.agendaEventSupport.addEventListener( listener );
-        } finally {
-            this.lock.unlock();
-        }
+        this.agendaEventSupport.addEventListener( listener );
     }
 
     public void removeEventListener(final AgendaEventListener listener) {
-        try {
-            this.lock.lock();
-            this.agendaEventSupport.removeEventListener( listener );
-        } finally {
-            this.lock.unlock();
-        }
+        this.agendaEventSupport.removeEventListener( listener );
     }
 
     public List getAgendaEventListeners() {
-        try {
-            this.lock.lock();
-            return this.agendaEventSupport.getEventListeners();
-        } finally {
-            this.lock.unlock();
-        }
+        return this.agendaEventSupport.getEventListeners();
     }
 
     public void addEventListener(final RuleFlowEventListener listener) {
-        try {
-            this.lock.lock();
-            this.ruleFlowEventSupport.addEventListener( listener );
-        } finally {
-            this.lock.unlock();
-        }
+        this.ruleFlowEventSupport.addEventListener( listener );
     }
 
     public void removeEventListener(final RuleFlowEventListener listener) {
-        try {
-            this.lock.lock();
-            this.ruleFlowEventSupport.removeEventListener( listener );
-        } finally {
-            this.lock.unlock();
-        }
+        this.ruleFlowEventSupport.removeEventListener( listener );
     }
 
     public List getRuleFlowEventListeners() {
-        try {
-            this.lock.lock();
-            return this.ruleFlowEventSupport.getEventListeners();
-        } finally {
-            this.lock.unlock();
-        }
+        return this.ruleFlowEventSupport.getEventListeners();
     }
 
     public void addEventListener(RuleBaseEventListener listener) {
-        try {
-            this.lock.lock();
-            this.ruleBase.addEventListener( listener );
-        } finally {
-            this.lock.unlock();
-        }
+        this.ruleBase.addEventListener( listener );
     }
 
     public List getRuleBaseEventListeners() {
-        try {
-            this.lock.lock();
-            return this.ruleBase.getRuleBaseEventListeners();
-        } finally {
-            this.lock.unlock();
-        }
+        return this.ruleBase.getRuleBaseEventListeners();
     }
 
     public void removeEventListener(RuleBaseEventListener listener) {
-        try {
-            this.lock.lock();
-            this.ruleBase.removeEventListener( listener );
-        } finally {
-            this.lock.unlock();
-        }
+        this.ruleBase.removeEventListener( listener );
     }
 
     public FactHandleFactory getFactHandleFactory() {
@@ -576,93 +504,47 @@
      *
      */
     public Object getObject(final FactHandle handle) {
-        try {
-            this.lock.lock();
-
-            // Make sure the FactHandle is from this WorkingMemory
-            final InternalFactHandle internalHandle = (InternalFactHandle) this.assertMap.get( handle );
-            if ( internalHandle == null ) {
-                return null;
-            }
-
-            Object object = internalHandle.getObject();
-
-            if ( object != null && internalHandle.isShadowFact() ) {
-                object = ((ShadowProxy) object).getShadowedObject();
-            }
-
-            return object;
-        } finally {
-            this.lock.unlock();
-        }
-
+        return this.objectStore.getObjectForHandle( (InternalFactHandle) handle );
     }
-
-    public ObjectHashMap getAssertMap() {
-        return this.assertMap;
+    
+    public ObjectStore getObjectStore() {
+        return this.objectStore;
     }
 
     /**
      * @see WorkingMemory
      */
     public FactHandle getFactHandle(final Object object) {
-        try {
-            this.lock.lock();
-            final FactHandle factHandle = (FactHandle) this.identityMap.get( object );
-
-            return factHandle;
-        } finally {
-            this.lock.unlock();
-        }
+        return this.objectStore.getHandleForObject( object );
     }
+    
 
     /**
-     * This is an internal method, used to avoid java.util.Iterator adaptors
-     */
-    public ObjectHashMap getFactHandleMap() {
-        return this.assertMap;
-    }
-
-    /**
      * This class is not thread safe, changes to the working memory during iteration may give unexpected results
      */
     public Iterator iterateObjects() {
-        HashTableIterator iterator = new HashTableIterator( this.assertMap );
-        iterator.reset();
-        return new JavaIteratorAdapter( iterator,
-                                        JavaIteratorAdapter.OBJECT );
+        return this.objectStore.iterateObjects( );
     }
 
     /**
      * This class is not thread safe, changes to the working memory during iteration may give unexpected results
      */
     public Iterator iterateObjects(ObjectFilter filter) {
-        HashTableIterator iterator = new HashTableIterator( this.assertMap );
-        iterator.reset();
-        return new JavaIteratorAdapter( iterator,
-                                        JavaIteratorAdapter.OBJECT,
-                                        filter );
+        return this.objectStore.iterateObjects( filter );
     }
 
     /**
      * This class is not thread safe, changes to the working memory during iteration may give unexpected results
      */
     public Iterator iterateFactHandles() {
-        HashTableIterator iterator = new HashTableIterator( this.assertMap );
-        iterator.reset();
-        return new JavaIteratorAdapter( iterator,
-                                        JavaIteratorAdapter.FACT_HANDLE );
+        return this.objectStore.iterateFactHandles();
     }
 
     /**
      * This class is not thread safe, changes to the working memory during iteration may give unexpected results
      */
     public Iterator iterateFactHandles(ObjectFilter filter) {
-        HashTableIterator iterator = new HashTableIterator( this.assertMap );
-        iterator.reset();
-        return new JavaIteratorAdapter( iterator,
-                                        JavaIteratorAdapter.FACT_HANDLE,
-                                        filter );
+        return this.objectStore.iterateFactHandles( filter );
     }
 
     public abstract QueryResults getQueryResults(String query);
@@ -836,7 +718,7 @@
                                                        typeConf.isEvent(),
                                                        duration,
                                                        this );
-            addHandleToMaps( handle );
+            this.objectStore.addHandle( handle, object );
             insert( entryPoint,
                     handle,
                     object,
@@ -848,7 +730,7 @@
         try {
             this.lock.lock();
             // check if the object already exists in the WM
-            handle = (InternalFactHandle) this.assertMap.get( object );
+            handle = (InternalFactHandle) this.objectStore.getHandleForObject(object);
 
             if ( this.maintainTms ) {
 
@@ -892,7 +774,7 @@
                                                                typeConf.isEvent(),
                                                                duration,
                                                                this );
-                    addHandleToMaps( handle );
+                    this.objectStore.addHandle( handle, object );
 
                     key = new EqualityKey( handle );
                     handle.setEqualityKey( key );
@@ -923,16 +805,7 @@
                                 // as assertMap may be using an "identity" equality comparator,
                                 // we need to remove the handle from the map, before replacing the object
                                 // and then re-add the handle. Otherwise we may end up with a leak.
-                                this.assertMap.remove( handle );
-                                Object oldObject = handle.getObject();
-                                if ( oldObject instanceof ShadowProxy ) {
-                                    ((ShadowProxy) oldObject).setShadowedObject( object );
-                                } else {
-                                    handle.setObject( object );
-                                }
-                                this.assertMap.put( handle,
-                                                    handle,
-                                                    false );
+                                this.objectStore.updateHandle( handle, object );
                             } else {
                                 Object oldObject = handle.getObject();
                                 if ( oldObject instanceof ShadowProxy ) {
@@ -951,7 +824,7 @@
                                                                        this );
                             handle.setEqualityKey( key );
                             key.addFactHandle( handle );
-                            addHandleToMaps( handle );
+                            this.objectStore.addHandle( handle, object );
 
                         }
 
@@ -960,7 +833,7 @@
                                                                    typeConf.isEvent(),
                                                                    duration,
                                                                    this );
-                        addHandleToMaps( handle );
+                        this.objectStore.addHandle( handle, object );
                         key.addFactHandle( handle );
                         handle.setEqualityKey( key );
 
@@ -990,7 +863,7 @@
                                                            typeConf.isEvent(),
                                                            duration,
                                                            this );
-                addHandleToMaps( handle );
+                this.objectStore.addHandle( handle, object );
 
             }
 
@@ -1188,7 +1061,7 @@
                                                                 object,
                                                                 this );
 
-            removeHandleFromMaps( handle );
+            this.objectStore.removeHandle( handle );
 
             this.handleFactory.destroyFactHandle( handle );
 
@@ -1200,24 +1073,24 @@
         }
     }
 
-    private void addHandleToMaps(InternalFactHandle handle) {
-        this.assertMap.put( handle,
-                            handle,
-                            false );
-        if ( this.ruleBase.getConfiguration().getAssertBehaviour() == AssertBehaviour.EQUALITY ) {
-            this.identityMap.put( handle,
-                                  handle,
-                                  false );
-        }
-    }
+//    private void addHandleToMaps(InternalFactHandle handle) {
+//        this.assertMap.put( handle,
+//                            handle,
+//                            false );
+//        if ( this.ruleBase.getConfiguration().getAssertBehaviour() == AssertBehaviour.EQUALITY ) {
+//            this.identityMap.put( handle,
+//                                  handle,
+//                                  false );
+//        }
+//    }
+//
+//    private void removeHandleFromMaps(final InternalFactHandle handle) {
+//        this.assertMap.remove( handle );
+//        if ( this.ruleBase.getConfiguration().getAssertBehaviour() == AssertBehaviour.EQUALITY ) {
+//            this.identityMap.remove( handle );
+//        }
+//    }
 
-    private void removeHandleFromMaps(final InternalFactHandle handle) {
-        this.assertMap.remove( handle );
-        if ( this.ruleBase.getConfiguration().getAssertBehaviour() == AssertBehaviour.EQUALITY ) {
-            this.identityMap.remove( handle );
-        }
-    }
-
     public void modifyRetract(final FactHandle factHandle) {
         modifyRetract( factHandle,
                        null,
@@ -1429,11 +1302,11 @@
                        propagationContext );
 
             if ( (originalObject != object) || (this.ruleBase.getConfiguration().getAssertBehaviour() != AssertBehaviour.IDENTITY) ) {
-                removeHandleFromMaps( handle );
+                this.objectStore.removeHandle( handle );
 
                 // set anyway, so that it updates the hashCodes
                 handle.setObject( object );
-                addHandleToMaps( handle );
+                this.objectStore.addHandle( handle, object );
             }
 
             if ( this.maintainTms ) {

Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2008-01-16 14:02:02 UTC (rev 17895)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -31,7 +31,7 @@
 
     public void setWorkingMemoryEventSupport(WorkingMemoryEventSupport workingMemoryEventSupport);
 
-    public ObjectHashMap getAssertMap();
+    ///public ObjectHashMap getAssertMap();
 
     public void setAgendaEventSupport(AgendaEventSupport agendaEventSupport);
 
@@ -43,7 +43,9 @@
 
     public long getNextPropagationIdCounter();
 
-    public ObjectHashMap getFactHandleMap();
+    //public ObjectHashMap getFactHandleMap()
+    
+    public ObjectStore getObjectStore();
 
     public TruthMaintenanceSystem getTruthMaintenanceSystem();
 

Added: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/ObjectStore.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/ObjectStore.java	                        (rev 0)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/ObjectStore.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -0,0 +1,45 @@
+package org.drools.common;
+
+import java.util.Iterator;
+
+import org.drools.ObjectFilter;
+
+public interface ObjectStore {
+
+    public abstract int size();
+
+    public abstract boolean isEmpty();
+
+    public abstract Object getObjectForHandle(InternalFactHandle handle);
+
+    public abstract InternalFactHandle getHandleForObject(Object object);
+
+    public abstract void updateHandle(InternalFactHandle handle,
+                                      Object object);
+
+    public abstract void addHandle(InternalFactHandle handle,
+                                   Object object);
+
+    public abstract void removeHandle(final InternalFactHandle handle);
+
+    /**
+     * This class is not thread safe, changes to the working memory during iteration may give unexpected results
+     */
+    public abstract Iterator iterateObjects();
+
+    /**
+     * This class is not thread safe, changes to the working memory during iteration may give unexpected results
+     */
+    public abstract Iterator iterateObjects(ObjectFilter filter);
+
+    /**
+     * This class is not thread safe, changes to the working memory during iteration may give unexpected results
+     */
+    public abstract Iterator iterateFactHandles();
+
+    /**
+     * This class is not thread safe, changes to the working memory during iteration may give unexpected results
+     */
+    public abstract Iterator iterateFactHandles(ObjectFilter filter);
+
+}
\ No newline at end of file

Added: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java	                        (rev 0)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -0,0 +1,169 @@
+/**
+ * 
+ */
+package org.drools.common;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.concurrent.locks.Lock;
+
+import org.drools.ObjectFilter;
+import org.drools.RuleBaseConfiguration;
+import org.drools.RuleBaseConfiguration.AssertBehaviour;
+import org.drools.base.ShadowProxy;
+import org.drools.util.JavaIteratorAdapter;
+import org.drools.util.ObjectHashMap;
+import org.drools.util.AbstractHashTable.HashTableIterator;
+
+public class  SingleThreadedObjectStore implements Serializable, ObjectStore {
+    /** Object-to-handle mapping. */
+    private ObjectHashMap                          assertMap;
+    private ObjectHashMap                          identityMap;
+    private AssertBehaviour                        behaviour;
+    private Lock                                   lock;
+    
+    public SingleThreadedObjectStore(RuleBaseConfiguration conf, Lock lock) {
+        this.behaviour = conf.getAssertBehaviour();
+        this.lock = lock;
+        
+        this.assertMap = new ObjectHashMap();            
+
+        if ( this.behaviour == AssertBehaviour.IDENTITY ) {
+            this.assertMap.setComparator( new IdentityAssertMapComparator() );
+            this.identityMap = assertMap;
+        } else {
+            this.assertMap.setComparator( new EqualityAssertMapComparator() );
+            this.identityMap = new ObjectHashMap();
+            this.identityMap.setComparator( new IdentityAssertMapComparator() );
+        }            
+    }
+    
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#size()
+     */
+    public int size() {
+        return this.assertMap.size();
+    }
+    
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#isEmpty()
+     */
+    public boolean isEmpty() {
+        return this.assertMap != null;
+    }
+    
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#getObjectForHandle(org.drools.common.InternalFactHandle)
+     */
+    public Object getObjectForHandle(InternalFactHandle handle) {
+        try {
+            this.lock.lock();
+
+            // Make sure the FactHandle is from this WorkingMemory
+            final InternalFactHandle internalHandle = (InternalFactHandle) this.assertMap.get( handle );
+            if ( internalHandle == null ) {
+                return null;
+            }
+
+            Object object = internalHandle.getObject();
+
+            if ( object != null && internalHandle.isShadowFact() ) {
+                object = ((ShadowProxy) object).getShadowedObject();
+            }
+
+            return object;
+        } finally {
+            this.lock.unlock();
+        }            
+    }
+            
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#getHandleForObject(java.lang.Object)
+     */
+    public InternalFactHandle getHandleForObject(Object object){
+        return (InternalFactHandle) this.assertMap.get( object );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#updateHandle(org.drools.common.InternalFactHandle, java.lang.Object)
+     */
+    public void updateHandle(InternalFactHandle handle, Object object){
+        this.assertMap.remove( handle );
+        Object oldObject = handle.getObject();
+        if ( oldObject instanceof ShadowProxy ) {
+            ((ShadowProxy) oldObject).setShadowedObject( object );
+        } else {
+            handle.setObject( object );
+        }
+        this.assertMap.put( handle,
+                            handle,
+                            false );
+    }
+    
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#addHandle(org.drools.common.InternalFactHandle, java.lang.Object)
+     */
+    public void addHandle(InternalFactHandle handle, Object object) {
+        this.assertMap.put( handle,
+                            handle,
+                            false );
+        if ( this.behaviour == AssertBehaviour.EQUALITY ) {
+            this.identityMap.put( handle,
+                                  handle,
+                                  false );
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#removeHandle(org.drools.common.InternalFactHandle)
+     */
+    public void removeHandle(final InternalFactHandle handle) {
+        this.assertMap.remove( handle );
+        if ( this.behaviour == AssertBehaviour.EQUALITY ) {
+            this.identityMap.remove( handle );
+        }
+    }      
+    
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#iterateObjects()
+     */
+    public Iterator iterateObjects() {
+        HashTableIterator iterator = new HashTableIterator( this.assertMap );
+        iterator.reset();
+        return new JavaIteratorAdapter( iterator,
+                                        JavaIteratorAdapter.OBJECT );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#iterateObjects(org.drools.ObjectFilter)
+     */
+    public Iterator iterateObjects(ObjectFilter filter) {
+        HashTableIterator iterator = new HashTableIterator( this.assertMap );
+        iterator.reset();
+        return new JavaIteratorAdapter( iterator,
+                                        JavaIteratorAdapter.OBJECT,
+                                        filter );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#iterateFactHandles()
+     */
+    public Iterator iterateFactHandles() {
+        HashTableIterator iterator = new HashTableIterator( this.assertMap );
+        iterator.reset();
+        return new JavaIteratorAdapter( iterator,
+                                        JavaIteratorAdapter.FACT_HANDLE );
+    }
+
+    /* (non-Javadoc)
+     * @see org.drools.common.ObjectStore#iterateFactHandles(org.drools.ObjectFilter)
+     */
+    public Iterator iterateFactHandles(ObjectFilter filter) {
+        HashTableIterator iterator = new HashTableIterator( this.assertMap );
+        iterator.reset();
+        return new JavaIteratorAdapter( iterator,
+                                        JavaIteratorAdapter.FACT_HANDLE,
+                                        filter );
+    }        
+    
+}
\ No newline at end of file

Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/AgendaEventSupport.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/AgendaEventSupport.java	2008-01-16 14:02:02 UTC (rev 17895)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/AgendaEventSupport.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -20,6 +20,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.drools.WorkingMemory;
 import org.drools.common.InternalWorkingMemory;
@@ -36,7 +37,7 @@
      * 
      */
     private static final long serialVersionUID = 400L;
-    private final List        listeners        = Collections.synchronizedList( new ArrayList() );
+    private final List<AgendaEventListener>        listeners        = new CopyOnWriteArrayList<AgendaEventListener>();
 
     public AgendaEventSupport() {
     }
@@ -52,6 +53,7 @@
     }
 
     public List getEventListeners() {
+        
         return Collections.unmodifiableList( this.listeners );
     }
 

Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java	2008-01-16 14:02:02 UTC (rev 17895)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -26,6 +26,7 @@
 import org.drools.rule.Package;
 
 import java.util.Iterator;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * 
@@ -38,7 +39,7 @@
      * 
      */
     private static final long                 serialVersionUID = 400L;
-    private final List<RuleBaseEventListener> listeners        = Collections.synchronizedList( new ArrayList<RuleBaseEventListener>() );
+    private final List<RuleBaseEventListener> listeners        = new CopyOnWriteArrayList<RuleBaseEventListener>();
     private transient RuleBase                ruleBase;
 
     public RuleBaseEventSupport(final RuleBase ruleBase) {

Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java	2008-01-16 14:02:02 UTC (rev 17895)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -20,6 +20,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.drools.common.InternalWorkingMemory;
 import org.drools.ruleflow.instance.RuleFlowNodeInstance;
@@ -33,8 +34,8 @@
     implements
     Serializable {
 
-    private static final long serialVersionUID = 400L;
-    private final List        listeners        = Collections.synchronizedList( new ArrayList() );
+    private static final long                 serialVersionUID = 400L;
+    private final List<RuleFlowEventListener> listeners        = new CopyOnWriteArrayList<RuleFlowEventListener>();
 
     public RuleFlowEventSupport() {
     }
@@ -61,161 +62,143 @@
         return this.listeners.isEmpty();
     }
 
-    public void fireBeforeRuleFlowProcessStarted(
-            final RuleFlowProcessInstance instance,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireBeforeRuleFlowProcessStarted(final RuleFlowProcessInstance instance,
+                                                 final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowStartedEvent event = new RuleFlowStartedEvent(instance);
+        final RuleFlowStartedEvent event = new RuleFlowStartedEvent( instance );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .beforeRuleFlowStarted(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).beforeRuleFlowStarted( event,
+                                                                                     workingMemory );
         }
     }
 
-    public void fireAfterRuleFlowProcessStarted(
-            final RuleFlowProcessInstance instance,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireAfterRuleFlowProcessStarted(final RuleFlowProcessInstance instance,
+                                                final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowStartedEvent event = new RuleFlowStartedEvent(instance);
+        final RuleFlowStartedEvent event = new RuleFlowStartedEvent( instance );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .afterRuleFlowStarted(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).afterRuleFlowStarted( event,
+                                                                                    workingMemory );
         }
     }
 
-    public void fireBeforeRuleFlowProcessCompleted(
-            final RuleFlowProcessInstance instance,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireBeforeRuleFlowProcessCompleted(final RuleFlowProcessInstance instance,
+                                                   final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowCompletedEvent event = new RuleFlowCompletedEvent(
-                instance);
+        final RuleFlowCompletedEvent event = new RuleFlowCompletedEvent( instance );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .beforeRuleFlowCompleted(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).beforeRuleFlowCompleted( event,
+                                                                                       workingMemory );
         }
     }
 
-    public void fireAfterRuleFlowProcessCompleted(
-            final RuleFlowProcessInstance instance,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireAfterRuleFlowProcessCompleted(final RuleFlowProcessInstance instance,
+                                                  final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowCompletedEvent event = new RuleFlowCompletedEvent(
-                instance);
+        final RuleFlowCompletedEvent event = new RuleFlowCompletedEvent( instance );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .afterRuleFlowCompleted(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).afterRuleFlowCompleted( event,
+                                                                                      workingMemory );
         }
     }
 
-    public void fireBeforeRuleFlowGroupActivated(
-            final RuleFlowGroup ruleFlowGroup,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireBeforeRuleFlowGroupActivated(final RuleFlowGroup ruleFlowGroup,
+                                                 final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowGroupActivatedEvent event = new RuleFlowGroupActivatedEvent(
-                ruleFlowGroup);
+        final RuleFlowGroupActivatedEvent event = new RuleFlowGroupActivatedEvent( ruleFlowGroup );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .beforeRuleFlowGroupActivated(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).beforeRuleFlowGroupActivated( event,
+                                                                                            workingMemory );
         }
     }
 
-    public void fireAfterRuleFlowGroupActivated(
-            final RuleFlowGroup ruleFlowGroup,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireAfterRuleFlowGroupActivated(final RuleFlowGroup ruleFlowGroup,
+                                                final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowGroupActivatedEvent event = new RuleFlowGroupActivatedEvent(
-                ruleFlowGroup);
+        final RuleFlowGroupActivatedEvent event = new RuleFlowGroupActivatedEvent( ruleFlowGroup );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .afterRuleFlowGroupActivated(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).afterRuleFlowGroupActivated( event,
+                                                                                           workingMemory );
         }
     }
 
-    public void fireBeforeRuleFlowGroupDeactivated(
-            final RuleFlowGroup ruleFlowGroup,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireBeforeRuleFlowGroupDeactivated(final RuleFlowGroup ruleFlowGroup,
+                                                   final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowGroupDeactivatedEvent event = new RuleFlowGroupDeactivatedEvent(
-                ruleFlowGroup);
+        final RuleFlowGroupDeactivatedEvent event = new RuleFlowGroupDeactivatedEvent( ruleFlowGroup );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .beforeRuleFlowGroupDeactivated(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).beforeRuleFlowGroupDeactivated( event,
+                                                                                              workingMemory );
         }
     }
 
-    public void fireAfterRuleFlowGroupDeactivated(
-            final RuleFlowGroup ruleFlowGroup,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireAfterRuleFlowGroupDeactivated(final RuleFlowGroup ruleFlowGroup,
+                                                  final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowGroupDeactivatedEvent event = new RuleFlowGroupDeactivatedEvent(
-                ruleFlowGroup);
+        final RuleFlowGroupDeactivatedEvent event = new RuleFlowGroupDeactivatedEvent( ruleFlowGroup );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .afterRuleFlowGroupDeactivated(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).afterRuleFlowGroupDeactivated( event,
+                                                                                             workingMemory );
         }
     }
 
-    public void fireBeforeRuleFlowNodeTriggered(
-            final RuleFlowNodeInstance ruleFlowNodeInstance,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireBeforeRuleFlowNodeTriggered(final RuleFlowNodeInstance ruleFlowNodeInstance,
+                                                final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent(
-                ruleFlowNodeInstance);
+        final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent( ruleFlowNodeInstance );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .beforeRuleFlowNodeTriggered(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).beforeRuleFlowNodeTriggered( event,
+                                                                                           workingMemory );
         }
     }
 
-    public void fireAfterRuleFlowNodeTriggered(
-            final RuleFlowNodeInstance ruleFlowNodeInstance,
-            final InternalWorkingMemory workingMemory) {
-        if (this.listeners.isEmpty()) {
+    public void fireAfterRuleFlowNodeTriggered(final RuleFlowNodeInstance ruleFlowNodeInstance,
+                                               final InternalWorkingMemory workingMemory) {
+        if ( this.listeners.isEmpty() ) {
             return;
         }
 
-        final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent(
-                ruleFlowNodeInstance);
+        final RuleFlowNodeTriggeredEvent event = new RuleFlowNodeTriggeredEvent( ruleFlowNodeInstance );
 
-        for (int i = 0, size = this.listeners.size(); i < size; i++) {
-            ((RuleFlowEventListener) this.listeners.get(i))
-                    .afterRuleFlowNodeTriggered(event, workingMemory);
+        for ( int i = 0, size = this.listeners.size(); i < size; i++ ) {
+            ((RuleFlowEventListener) this.listeners.get( i )).afterRuleFlowNodeTriggered( event,
+                                                                                          workingMemory );
         }
     }
 

Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/WorkingMemoryEventSupport.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/WorkingMemoryEventSupport.java	2008-01-16 14:02:02 UTC (rev 17895)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/event/WorkingMemoryEventSupport.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -20,6 +20,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.drools.FactHandle;
 import org.drools.common.InternalWorkingMemory;
@@ -34,8 +35,8 @@
     /**
      * 
      */
-    private static final long serialVersionUID = 400L;
-    private final List        listeners        = Collections.synchronizedList( new ArrayList() );
+    private static final long                      serialVersionUID = 400L;
+    private final List<WorkingMemoryEventListener> listeners        = new CopyOnWriteArrayList<WorkingMemoryEventListener>();
 
     public WorkingMemoryEventSupport() {
     }

Modified: labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/reteoo/ReteStatelessSessionResult.java
===================================================================
--- labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/reteoo/ReteStatelessSessionResult.java	2008-01-16 14:02:02 UTC (rev 17895)
+++ labs/jbossrules/branches/temporal_rete/drools-core/src/main/java/org/drools/reteoo/ReteStatelessSessionResult.java	2008-01-16 14:06:11 UTC (rev 17896)
@@ -6,6 +6,7 @@
 import org.drools.QueryResults;
 import org.drools.StatelessSessionResult;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.common.ObjectStore;
 import org.drools.spi.GlobalResolver;
 import org.drools.util.JavaIteratorAdapter;
 import org.drools.util.ObjectHashMap;
@@ -13,12 +14,13 @@
 
 public class ReteStatelessSessionResult implements StatelessSessionResult {
     private transient InternalWorkingMemory workingMemory;
-    private ObjectHashMap assertMap;
+    // @TODO ObjectStore is currently too heavy for serialisation, but done to fix for now
+    private ObjectStore objectStore;
     private GlobalResolver globalResolver;
     
     public ReteStatelessSessionResult(InternalWorkingMemory workingMemory, GlobalResolver globalResolver) {
         this.workingMemory = workingMemory;
-        this.assertMap = workingMemory.getAssertMap();
+        this.objectStore = workingMemory.getObjectStore();
         this.globalResolver = globalResolver;
     }
 
@@ -32,18 +34,11 @@
     }
 
     public Iterator iterateObjects() {
-        HashTableIterator iterator = new HashTableIterator( this.assertMap );
-        iterator.reset();
-        return new JavaIteratorAdapter( iterator,
-                                        JavaIteratorAdapter.OBJECT );
+        return this.objectStore.iterateObjects();
     }
 
     public Iterator iterateObjects(ObjectFilter filter) {
-        HashTableIterator iterator = new HashTableIterator( this.assertMap );
-        iterator.reset();
-        return new JavaIteratorAdapter( iterator,
-                                        JavaIteratorAdapter.OBJECT,
-                                        filter );
+        return this.objectStore.iterateObjects( filter );
     }
     
     public Object getGlobal(String identifier) {




More information about the jboss-svn-commits mailing list