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