Author: indika
Date: Thu May 17 02:33:35 2007
New Revision: 538847

URL: http://svn.apache.org/viewvc?view=rev&rev=538847
Log:
Fixed concurrent modification exception throwing when reporting endpoints 
statistics 

Modified:
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/EndPointStatisticsStack.java
    
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/SequenceStatisticsStack.java

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/EndPointStatisticsStack.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/EndPointStatisticsStack.java?view=diff&rev=538847&r1=538846&r2=538847
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/EndPointStatisticsStack.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/EndPointStatisticsStack.java
 Thu May 17 02:33:35 2007
@@ -32,7 +32,7 @@
 public class EndPointStatisticsStack implements StatisticsStack {
 
     /** list of endpoint statistics */
-    private ArrayList endpointStatistics;
+    private List endpointStatistics;
     /** To decide whether the reporting of the in flow statistics have been 
completed*/
     private boolean isCompleteInFlowStatisicsReport = false;
 
@@ -94,13 +94,9 @@
     public void reportToStatisticsCollector(StatisticsCollector 
statisticsCollector,
                                             boolean isFault, String name) {
         if (endpointStatistics != null && !endpointStatistics.isEmpty()) {
-
             List tobeRemoved = new ArrayList();
-
             for (Iterator epIterator = endpointStatistics.iterator();
                  epIterator.hasNext();) {
-                System.out.println(Thread.currentThread().getName());
-                Thread.dumpStack();
                 Object statisticsObj = epIterator.next();
                 if (statisticsObj instanceof EndPointStatistics) {
                     EndPointStatistics statistics = (EndPointStatistics) 
statisticsObj;
@@ -123,7 +119,6 @@
                     }
                 }
             }
-
             endpointStatistics.removeAll(tobeRemoved);
         }
     }
@@ -135,6 +130,7 @@
     public void reportAllToStatisticsCollector(StatisticsCollector 
statisticsCollector,
                                                boolean isFault) {
         if (endpointStatistics != null && !endpointStatistics.isEmpty()) {
+            List tobeRemoved = new ArrayList();
             for (Iterator epIterator = endpointStatistics.iterator();
                  epIterator.hasNext();) {
                 Object statisticsObj = epIterator.next();
@@ -153,11 +149,12 @@
                             
statisticsCollector.reportForEndPoint(statistics.endPointName,
                                     true, statistics.inTimeForOutFlow,
                                     System.currentTimeMillis(), isFault);
-                            endpointStatistics.remove(statistics);
+                            tobeRemoved.add(statistics);
                         }
                     }
                 }
             }
+            endpointStatistics.removeAll(tobeRemoved);
         }
         isCompleteInFlowStatisicsReport = true;
     }

Modified: 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/SequenceStatisticsStack.java
URL: 
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/SequenceStatisticsStack.java?view=diff&rev=538847&r1=538846&r2=538847
==============================================================================
--- 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/SequenceStatisticsStack.java
 (original)
+++ 
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/statistics/impl/SequenceStatisticsStack.java
 Thu May 17 02:33:35 2007
@@ -23,6 +23,7 @@
 
 import java.util.ArrayList;
 import java.util.Iterator;
+import java.util.List;
 
 /**
  * The data structure to hold statistics related to Sequences
@@ -32,7 +33,7 @@
 public class SequenceStatisticsStack implements StatisticsStack {
 
     /** The list to hols SequenceStatistics */
-    private ArrayList sequenceStatisticsList = new ArrayList();
+    private List sequenceStatisticsList = new ArrayList();
 
     /**
      * To put a statistics
@@ -66,6 +67,7 @@
     public void reportToStatisticsCollector(StatisticsCollector 
statisticsCollector,
                                             boolean isFault, String name) {
         if (!sequenceStatisticsList.isEmpty()) {
+            List tobeRemoved = new ArrayList();
             for (Iterator seqIterator = sequenceStatisticsList.iterator();
                  seqIterator.hasNext();) {
                 SequenceStatistics sequenceStatistics =
@@ -79,9 +81,10 @@
                                 !sequenceStatistics.isInFlow, 
sequenceStatistics.initTime,
                                 System.currentTimeMillis(), 
sequenceStatistics.isFault);
                     }
-                    sequenceStatisticsList.remove(sequenceStatistics);
+                    tobeRemoved.add(sequenceStatistics);
                 }
             }
+            sequenceStatisticsList.removeAll(tobeRemoved);
         }
     }
 
@@ -143,6 +146,21 @@
             isInFlow = inFlow;
             isStatisticsEnable = statisticsEnable;
             this.isFault = isFault;
+        }
+
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            final SequenceStatistics that = (SequenceStatistics) o;
+
+            if (!sequenceName.equals(that.sequenceName)) return false;
+
+            return true;
+        }
+
+        public int hashCode() {
+            return sequenceName.hashCode();
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to