Changed map of tracked items to a LinkedHashMap to make the ServiceTracker behavior on close more deterministic.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1535688 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java
index db9bc17..512f66b 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/AbstractTracked.java
@@ -17,9 +17,9 @@
 
 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 @@
 	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 @@
 	 * 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;
 	}
 
diff --git a/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java b/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
index 97458d2..01102c6 100644
--- a/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
+++ b/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
@@ -20,6 +20,7 @@
 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 @@
 			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);