You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2010/01/14 12:57:26 UTC
svn commit: r899168 -
/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
Author: mahrwald
Date: Thu Jan 14 11:57:25 2010
New Revision: 899168
URL: http://svn.apache.org/viewvc?rev=899168&view=rev
Log:
ARIES-116 Sort providers by service ranking as the unit test expects
Modified:
incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
Modified: incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java?rev=899168&r1=899167&r2=899168&view=diff
==============================================================================
--- incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java (original)
+++ incubator/aries/trunk/jpa/jpa-container/src/main/java/org/apache/aries/jpa/container/impl/PersistenceBundleManager.java Thu Jan 14 11:57:25 2010
@@ -45,6 +45,7 @@
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
+import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.Version;
import org.osgi.util.tracker.BundleTracker;
@@ -427,7 +428,6 @@
private synchronized ServiceReference getBestProvider(String providerClass, VersionRange matchingCriteria)
{
if(!!!persistenceProviders.isEmpty()) {
-
List<ServiceReference> refs = new ArrayList<ServiceReference>();
if((providerClass != null && !!!"".equals(providerClass))
@@ -445,24 +445,14 @@
if(!!!refs.isEmpty()) {
//Sort the list in DESCENDING ORDER
- Collections.sort(refs, new Comparator<ServiceReference>() {
-
- //TODO we may wish to use Ranking, then versions for equal ranks
- public int compare(ServiceReference object1, ServiceReference object2)
- {
- Version v1 = object1.getBundle().getVersion();
- Version v2 = object2.getBundle().getVersion();
- return v2.compareTo(v1);
- }
- });
-
+ Collections.sort(refs, new ProviderServiceComparator());
return refs.get(0);
} else {
//TODO no matching providers for matching criteria
}
} else {
refs.addAll(persistenceProviders);
- Collections.sort(refs);
+ Collections.sort(refs, new ProviderServiceComparator());
return refs.get(0);
}
} else {
@@ -470,4 +460,21 @@
}
return null;
}
+
+ private static class ProviderServiceComparator implements Comparator<ServiceReference> {
+ public int compare(ServiceReference object1, ServiceReference object2)
+ {
+ Version v1 = object1.getBundle().getVersion();
+ Version v2 = object2.getBundle().getVersion();
+ int res = v2.compareTo(v1);
+ if (res == 0) {
+ Integer rank1 = (Integer) object1.getProperty(Constants.SERVICE_RANKING);
+ Integer rank2 = (Integer) object2.getProperty(Constants.SERVICE_RANKING);
+ if (rank1 != null && rank2 != null)
+ res = rank2.compareTo(rank1);
+ }
+
+ return res;
+ }
+ }
}