Author: uiterlix
Date: Thu May  3 07:16:53 2012
New Revision: 1333327

URL: http://svn.apache.org/viewvc?rev=1333327&view=rev
Log:
Added an IllegalStateException in ServiceDependencyImpl in case a swap is about 
to be performed with two services having the same service ranking.

Modified:
    
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java

Modified: 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java?rev=1333327&r1=1333326&r2=1333327&view=diff
==============================================================================
--- 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
 (original)
+++ 
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
 Thu May  3 07:16:53 2012
@@ -715,6 +715,14 @@ public class ServiceDependencyImpl exten
     
        private void invokeSwappedCallback(DependencyService component, 
ServiceReference previousReference, Object previous, ServiceReference 
currentServiceReference,
                        Object current) {
+               // sanity check on the service references
+               Integer oldRank = (Integer) 
previousReference.getProperty(Constants.SERVICE_RANKING);
+               Integer newRank = (Integer) 
currentServiceReference.getProperty(Constants.SERVICE_RANKING);
+               
+               if (oldRank != null && newRank != null && 
oldRank.equals(newRank)) {
+                       throw new IllegalStateException("Attempt to swap a 
service for a service with the same rank! previousReference: " + 
previousReference + ", currentReference: " + currentServiceReference);
+               }
+               
                component.invokeCallbackMethod(getCallbackInstances(component), 
m_callbackSwapped, new Class[][] { { m_trackedServiceName, m_trackedServiceName 
},
                                { Object.class, Object.class }, { 
ServiceReference.class, m_trackedServiceName, ServiceReference.class, 
m_trackedServiceName },
                                { ServiceReference.class, Object.class, 
ServiceReference.class, Object.class } }, new Object[][] { { previous, current 
},


Reply via email to