Author: rfeng
Date: Tue Sep  2 17:48:29 2008
New Revision: 691447

URL: http://svn.apache.org/viewvc?rev=691447&view=rev
Log:
Make a few fields non-static to ServiceDiscovery
Enable Equinox launcher to load tuscany jars

Modified:
    
tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
    
tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.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/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoveryActivator.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/ServiceDiscovery.java
    
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxOSGiHost.java
    
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java
    
tuscany/java/sca/modules/osgi-runtime/src/main/java/org/apache/tuscany/sca/osgi/runtime/OSGiBundleActivator.java

Modified: 
tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java?rev=691447&r1=691446&r2=691447&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
 Tue Sep  2 17:48:29 2008
@@ -97,7 +97,7 @@
         public URL getLocation() {
             return url;
         }
-        
+
         public URL getResource(final String name) {
             return AccessController.doPrivileged(new PrivilegedAction<URL>() {
                 public URL run() {
@@ -117,11 +117,11 @@
     }
 
     public class ClassLoaderImpl extends SecureClassLoader {
-    
+
         public ClassLoaderImpl() {
             super(EquinoxServiceDiscoverer.class.getClassLoader());
         }
-    
+
         /**
          * Open a back-door to expose the META-INF/services resources
          */
@@ -135,21 +135,21 @@
             if (path.startsWith("/")) {
                 path = path.substring(1);
             }
-    
+
             if (!path.startsWith("META-INF/services")) {
                 return null;
             }
-    
+
             for (Bundle bundle : context.getBundles()) {
                 URL url = bundle.getEntry(name);
                 if (url != null) {
                     return url;
                 }
             }
-    
+
             return null;
         }
-    
+
         /**
          * Open a back-door to expose the META-INF/services resources
          */
@@ -164,13 +164,13 @@
             if (path.startsWith("/")) {
                 path = path.substring(1);
             }
-    
+
             if (!path.startsWith("META-INF/services")) {
                 return null;
             }
-    
+
             Set<URL> urlSet = new HashSet<URL>();
-    
+
             for (Bundle bundle : context.getBundles()) {
                 Enumeration<URL> urls = bundle.findEntries(path, file, false);
                 if (urls != null) {
@@ -179,7 +179,7 @@
             }
             return Collections.enumeration(urlSet);
         }
-    
+
     }
 
     private static String toString(Bundle b) {
@@ -250,72 +250,74 @@
 
         serviceName = "META-INF/services/" + serviceName;
 
-        int index = serviceName.lastIndexOf('/');
-        String path = serviceName.substring(0, index);
-        String file = serviceName.substring(index + 1);
+        //        int index = serviceName.lastIndexOf('/');
+        //        String path = serviceName.substring(0, index);
+        //        String file = serviceName.substring(index + 1);
 
         for (Bundle bundle : context.getBundles()) {
-            Enumeration<URL> urls = bundle.findEntries(path, file, false);
-            while (urls != null && urls.hasMoreElements()) {
-                final URL url = urls.nextElement();
-                if (debug) {
-                    logger.fine("Reading service provider file: " + 
url.toExternalForm());
+            // Enumeration<URL> urls = bundle.findEntries(path, file, false);
+            // Enumeration<URL> urls = bundle.findEntries(path, file, false); 
// This is expensive
+            final URL url = bundle.getEntry(serviceName);
+            if (url == null) {
+                continue;
+            }
+            if (debug) {
+                logger.fine("Reading service provider file: " + 
url.toExternalForm());
+            }
+            try {
+                // Allow privileged access to open URL stream. Add 
FilePermission to added to security
+                // policy file.
+                InputStream is;
+                try {
+                    is = AccessController.doPrivileged(new 
PrivilegedExceptionAction<InputStream>() {
+                        public InputStream run() throws IOException {
+                            return url.openStream();
+                        }
+                    });
+                } catch (PrivilegedActionException e) {
+                    throw (IOException)e.getException();
                 }
+                BufferedReader reader = null;
                 try {
-                    // Allow privileged access to open URL stream. Add 
FilePermission to added to security
-                    // policy file.
-                    InputStream is;
-                    try {
-                        is = AccessController.doPrivileged(new 
PrivilegedExceptionAction<InputStream>() {
-                            public InputStream run() throws IOException {
-                                return url.openStream();
+                    reader = new BufferedReader(new InputStreamReader(is));
+                    int count = 0;
+                    while (true) {
+                        String line = reader.readLine();
+                        if (line == null)
+                            break;
+                        line = line.trim();
+                        if (!line.startsWith("#") && !"".equals(line)) {
+                            String reg = line.trim();
+                            if (debug) {
+                                logger.fine("Registering service provider: " + 
reg);
                             }
-                        });
-                    } catch (PrivilegedActionException e) {
-                        throw (IOException)e.getException();
-                    }
-                    BufferedReader reader = null;
-                    try {
-                        reader = new BufferedReader(new InputStreamReader(is));
-                        int count = 0;
-                        while (true) {
-                            String line = reader.readLine();
-                            if (line == null)
-                                break;
-                            line = line.trim();
-                            if (!line.startsWith("#") && !"".equals(line)) {
-                                String reg = line.trim();
-                                if (debug) {
-                                    logger.fine("Registering service provider: 
" + reg);
-                                }
-
-                                Map<String, String> attributes = 
parseServiceDeclaration(reg);
-                                String className = attributes.get("class");
-                                if (className == null) {
-                                    // Add a unique class name to prevent 
equals() from returning true
-                                    className = "_class_" + count;
-                                    count++;
-                                }
-                                ServiceDeclarationImpl descriptor =
-                                    new ServiceDeclarationImpl(bundle, url, 
className, attributes);
-                                descriptors.add(descriptor);
-                                if (firstOnly) {
-                                    return descriptors;
-                                }
+
+                            Map<String, String> attributes = 
parseServiceDeclaration(reg);
+                            String className = attributes.get("class");
+                            if (className == null) {
+                                // Add a unique class name to prevent equals() 
from returning true
+                                className = "_class_" + count;
+                                count++;
                             }
-                        }
-                    } finally {
-                        if (reader != null) {
-                            try {
-                                reader.close();
-                            } catch (IOException e) {
-                                // Ignore
+                            ServiceDeclarationImpl descriptor =
+                                new ServiceDeclarationImpl(bundle, url, 
className, attributes);
+                            descriptors.add(descriptor);
+                            if (firstOnly) {
+                                return descriptors;
                             }
                         }
                     }
-                } catch (IOException e) {
-                    logger.log(Level.SEVERE, e.getMessage(), e);
+                } finally {
+                    if (reader != null) {
+                        try {
+                            reader.close();
+                        } catch (IOException e) {
+                            // Ignore
+                        }
+                    }
                 }
+            } catch (IOException e) {
+                logger.log(Level.SEVERE, e.getMessage(), e);
             }
         }
         return descriptors;
@@ -331,7 +333,7 @@
     }
 
     public <T> T getContext() {
-        return (T) context;
+        return (T)context;
     }
 
 }

Modified: 
tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java?rev=691447&r1=691446&r2=691447&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoveryActivator.java
 Tue Sep  2 17:48:29 2008
@@ -33,7 +33,7 @@
         if (bundleContext == null) {
             bundleContext = context;
             EquinoxServiceDiscoverer discoverer = new 
EquinoxServiceDiscoverer(bundleContext);
-            ServiceDiscovery.setServiceDiscoverer(discoverer);
+            ServiceDiscovery.getInstance().setServiceDiscoverer(discoverer);
         }
     }
 

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=691447&r1=691446&r2=691447&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
 Tue Sep  2 17:48:29 2008
@@ -254,7 +254,7 @@
         }
         return attributes;
     }
-    
+
     public BundleContext getBundleContext() {
         return context;
     }
@@ -266,9 +266,9 @@
     public ClassLoader getContextClassLoader() {
         return classLoader;
     }
-    
+
     public <T> T getContext() {
-        return (T) context;
+        return (T)context;
     }
 
     @SuppressWarnings("unchecked")
@@ -278,14 +278,19 @@
 
         serviceName = "META-INF/services/" + serviceName;
 
-        int index = serviceName.lastIndexOf('/');
-        String path = serviceName.substring(0, index);
-        String file = serviceName.substring(index + 1);
-
-        for (Bundle bundle : context.getBundles()) {
-            Enumeration<URL> urls = bundle.findEntries(path, file, false);
-            while (urls != null && urls.hasMoreElements()) {
-                final URL url = urls.nextElement();
+        //        int index = serviceName.lastIndexOf('/');
+        //        String path = serviceName.substring(0, index);
+        //        String file = serviceName.substring(index + 1);
+
+        // long start = System.currentTimeMillis();
+        try {
+            for (Bundle bundle : context.getBundles()) {
+                // Enumeration<URL> urls = bundle.findEntries(path, file, 
false); // This is expensive
+                final URL url = bundle.getEntry(serviceName);
+                if (url == null) {
+                    continue;
+                }
+
                 if (debug) {
                     logger.fine("Reading service provider file: " + 
url.toExternalForm());
                 }
@@ -345,6 +350,11 @@
                     logger.log(Level.SEVERE, e.getMessage(), e);
                 }
             }
+        } finally {
+//            long end = System.currentTimeMillis();
+//            if (true) {
+//                logger.info("Duration: " + (end - start) + " ms");
+//            }
         }
         return descriptors;
 

Modified: 
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoveryActivator.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoveryActivator.java?rev=691447&r1=691446&r2=691447&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoveryActivator.java
 (original)
+++ 
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoveryActivator.java
 Tue Sep  2 17:48:29 2008
@@ -33,7 +33,7 @@
         if (bundleContext == null) {
             bundleContext = context;
             OSGiServiceDiscoverer discoverer = new 
OSGiServiceDiscoverer(bundleContext);
-            ServiceDiscovery.setServiceDiscoverer(discoverer);
+            ServiceDiscovery.getInstance().setServiceDiscoverer(discoverer);
         }
     }
 

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=691447&r1=691446&r2=691447&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
 Tue Sep  2 17:48:29 2008
@@ -19,8 +19,12 @@
 
 package org.apache.tuscany.sca.extensibility.osgi;
 
+import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -109,4 +113,11 @@
         descriptors = discoverer.discover("notthere", true);
         Assert.assertEquals(0, descriptors.size());
     }    
+    
+    @Test
+    public void testClassLoader () throws IOException {
+        Enumeration<URL> resources = 
discoverer.getContextClassLoader().getResources("META-INF/services/org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory");
+        List<URL> list = Collections.list(resources);
+        Assert.assertEquals(1, list.size());
+    }
 }

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=691447&r1=691446&r2=691447&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
 Tue Sep  2 17:48:29 2008
@@ -38,9 +38,9 @@
 public class ServiceDiscovery {
     private static final Logger logger = 
Logger.getLogger(ServiceDiscovery.class.getName());
 
-    private final static ServiceDiscovery instance = new ServiceDiscovery();
+    private final static ServiceDiscovery INSTANCE = new ServiceDiscovery();
 
-    private static ServiceDiscoverer discoverer;
+    private ServiceDiscoverer discoverer;
     private Set<ClassLoader> registeredClassLoaders = new 
HashSet<ClassLoader>();
 
     /**
@@ -50,17 +50,28 @@
      * @return
      */
     public static ServiceDiscovery getInstance() {
-        return instance;
+        return INSTANCE;
     }
 
-    public static ServiceDiscoverer getServiceDiscoverer() {
+    /**
+     * Get a classloader-based service discovery instance
+     * @param classLoader
+     * @return
+     */
+    public static ServiceDiscovery getInstance(ClassLoader classLoader) {
+        ServiceDiscovery discovery = new ServiceDiscovery();
+        discovery.setServiceDiscoverer(new 
ClasspathServiceDiscoverer(classLoader));
+        return discovery;
+    }
+    
+    public ServiceDiscoverer getServiceDiscoverer() {
         if (discoverer == null) {
             discoverer = new ClasspathServiceDiscoverer();
         }
         return discoverer;
     }
 
-    public static void setServiceDiscoverer(ServiceDiscoverer sd) {
+    public void setServiceDiscoverer(ServiceDiscoverer sd) {
         if (discoverer != null) {
             throw new IllegalStateException("The ServiceDiscoverer cannot be 
reset");
         }

Modified: 
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxOSGiHost.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxOSGiHost.java?rev=691447&r1=691446&r2=691447&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxOSGiHost.java
 (original)
+++ 
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxOSGiHost.java
 Tue Sep  2 17:48:29 2008
@@ -31,7 +31,9 @@
  * 
  */
 public class EquinoxOSGiHost implements OSGiHost {
-
+    private LauncherBundleActivator activator = new LauncherBundleActivator();
+    private BundleContext context;
+    
     private final static String systemPackages =
         "org.osgi.framework; version=1.3.0," + "org.osgi.service.packageadmin; 
version=1.2.0, "
             + "org.osgi.service.startlevel; version=1.0.0, "
@@ -92,15 +94,22 @@
         String args[] = {};
         Map<Object, Object> props = new HashMap<Object, Object>();
         props.put("org.osgi.framework.system.packages", systemPackages);
+        // Set the extension bundle
+        // props.put("osgi.framework.extensions", 
"org.apache.tuscany.sca.extensibility.equinox");
         props.put(EclipseStarter.PROP_CLEAN, "true");
         props.put(LocationManager.PROP_INSTANCE_AREA, new 
File("target/workspace").toURI().toString());
-        props.put(LocationManager.PROP_INSTALL_AREA, new 
File("target/eclipse").toURI().toString());
+        props.put(LocationManager.PROP_INSTALL_AREA, new 
File("target/eclipse/install").toURI().toString());
+        props.put(LocationManager.PROP_CONFIG_AREA, new 
File("target/eclipse/config").toURI().toString());
+        props.put(LocationManager.PROP_USER_AREA, new 
File("target/eclipse/user").toURI().toString());
+        
         EclipseStarter.setInitialProperties(props);
-        BundleContext context = EclipseStarter.startup(args, null);
+        context = EclipseStarter.startup(args, null);
+        activator.start(context);
         return context;
     }
 
     private void shutdown() throws Exception {
+        activator.stop(context);
         EclipseStarter.shutdown();
     }
 

Modified: 
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java?rev=691447&r1=691446&r2=691447&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java
 (original)
+++ 
tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/LauncherBundleActivator.java
 Tue Sep  2 17:48:29 2008
@@ -142,7 +142,8 @@
 
             for (URL url : urls) {
                 File file = new File(url.toURI());
-                if (file.getName().startsWith("org.apache.felix.") || 
file.getName().startsWith("org.osgi.")) {
+                if (file.getName().startsWith("org.apache.felix.") || 
file.getName().startsWith("osgi-")
+                    || file.getName().startsWith("org.osgi.")) {
                     continue;
                 }
                 try {
@@ -205,6 +206,12 @@
         }
 
         String symbolicName = 
manifest.getMainAttributes().getValue(BUNDLE_SYMBOLICNAME);
+        if (symbolicName != null) {
+            int index = symbolicName.indexOf(';');
+            if (index != -1) {
+                symbolicName = symbolicName.substring(0, index);
+            }
+        }
         String version = manifest.getMainAttributes().getValue(BUNDLE_VERSION);
         Bundle bundle = findBundle(bundleContext, symbolicName, version);
         if (bundle != null) {

Modified: 
tuscany/java/sca/modules/osgi-runtime/src/main/java/org/apache/tuscany/sca/osgi/runtime/OSGiBundleActivator.java
URL: 
http://svn.apache.org/viewvc/tuscany/java/sca/modules/osgi-runtime/src/main/java/org/apache/tuscany/sca/osgi/runtime/OSGiBundleActivator.java?rev=691447&r1=691446&r2=691447&view=diff
==============================================================================
--- 
tuscany/java/sca/modules/osgi-runtime/src/main/java/org/apache/tuscany/sca/osgi/runtime/OSGiBundleActivator.java
 (original)
+++ 
tuscany/java/sca/modules/osgi-runtime/src/main/java/org/apache/tuscany/sca/osgi/runtime/OSGiBundleActivator.java
 Tue Sep  2 17:48:29 2008
@@ -79,7 +79,7 @@
     private void initializeTuscanyClassLoaders(BundleContext bundleContext) {
 
         OSGiServiceDiscoverer discoverer = new 
OSGiServiceDiscoverer(bundleContext);
-        ServiceDiscovery.setServiceDiscoverer(discoverer);
+        ServiceDiscovery.getInstance().setServiceDiscoverer(discoverer);
         thisBundle = bundleContext.getBundle();
 
         origTCCL = Thread.currentThread().getContextClassLoader();


Reply via email to