Author: rfeng
Date: Fri Jul 11 10:54:53 2008
New Revision: 676038
URL: http://svn.apache.org/viewvc?rev=676038&view=rev
Log:
Add the first instance only optimization back
Modified:
tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java
Modified:
tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
---
tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
(original)
+++
tuscany/java/sca/modules/extensibility-eclipse/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java
Fri Jul 11 10:54:53 2008
@@ -174,7 +174,7 @@
}
@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 @@
ServiceDeclarationImpl descriptor =
new ServiceDeclarationImpl(bundle, url,
className, attributes);
descriptors.add(descriptor);
-
+ if (firstOnly) {
+ return descriptors;
+ }
}
}
} finally {
Modified:
tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
---
tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
(original)
+++
tuscany/java/sca/modules/extensibility-eclipse/src/test/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscovererTestCase.java
Fri Jul 11 10:54:53 2008
@@ -135,9 +135,9 @@
@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());
}
Modified:
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
---
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
(original)
+++
tuscany/java/sca/modules/extensibility-osgi/src/main/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscoverer.java
Fri Jul 11 10:54:53 2008
@@ -174,7 +174,7 @@
}
@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 @@
ServiceDeclarationImpl descriptor =
new ServiceDeclarationImpl(bundle, url,
className, attributes);
descriptors.add(descriptor);
+ if (firstOnly) {
+ return descriptors;
+ }
}
}
} finally {
Modified:
tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
---
tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
(original)
+++
tuscany/java/sca/modules/extensibility-osgi/src/test/java/org/apache/tuscany/sca/extensibility/osgi/OSGiServiceDiscovererTestCase.java
Fri Jul 11 10:54:53 2008
@@ -95,10 +95,18 @@
@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());
+ }
}
Modified:
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
---
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
(original)
+++
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscover.java
Fri Jul 11 10:54:53 2008
@@ -29,6 +29,7 @@
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 @@
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 @@
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 @@
}
ServiceDeclarationImpl descriptor = new
ServiceDeclarationImpl(url, className, attributes);
descriptors.add(descriptor);
+ if (firstOnly) {
+ return descriptors;
+ }
}
}
} finally {
Modified:
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
---
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java
(original)
+++
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscoverer.java
Fri Jul 11 10:54:53 2008
@@ -22,13 +22,15 @@
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);
}
Modified:
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
---
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
(original)
+++
tuscany/java/sca/modules/extensibility/src/main/java/org/apache/tuscany/sca/extensibility/ServiceDiscovery.java
Fri Jul 11 10:54:53 2008
@@ -28,8 +28,7 @@
* 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 @@
* @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 @@
* @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 @@
* @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();
}
Modified:
tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java
URL:
http://svn.apache.org/viewvc/tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java?rev=676038&r1=676037&r2=676038&view=diff
==============================================================================
---
tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java
(original)
+++
tuscany/java/sca/modules/extensibility/src/test/java/org/apache/tuscany/sca/extensibility/ClasspathServiceDiscovererTestCase.java
Fri Jul 11 10:54:53 2008
@@ -44,12 +44,23 @@
@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