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;
+    }
+  }
 }