summaryrefslogtreecommitdiffstats
path: root/java/sca/modules/extensibility
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2008-09-08 03:16:34 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2008-09-08 03:16:34 +0000
commitfe56d619a6e9c5a5a3ed26d61591fd4fb89b4c1f (patch)
treebc63c578f6509d4cf488da99415de6bf091e577b /java/sca/modules/extensibility
parentd6293beb6665b69b91241907d4e735f7d2cc0f26 (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')
-rw-r--r--java/sca/modules/extensibility/pom.xml1
-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.java10
-rw-r--r--java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java15
-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
5 files changed, 22 insertions, 80 deletions
diff --git a/java/sca/modules/extensibility/pom.xml b/java/sca/modules/extensibility/pom.xml
index 01cd2d0ca9..b4e3b9ead7 100644
--- a/java/sca/modules/extensibility/pom.xml
+++ b/java/sca/modules/extensibility/pom.xml
@@ -41,6 +41,7 @@
<Bundle-SymbolicName>org.apache.tuscany.sca.extensibility</Bundle-SymbolicName>
<Bundle-Description>${pom.name}</Bundle-Description>
<Export-Package>org.apache.tuscany.sca.*</Export-Package>
+ <DynamicImport-Package>*</DynamicImport-Package>
</instructions>
</configuration>
</plugin>
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