You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ui...@apache.org on 2013/10/11 11:23:15 UTC

svn commit: r1531237 - /felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java

Author: uiterlix
Date: Fri Oct 11 09:23:15 2013
New Revision: 1531237

URL: http://svn.apache.org/r1531237
Log:
ServiceTracker did note take the trackAllAspects setting into account in the setInitial method causing the ServiceDependencyImpl to remove rather than swap services in some occasions.

Modified:
    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/ServiceTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java?rev=1531237&r1=1531236&r2=1531237&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 11 09:23:15 2013
@@ -1051,38 +1051,43 @@ public class ServiceTracker implements S
 		    if (list == null) {
 		        return;
 		    }
-		    Map highestRankedServiceMap = new HashMap(); // <Long, RankedService>
-		    for (int i = 0; i < list.length; i++) {
-		    	ServiceReference sr = (ServiceReference) list[i];
-		    	if (sr != null) {
-			    	Long serviceId = ServiceUtil.getServiceIdAsLong(sr);
-			    	int ranking = ServiceUtil.getRanking(sr);
-			    	
-			    	RankedService rs = (RankedService) highestRankedServiceMap.get(serviceId);
-			    	if (rs == null) {
-			    	    // the service did not exist yet in our map
-			    	    highestRankedServiceMap.put(serviceId, new RankedService(ranking, sr));
-			    	}
-			    	else if (ranking > rs.getRanking()) {
-                        // the service replaces a lower ranked one
-			    	    hide(rs.getServiceReference());
-			    	    rs.update(ranking, sr);
-			    	}
-			    	else {
-                        // the service does NOT replace a lower ranked one
-			    	    hide(sr);
+		    if (m_trackAllAspects) {
+		    	// not hiding aspects
+		    	super.setInitial(list);
+		    } else { 
+			    Map highestRankedServiceMap = new HashMap(); // <Long, RankedService>
+			    for (int i = 0; i < list.length; i++) {
+			    	ServiceReference sr = (ServiceReference) list[i];
+			    	if (sr != null) {
+				    	Long serviceId = ServiceUtil.getServiceIdAsLong(sr);
+				    	int ranking = ServiceUtil.getRanking(sr);
+				    	
+				    	RankedService rs = (RankedService) highestRankedServiceMap.get(serviceId);
+				    	if (rs == null) {
+				    	    // the service did not exist yet in our map
+				    	    highestRankedServiceMap.put(serviceId, new RankedService(ranking, sr));
+				    	}
+				    	else if (ranking > rs.getRanking()) {
+	                        // the service replaces a lower ranked one
+				    	    hide(rs.getServiceReference());
+				    	    rs.update(ranking, sr);
+				    	}
+				    	else {
+	                        // the service does NOT replace a lower ranked one
+				    	    hide(sr);
+				    	}
 			    	}
-		    	}
-		    }
-		    if (highestRankedServiceMap.size() > 0) {
-		        Object[] result = new Object[highestRankedServiceMap.size()];
-		        int index = 0;
-		        for(Iterator it = highestRankedServiceMap.entrySet().iterator(); it.hasNext(); ) {
-		        	Entry entry = (Entry) it.next();
-		        	result[index] = ((RankedService)entry.getValue()).getServiceReference();
-		        	index++;
-		        }
-		        super.setInitial(result);	    	
+			    }
+			    if (highestRankedServiceMap.size() > 0) {
+			        Object[] result = new Object[highestRankedServiceMap.size()];
+			        int index = 0;
+			        for(Iterator it = highestRankedServiceMap.entrySet().iterator(); it.hasNext(); ) {
+			        	Entry entry = (Entry) it.next();
+			        	result[index] = ((RankedService)entry.getValue()).getServiceReference();
+			        	index++;
+			        }
+			        super.setInitial(result);	    	
+			    }
 		    }
 		}