summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/extensibility
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-08-15 22:07:43 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-08-15 22:07:43 +0000
commitb260755836736d405f104bfc14111cb9d51f8118 (patch)
treebb7eb118adeef50761cf6b72bb6b789251d78f88 /java/sca/modules/extensibility
parent1c22b82f37a62e40036cd8fdf70918fd7fc93bd0 (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')
-rw-r--r--java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscoverer.java32
-rw-r--r--java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java14
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);