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 2012/05/03 09:16:53 UTC

svn commit: r1333327 - /felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java

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 },