diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-08 03:16:34 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2008-09-08 03:16:34 +0000 |
commit | fe56d619a6e9c5a5a3ed26d61591fd4fb89b4c1f (patch) | |
tree | bc63c578f6509d4cf488da99415de6bf091e577b /java/sca/modules/extensibility/src | |
parent | d6293beb6665b69b91241907d4e735f7d2cc0f26 (diff) |
Simplified a bit the service discovery implementation. Some code cleanup in node-launcher-equinox. Started to remove dependencies on a particular setting of the Thread Context ClassLoader.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@692989 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/extensibility/src')
-rw-r--r-- | java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java (renamed from java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscoverer.java) | 70 | ||||
-rw-r--r-- | java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java | 10 | ||||
-rw-r--r-- | java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java | 15 | ||||
-rw-r--r-- | java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java (renamed from java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java) | 6 |
4 files changed, 21 insertions, 80 deletions
diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscoverer.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java index ed7260c30c..2e11234095 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscoverer.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscoverer.java @@ -30,7 +30,6 @@ import java.security.AccessController; import java.security.PrivilegedAction; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -43,9 +42,12 @@ import java.util.logging.Level; import java.util.logging.Logger; /** - * + * A ServiceDiscoverer that find META-INF/services/... using the Context ClassLoader. + * + * @version $Rev: $ $Date: $ */ -public class ClasspathServiceDiscoverer implements ServiceDiscoverer { +public class ContextClassLoaderServiceDiscoverer implements ServiceDiscoverer { + private static final Logger logger = Logger.getLogger(ContextClassLoaderServiceDiscoverer.class.getName()); public class ServiceDeclarationImpl implements ServiceDeclaration { private URL url; @@ -83,16 +85,12 @@ public class ClasspathServiceDiscoverer implements ServiceDiscoverer { } public Class<?> loadClass(String className) throws ClassNotFoundException { - return getContextClassLoader().loadClass(className); - } - - private ClasspathServiceDiscoverer getOuterType() { - return ClasspathServiceDiscoverer.this; + return classLoaderReference.get().loadClass(className); } public String toString() { StringBuffer sb = new StringBuffer(); - sb.append("ClassLoader: ").append(getContextClassLoader()); + sb.append("ClassLoader: ").append(classLoaderReference.get()); sb.append(" Attributes: ").append(attributes); return sb.toString(); } @@ -100,7 +98,7 @@ public class ClasspathServiceDiscoverer implements ServiceDiscoverer { public URL getResource(final String name) { return AccessController.doPrivileged(new PrivilegedAction<URL>() { public URL run() { - return getContextClassLoader().getResource(name); + return classLoaderReference.get().getResource(name); } }); } @@ -108,56 +106,26 @@ public class ClasspathServiceDiscoverer implements ServiceDiscoverer { } private WeakReference<ClassLoader> classLoaderReference; - private boolean useTCCL = false; - private static final Logger logger = Logger.getLogger(ClasspathServiceDiscoverer.class.getName()); - public ClasspathServiceDiscoverer() { - // ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); - ClassLoader classLoader = ClasspathServiceDiscoverer.class.getClassLoader(); + public ContextClassLoaderServiceDiscoverer() { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); this.classLoaderReference = new WeakReference<ClassLoader>(classLoader); - this.useTCCL = true; } - public ClasspathServiceDiscoverer(ClassLoader classLoader) { - this.classLoaderReference = new WeakReference<ClassLoader>(classLoader); - } - - protected List<URL> getResources(final String name, final boolean firstOnly) throws IOException { + private 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 { if (firstOnly) { - URL url = getContextClassLoader().getResource(name); + URL url = classLoaderReference.get().getResource(name); if (url != null) { return Arrays.asList(url); } else { - if (useTCCL) { - // Try thread context classloader - ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - if (tccl != getContextClassLoader()) { - url = tccl.getResource(name); - } - if (url != null) { - return Arrays.asList(url); - } - } return Collections.emptyList(); } } else { - List<URL> urls = Collections.list(getContextClassLoader().getResources(name)); - if (!useTCCL) { - return urls; - } - // Try thread context classloader - ClassLoader tccl = Thread.currentThread().getContextClassLoader(); - if (tccl != getContextClassLoader()) { - urls.addAll(Collections.list(tccl.getResources(name))); - // Remove duplicate entries - Set<URL> urlSet = new HashSet<URL>(urls); - return new ArrayList<URL>(urlSet); - } else { - return urls; - } + List<URL> urls = Collections.list(classLoaderReference.get().getResources(name)); + return urls; } } }); @@ -166,14 +134,6 @@ public class ClasspathServiceDiscoverer implements ServiceDiscoverer { } } - public ClassLoader getContextClassLoader() { - return classLoaderReference.get(); - } - - public <T> T getContext() { - return (T)getContextClassLoader(); - } - /** * Parse a service declaration in the form class;attr=value,attr=value and * return a map of attributes @@ -181,7 +141,7 @@ public class ClasspathServiceDiscoverer implements ServiceDiscoverer { * @param declaration * @return a map of attributes */ - protected static Map<String, String> parseServiceDeclaration(String declaration) { + private static Map<String, String> parseServiceDeclaration(String declaration) { Map<String, String> attributes = new HashMap<String, String>(); int index = declaration.indexOf(';'); if (index != -1) { diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java index b4fdfd4d8a..1722cd5f49 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java @@ -33,13 +33,5 @@ public interface ServiceDiscoverer { * @return A set of service descriptors */ Set<ServiceDeclaration> discover(String serviceName, boolean firstOnly); - - /** - * Get the context for the service discoverer - * @param <T> It can be a ClassLoader for JSE or BundleContext for OSGi - * @return The context - */ - <T> T getContext(); - - ClassLoader getContextClassLoader(); + } diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java index 8ad7009f47..79b92e0390 100644 --- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java +++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java @@ -53,20 +53,9 @@ public class ServiceDiscovery { return INSTANCE; } - /** - * 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() { + private ServiceDiscoverer getServiceDiscoverer() { if (discoverer == null) { - discoverer = new ClasspathServiceDiscoverer(); + discoverer = new ContextClassLoaderServiceDiscoverer(); } return discoverer; } diff --git a/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java b/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java index 71faca2732..fd508402fc 100644 --- a/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java +++ b/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ContextClassLoaderServiceDiscovererTestCase.java @@ -30,15 +30,15 @@ import org.junit.Test; /** * Test Case for ClasspathServiceDiscover */ -public class ClasspathServiceDiscovererTestCase { - private static ClasspathServiceDiscoverer discover; +public class ContextClassLoaderServiceDiscovererTestCase { + private static ContextClassLoaderServiceDiscoverer discover; /** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { - discover = new ClasspathServiceDiscoverer(ClasspathServiceDiscoverer.class.getClassLoader()); + discover = new ContextClassLoaderServiceDiscoverer(); } @Test |