[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