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);
+ }
}
}