[jboss-svn-commits] JBL Code SVN: r13094 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: util and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Jul 4 18:50:35 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-07-04 18:50:35 -0400 (Wed, 04 Jul 2007)
New Revision: 13094

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/MemoryVisitor.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
Log:
JBRULES-971 concurrent issue on Rete node's ObjectTypeConf buildCache
-In cases where ObjectHashMap is used in the Rete network itself, it cannot use iterator() which expects a single threaded environment, instead it must use newIterator()

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2007-07-04 22:31:51 UTC (rev 13093)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeObjectSinkAdapter.java	2007-07-04 22:50:35 UTC (rev 13094)
@@ -179,7 +179,7 @@
         final List sinks = new ArrayList();
 
         //iterate twice as custom iterator is immutable
-        final Iterator mapIt = this.hashedSinkMap.iterator();
+        final Iterator mapIt = this.hashedSinkMap.newIterator();
         for ( ObjectHashMap.ObjectEntry e = (ObjectHashMap.ObjectEntry) mapIt.next(); e != null; ) {
 
             sinks.add( e.getValue() );
@@ -350,7 +350,7 @@
                     }
                 }
             } else if ( this.hashedSinkMap != null ) {
-                final Iterator it = this.hashedSinkMap.iterator();
+                final Iterator it = this.hashedSinkMap.newIterator();
                 for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
                     final ObjectSink sink = (ObjectSink) entry.getValue();
                     sink.retractObject( handle,
@@ -395,7 +395,7 @@
         }
 
         if ( this.hashedSinkMap != null ) {
-            final Iterator it = this.hashedSinkMap.iterator();
+            final Iterator it = this.hashedSinkMap.newIterator();
             for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
                 final ObjectSink sink = (ObjectSink) entry.getValue();
                 list.add( sink );

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/MemoryVisitor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/MemoryVisitor.java	2007-07-04 22:31:51 UTC (rev 13093)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/MemoryVisitor.java	2007-07-04 22:50:35 UTC (rev 13094)
@@ -38,7 +38,7 @@
     public void visitRete(final Rete rete) {
         final ObjectHashMap map = rete.getObjectTypeNodes();
 
-        final Iterator it = map.iterator();
+        final Iterator it = map.newIterator();
         for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
             visit( entry.getValue() );
         }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java	2007-07-04 22:31:51 UTC (rev 13093)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Rete.java	2007-07-04 22:50:35 UTC (rev 13094)
@@ -417,7 +417,7 @@
         private void buildCache(final Object object) throws FactException {
             final List cache = new ArrayList();
 
-            final Iterator it = ruleBase.getRete().getObjectTypeNodes().iterator();
+            final Iterator it = ruleBase.getRete().getObjectTypeNodes().newIterator();
             for ( ObjectEntry entry = (ObjectEntry) it.next(); entry != null; entry = (ObjectEntry) it.next() ) {
                 final ObjectTypeNode node = (ObjectTypeNode) entry.getValue();
                 if ( node.matches( object ) ) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2007-07-04 22:31:51 UTC (rev 13093)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java	2007-07-04 22:50:35 UTC (rev 13094)
@@ -59,6 +59,13 @@
         this.iterator.reset();
         return this.iterator;
     }
+    
+    public Iterator newIterator() {
+        HashTableIterator iterator = new HashTableIterator( this );
+        iterator.reset();
+        return iterator;
+        
+    }
 
     public void setComparator(final ObjectComparator comparator) {
         this.comparator = comparator;




More information about the jboss-svn-commits mailing list