diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2008-08-15 22:07:43 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2008-08-15 22:07:43 +0000 |
commit | b260755836736d405f104bfc14111cb9d51f8118 (patch) | |
tree | bb7eb118adeef50761cf6b72bb6b789251d78f88 /java/sca/modules/extensibility/src/main | |
parent | 1c22b82f37a62e40036cd8fdf70918fd7fc93bd0 (diff) |
Port DefaultSCADomain to use SCA Node impl
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@686391 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/sca/modules/extensibility/src/main')
2 files changed, 41 insertions, 5 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/ClasspathServiceDiscoverer.java index 8e3bd80da5..ed7260c30c 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/ClasspathServiceDiscoverer.java @@ -30,6 +30,7 @@ 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; @@ -107,12 +108,14 @@ 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(); this.classLoaderReference = new WeakReference<ClassLoader>(classLoader); + this.useTCCL = true; } public ClasspathServiceDiscoverer(ClassLoader classLoader) { @@ -128,10 +131,33 @@ public class ClasspathServiceDiscoverer implements ServiceDiscoverer { 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 { - return Collections.list(getContextClassLoader().getResources(name)); + 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; + } } } }); @@ -143,9 +169,9 @@ public class ClasspathServiceDiscoverer implements ServiceDiscoverer { public ClassLoader getContextClassLoader() { return classLoaderReference.get(); } - + public <T> T getContext() { - return (T) getContextClassLoader(); + return (T)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 659329a332..2c2016d7e3 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 @@ -68,20 +68,24 @@ public class ServiceDiscovery { } /** + * @deprecated * Register a ClassLoader with this discovery mechanism. Tuscany extension * ClassLoaders are registered here. * * @param classLoader */ + @Deprecated public synchronized void registerClassLoader(ClassLoader classLoader) { registeredClassLoaders.add(classLoader); } /** + * @deprecated * Unregister a ClassLoader with this discovery mechanism. * * @param classLoader */ + @Deprecated public synchronized void unregisterClassLoader(ClassLoader classLoader) { registeredClassLoaders.remove(classLoader); } @@ -127,9 +131,15 @@ public class ServiceDiscovery { }); if (className != null) { try { - return Class.forName(className, false, Thread.currentThread().getContextClassLoader()); + // Try the classloader for the service interface first + return Class.forName(className, false, serviceInterface.getClassLoader()); } catch (ClassNotFoundException e) { - logger.log(Level.WARNING, e.getMessage(), e); + try { + // Try the thread context classloader + return Class.forName(className, false, Thread.currentThread().getContextClassLoader()); + } catch (ClassNotFoundException ex) { + logger.log(Level.WARNING, ex.getMessage(), ex); + } } } Set<ServiceDeclaration> services = getServiceDiscoverer().discover(serviceInterface.getName(), true); |