Author: rfeng
Date: Fri Jul 11 10:54:53 2008
New Revision: 676038

URL: http://svn.apache.org/viewvc?rev=676038&view=rev
Log:
Add the first instance only optimization back

Modified:
    
tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
    
tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
    
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
    
tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
    
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
    
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java
    
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
    
tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java

Modified: 
tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
 Fri Jul 11 10:54:53 2008
@@ -174,7 +174,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public Set<ServiceDeclaration> discover(String serviceName) {
+    public Set<ServiceDeclaration> discover(String serviceName, boolean 
firstOnly) {
         boolean debug = logger.isLoggable(Level.FINE);
         Set<ServiceDeclaration> descriptors = new 
HashSet<ServiceDeclaration>();
 
@@ -229,7 +229,9 @@
                                 ServiceDeclarationImpl descriptor =
                                     new ServiceDeclarationImpl(bundle, url, 
className, attributes);
                                 descriptors.add(descriptor);
-
+                                if (firstOnly) {
+                                    return descriptors;
+                                }
                             }
                         }
                     } finally {

Modified: 
tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
 Fri Jul 11 10:54:53 2008
@@ -135,9 +135,9 @@
     @Test
     public void testDiscovery() {
         Set<ServiceDeclaration> descriptors =
-            
discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory");
+            
discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory",
 false);
         Assert.assertEquals(1, descriptors.size());
-        descriptors = discoverer.discover("notthere");
+        descriptors = discoverer.discover("notthere", false);
         Assert.assertEquals(0, descriptors.size());
     }
 

Modified: 
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
 Fri Jul 11 10:54:53 2008
@@ -174,7 +174,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public Set<ServiceDeclaration> discover(String serviceName) {
+    public Set<ServiceDeclaration> discover(String serviceName, boolean 
firstOnly) {
         boolean debug = logger.isLoggable(Level.FINE);
         Set<ServiceDeclaration> descriptors = new 
HashSet<ServiceDeclaration>();
 
@@ -229,6 +229,9 @@
                                 ServiceDeclarationImpl descriptor =
                                     new ServiceDeclarationImpl(bundle, url, 
className, attributes);
                                 descriptors.add(descriptor);
+                                if (firstOnly) {
+                                    return descriptors;
+                                }
                             }
                         }
                     } finally {

Modified: 
tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
 Fri Jul 11 10:54:53 2008
@@ -95,10 +95,18 @@
     @Test
     public void testDiscovery() {
         Set<ServiceDeclaration> descriptors =
-            
discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory");
+            
discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory",
 false);
         Assert.assertEquals(1, descriptors.size());
-        descriptors = discoverer.discover("notthere");
+        descriptors = discoverer.discover("notthere", false);
         Assert.assertEquals(0, descriptors.size());
     }
 
+    @Test
+    public void testDiscoveryFirst() {
+        Set<ServiceDeclaration> descriptors =
+            
discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory",
 true);
+        Assert.assertEquals(1, descriptors.size());
+        descriptors = discoverer.discover("notthere", true);
+        Assert.assertEquals(0, descriptors.size());
+    }    
 }

Modified: 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
 Fri Jul 11 10:54:53 2008
@@ -29,6 +29,7 @@
 import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -117,11 +118,20 @@
         this.classLoaderReference = new 
WeakReference<ClassLoader>(classLoader);
     }
 
-    protected List<URL> getResources(final String name) throws IOException {
+    protected List<URL> getResources(final String name, final boolean 
firstOnly) throws IOException {
         try {
             return AccessController.doPrivileged(new 
PrivilegedExceptionAction<List<URL>>() {
                 public List<URL> run() throws IOException {
-                    return 
Collections.list(getClassLoader().getResources(name));
+                    if (firstOnly) {
+                        URL url = getClassLoader().getResource(name);
+                        if (url != null) {
+                            return Arrays.asList(url);
+                        } else {
+                            return Collections.emptyList();
+                        }
+                    } else {
+                        return 
Collections.list(getClassLoader().getResources(name));
+                    }
                 }
             });
         } catch (PrivilegedActionException e) {
@@ -168,13 +178,13 @@
         return attributes;
     }
 
-    public Set<ServiceDeclaration> discover(String serviceName) {
+    public Set<ServiceDeclaration> discover(String serviceName, boolean 
firstOnly) {
         Set<ServiceDeclaration> descriptors = new 
HashSet<ServiceDeclaration>();
 
         String name = "META-INF/services/" + serviceName;
         boolean debug = logger.isLoggable(Level.FINE);
         try {
-            for (final URL url : getResources(name)) {
+            for (final URL url : getResources(name, firstOnly)) {
                 if (debug) {
                     logger.fine("Reading service provider file: " + 
url.toExternalForm());
                 }
@@ -215,6 +225,9 @@
                             }
                             ServiceDeclarationImpl descriptor = new 
ServiceDeclarationImpl(url, className, attributes);
                             descriptors.add(descriptor);
+                            if (firstOnly) {
+                                return descriptors;
+                            }
                         }
                     }
                 } finally {

Modified: 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java
 Fri Jul 11 10:54:53 2008
@@ -22,13 +22,15 @@
 import java.util.Set;
 
 /**
- * 
+ * A SPI that allows different implementations of discovering service 
declarations
  */
 public interface ServiceDiscoverer {
     /**
      * Discover the service descriptors by name
-     * @param serviceName
+     * @param serviceName The name of the service
+     * @param firstOnly A flag to indicate if only the first instance is to be 
discovered
+     *  
      * @return A set of service descriptors
      */
-    Set<ServiceDeclaration> discover(String serviceName);
+    Set<ServiceDeclaration> discover(String serviceName, boolean firstOnly);
 }

Modified: 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
 Fri Jul 11 10:54:53 2008
@@ -28,8 +28,7 @@
  * Service discovery for Tuscany based on J2SE Jar service provider spec.
  * Services are described using configuration files in META-INF/services.
  * Service description specifies a class name followed by optional properties.
- * Multi-ClassLoader environments are supported through a ClassLoader
- * registration API
+ * 
  *
  * @version $Rev$ $Date$
  */
@@ -48,12 +47,6 @@
      * @return
      */
     public static ServiceDiscovery getInstance() {
-//
-//        if (instance == null) {
-//            instance = new ServiceDiscovery();
-//            instance.registeredClassLoaders = new HashSet<ClassLoader>();
-//            
instance.registeredClassLoaders.add(ServiceDiscovery.class.getClassLoader());
-//        }
         return instance;
     }
     
@@ -98,8 +91,7 @@
      * @throws IOException
      */
     public Set<ServiceDeclaration> getServiceDeclarations(String name) throws 
IOException {
-        // Set<ServiceDeclaration> classSet = new 
HashSet<ServiceDeclaration>();
-        Set<ServiceDeclaration> services = 
getServiceDiscoverer().discover(name);
+        Set<ServiceDeclaration> services = 
getServiceDiscoverer().discover(name, false);
         return services;
     }
 
@@ -124,52 +116,9 @@
      * @throws ClassNotFoundException
      */
     public Class<?> loadFirstServiceClass(Class<?> serviceInterface) throws 
IOException, ClassNotFoundException {
-        Set<ServiceDeclaration> services = 
getServiceDiscoverer().discover(serviceInterface.getName());
+        Set<ServiceDeclaration> services = 
getServiceDiscoverer().discover(serviceInterface.getName(), true);
         if(services.isEmpty()) {
             return null;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
         }
         return services.iterator().next().loadClass();
     }

Modified: 
tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java
 Fri Jul 11 10:54:53 2008
@@ -44,12 +44,23 @@
     @Test
     public void testDiscovery() {
         Set<ServiceDeclaration> discriptors =
-            
discover.discover("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint");
+            
discover.discover("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint", 
false);
         Assert.assertEquals(1, discriptors.size());
         discriptors =
-            discover.discover("notthere");
+            discover.discover("notthere", false);
         Assert.assertEquals(0, discriptors.size());
     }
+    
+    @Test
+    public void testDiscoveryFirst() {
+        Set<ServiceDeclaration> discriptors =
+            
discover.discover("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint", 
true);
+        Assert.assertEquals(1, discriptors.size());
+        discriptors =
+            discover.discover("notthere", true);
+        Assert.assertEquals(0, discriptors.size());
+    }
+
 
     /**
      * @throws java.lang.Exception


Reply via email to