Author: uiterlix
Date: Fri Oct 25 11:13:16 2013
New Revision: 1535688

URL: http://svn.apache.org/r1535688
Log:
Changed map of tracked items to a LinkedHashMap to make the ServiceTracker 
behavior on close more deterministic.

Modified:
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java?rev=1535688&r1=1535687&r2=1535688&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java
 Fri Oct 25 11:13:16 2013
@@ -17,9 +17,9 @@ package org.apache.felix.dm.tracker;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.Map;
 
 /**
  * Abstract class to track items. If a Tracker is reused (closed then 
reopened),
@@ -38,11 +38,12 @@ abstract class AbstractTracked {
        private static final boolean            DEBUG   = false;
 
        /**
-        * Map of tracked items to customized objects.
+        * Ordered Map of tracked items to customized objects. An ordered map 
is used to
+        * provide a predictable order in the getTracked() method.
         * 
         * @GuardedBy this
         */
-       private Map                     tracked;
+       private LinkedHashMap                   tracked;
 
        /**
         * Modification count. This field is initialized to zero and 
incremented by
@@ -99,14 +100,14 @@ abstract class AbstractTracked {
         * AbstractTracked constructor.
         */
        AbstractTracked() {
-           this.tracked = new HashMap();
+           this.tracked = new LinkedHashMap();
            trackingCount = 0;
            adding = new ArrayList(6);
            initial = new LinkedList();
            closed = false;
        }
        
-       void setTracked(HashMap map) {
+       void setTracked(LinkedHashMap map) {
            this.tracked = map;
        }
 

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java?rev=1535688&r1=1535687&r2=1535688&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
 Fri Oct 25 11:13:16 2013
@@ -20,6 +20,7 @@ import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -1356,7 +1357,7 @@ public class ServiceTracker implements S
                        customizer.removedService((ServiceReference) item, 
object);
                }
                
-               class HashMapCache extends HashMap {
+               class HashMapCache extends LinkedHashMap {
                    public Object put(Object key, Object value) {
                        addHighestTrackedCache((ServiceReference) key);
                        return super.put(key, value);


Reply via email to