summaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-07-11 17:54:53 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2008-07-11 17:54:53 +0000
commitad902526609be7f53e8df85fb18e0941095f9316 (patch)
tree3cc84aeb15c85c546387bca16cf7d789c0a9c466 /java
parentfa46111ff3b9e4136baa79a7c43df564e3ae743b (diff)
Add the first instance only optimization back
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@676038 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
-rw-r--r--java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java6
-rw-r--r--java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java4
-rw-r--r--java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java5
-rw-r--r--java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java12
-rw-r--r--java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java21
-rw-r--r--java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java8
-rw-r--r--java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java57
-rw-r--r--java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java15
8 files changed, 58 insertions, 70 deletions
diff --git a/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java b/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
index bf1b5c07eb..7d10bd8fc5 100644
--- a/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
+++ b/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
@@ -174,7 +174,7 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer {
}
@SuppressWarnings("unchecked")
- public Set<ServiceDeclaration> discover(String serviceName) {
+ public Set<ServiceDeclaration> discover(String serviceName, boolean firstOnly) {
boolean debug = logger.isLoggable(Level.FINE);
Set<ServiceDeclaration> descriptors = new HashSet<ServiceDeclaration>();
@@ -229,7 +229,9 @@ public class EquinoxServiceDiscoverer implements ServiceDiscoverer {
ServiceDeclarationImpl descriptor =
new ServiceDeclarationImpl(bundle, url, className, attributes);
descriptors.add(descriptor);
-
+ if (firstOnly) {
+ return descriptors;
+ }
}
}
} finally {
diff --git a/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java b/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
index 917720937a..ae2a58fc2f 100644
--- a/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
+++ b/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
@@ -135,9 +135,9 @@ public class EquinoxServiceDiscovererTestCase {
@Test
public void testDiscovery() {
Set<ServiceDeclaration> descriptors =
- discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory");
+ discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory", false);
Assert.assertEquals(1, descriptors.size());
- descriptors = discoverer.discover("notthere");
+ descriptors = discoverer.discover("notthere", false);
Assert.assertEquals(0, descriptors.size());
}
diff --git a/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java b/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
index 240ef6bcd5..b5543824dc 100644
--- a/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
+++ b/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
@@ -174,7 +174,7 @@ public class OSGiServiceDiscoverer implements ServiceDiscoverer {
}
@SuppressWarnings("unchecked")
- public Set<ServiceDeclaration> discover(String serviceName) {
+ public Set<ServiceDeclaration> discover(String serviceName, boolean firstOnly) {
boolean debug = logger.isLoggable(Level.FINE);
Set<ServiceDeclaration> descriptors = new HashSet<ServiceDeclaration>();
@@ -229,6 +229,9 @@ public class OSGiServiceDiscoverer implements ServiceDiscoverer {
ServiceDeclarationImpl descriptor =
new ServiceDeclarationImpl(bundle, url, className, attributes);
descriptors.add(descriptor);
+ if (firstOnly) {
+ return descriptors;
+ }
}
}
} finally {
diff --git a/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java b/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
index a5cb794d87..c1bf62d96a 100644
--- a/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
+++ b/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
@@ -95,10 +95,18 @@ public class OSGiServiceDiscovererTestCase {
@Test
public void testDiscovery() {
Set<ServiceDeclaration> descriptors =
- discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory");
+ discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory", false);
Assert.assertEquals(1, descriptors.size());
- descriptors = discoverer.discover("notthere");
+ descriptors = discoverer.discover("notthere", false);
Assert.assertEquals(0, descriptors.size());
}
+ @Test
+ public void testDiscoveryFirst() {
+ Set<ServiceDeclaration> descriptors =
+ discoverer.discover("org.apache.tuscany.sca.endpointresolver.EndpointResolverFactory", true);
+ Assert.assertEquals(1, descriptors.size());
+ descriptors = discoverer.discover("notthere", true);
+ Assert.assertEquals(0, descriptors.size());
+ }
}
diff --git a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
index c83a7d9172..803f5f615d 100644
--- a/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
+++ b/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
@@ -29,6 +29,7 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -117,11 +118,20 @@ public class ClasspathServiceDiscover implements ServiceDiscoverer {
this.classLoaderReference = new WeakReference<ClassLoader>(classLoader);
}
- protected List<URL> getResources(final String name) throws IOException {
+ protected 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 {
- return Collections.list(getClassLoader().getResources(name));
+ if (firstOnly) {
+ URL url = getClassLoader().getResource(name);
+ if (url != null) {
+ return Arrays.asList(url);
+ } else {
+ return Collections.emptyList();
+ }
+ } else {
+ return Collections.list(getClassLoader().getResources(name));
+ }
}
});
} catch (PrivilegedActionException e) {
@@ -168,13 +178,13 @@ public class ClasspathServiceDiscover implements ServiceDiscoverer {
return attributes;
}
- public Set<ServiceDeclaration> discover(String serviceName) {
+ public Set<ServiceDeclaration> discover(String serviceName, boolean firstOnly) {
Set<ServiceDeclaration> descriptors = new HashSet<ServiceDeclaration>();
String name = "META-INF/services/" + serviceName;
boolean debug = logger.isLoggable(Level.FINE);
try {
- for (final URL url : getResources(name)) {
+ for (final URL url : getResources(name, firstOnly)) {
if (debug) {
logger.fine("Reading service provider file: " + url.toExternalForm());
}
@@ -215,6 +225,9 @@ public class ClasspathServiceDiscover implements ServiceDiscoverer {
}
ServiceDeclarationImpl descriptor = new ServiceDeclarationImpl(url, className, attributes);
descriptors.add(descriptor);
+ if (firstOnly) {
+ return descriptors;
+ }
}
}
} finally {
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 31f2cf600e..4079f86d99 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
@@ -22,13 +22,15 @@ package org.apache.tuscany.sca.extensibility;
import java.util.Set;
/**
- *
+ * A SPI that allows different implementations of discovering service declarations
*/
public interface ServiceDiscoverer {
/**
* Discover the service descriptors by name
- * @param serviceName
+ * @param serviceName The name of the service
+ * @param firstOnly A flag to indicate if only the first instance is to be discovered
+ *
* @return A set of service descriptors
*/
- Set<ServiceDeclaration> discover(String serviceName);
+ Set<ServiceDeclaration> discover(String serviceName, boolean firstOnly);
}
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 412774c83b..07e5dc322e 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
@@ -28,8 +28,7 @@ import java.util.logging.Logger;
* Service discovery for Tuscany based on J2SE Jar service provider spec.
* Services are described using configuration files in META-INF/services.
* Service description specifies a class name followed by optional properties.
- * Multi-ClassLoader environments are supported through a ClassLoader
- * registration API
+ *
*
* @version $Rev$ $Date$
*/
@@ -48,12 +47,6 @@ public class ServiceDiscovery {
* @return
*/
public static ServiceDiscovery getInstance() {
-//
-// if (instance == null) {
-// instance = new ServiceDiscovery();
-// instance.registeredClassLoaders = new HashSet<ClassLoader>();
-// instance.registeredClassLoaders.add(ServiceDiscovery.class.getClassLoader());
-// }
return instance;
}
@@ -98,8 +91,7 @@ public class ServiceDiscovery {
* @throws IOException
*/
public Set<ServiceDeclaration> getServiceDeclarations(String name) throws IOException {
- // Set<ServiceDeclaration> classSet = new HashSet<ServiceDeclaration>();
- Set<ServiceDeclaration> services = getServiceDiscoverer().discover(name);
+ Set<ServiceDeclaration> services = getServiceDiscoverer().discover(name, false);
return services;
}
@@ -124,52 +116,9 @@ public class ServiceDiscovery {
* @throws ClassNotFoundException
*/
public Class<?> loadFirstServiceClass(Class<?> serviceInterface) throws IOException, ClassNotFoundException {
- Set<ServiceDeclaration> services = getServiceDiscoverer().discover(serviceInterface.getName());
+ Set<ServiceDeclaration> services = getServiceDiscoverer().discover(serviceInterface.getName(), true);
if(services.isEmpty()) {
return null;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
}
return services.iterator().next().loadClass();
}
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/ClasspathServiceDiscovererTestCase.java
index cf203cce7a..fbdd4a6b2e 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/ClasspathServiceDiscovererTestCase.java
@@ -44,12 +44,23 @@ public class ClasspathServiceDiscovererTestCase {
@Test
public void testDiscovery() {
Set<ServiceDeclaration> discriptors =
- discover.discover("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint");
+ discover.discover("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint", false);
Assert.assertEquals(1, discriptors.size());
discriptors =
- discover.discover("notthere");
+ discover.discover("notthere", false);
Assert.assertEquals(0, discriptors.size());
}
+
+ @Test
+ public void testDiscoveryFirst() {
+ Set<ServiceDeclaration> discriptors =
+ discover.discover("org.apache.tuscany.sca.core.ModuleActivatorExtensionPoint", true);
+ Assert.assertEquals(1, discriptors.size());
+ discriptors =
+ discover.discover("notthere", true);
+ Assert.assertEquals(0, discriptors.size());
+ }
+
/**
* @throws java.lang.Exception