Forgot to reverse the order in which services are started and optional callbacks invoked.
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@738508 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java b/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java
index d317267..8a4d6e1 100644
--- a/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java
+++ b/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceDependency.java
@@ -58,6 +58,29 @@
private Object m_defaultImplementation;
private Object m_defaultImplementationInstance;
+ private static final Comparator COMPARATOR = new Comparator() {
+ public int getRank(ServiceReference ref) {
+ Object ranking = ref.getProperty(Constants.SERVICE_RANKING);
+ if (ranking != null && (ranking instanceof Integer)) {
+ return ((Integer) ranking).intValue();
+ }
+ return 0;
+ }
+
+ public int compare(Object a, Object b) {
+ ServiceReference ra = (ServiceReference) a, rb = (ServiceReference) b;
+ int ranka = getRank(ra);
+ int rankb = getRank(rb);
+ if (ranka < rankb) {
+ return -1;
+ }
+ else if (ranka > rankb) {
+ return 1;
+ }
+ return 0;
+ }
+ };
+
/**
* Creates a new service dependency.
*
@@ -109,27 +132,7 @@
try {
refs = m_context.getServiceReferences(m_trackedServiceName.getName(), m_trackedServiceFilter);
if (refs != null) {
- Arrays.sort(refs, new Comparator() {
- public int getRank(ServiceReference ref) {
- Object ranking = ref.getProperty(Constants.SERVICE_RANKING);
- if (ranking != null && (ranking instanceof Integer)) {
- return ((Integer) ranking).intValue();
- }
- return 0;
- }
-
- public int compare(Object a, Object b) {
- ServiceReference ra = (ServiceReference) a, rb = (ServiceReference) b;
- int ranka = getRank(ra);
- int rankb = getRank(rb);
- if (ranka < rankb) {
- return -1;
- }
- else if (ranka > rankb) {
- return 1;
- }
- return 0;
- }});
+ Arrays.sort(refs, COMPARATOR);
ref = refs[0];
}
}
diff --git a/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceImpl.java b/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceImpl.java
index b19f152..a9a744c 100644
--- a/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceImpl.java
+++ b/dependencymanager/src/main/java/org/apache/felix/dependencymanager/ServiceImpl.java
@@ -430,10 +430,10 @@
configureService(state);
// inform the state listeners we're starting
stateListenersStarting();
- // start tracking optional services
- startTrackingOptional(state);
// invoke the start callback, since we're now ready to be used
invoke(start);
+ // start tracking optional services
+ startTrackingOptional(state);
// register the service in the framework's service registry
registerService();
// inform the state listeners we've started
@@ -451,10 +451,10 @@
stateListenersStopping();
// then, unregister the service from the framework
unregisterService();
- // invoke the stop callback
- invoke(stop);
// stop tracking optional services
stopTrackingOptional(state);
+ // invoke the stop callback
+ invoke(stop);
// inform the state listeners we've stopped
stateListenersStopped();
// invoke the destroy callback