I don't think that we should pay the penalty for this corner case. Instead of not adding META-INF/services, we could do the following:
If the name starts with /, we treat it as the full path. Otherwise, we add the META-INF/services (99.9% of all cases). Raymond Feng Sent from my iPhone On Aug 29, 2010, at 1:53 AM, [email protected] wrote: > Author: lresende > Date: Sun Aug 29 08:53:22 2010 > New Revision: 990510 > > URL: http://svn.apache.org/viewvc?rev=990510&view=rev > Log: > TUSCANY-3595 - Allowing service discover to handle resources that are not > services, such as properties. In this case, shouldn't append > META-INF/services prefix. For compatibility, still try to append > META-INF/services if nothing found > > Modified: > > tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java > > Modified: > tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java > URL: > http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java?rev=990510&r1=990509&r2=990510&view=diff > ============================================================================== > --- > tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java > (original) > +++ > tuscany/sca-java-2.x/trunk/modules/extensibility-equinox/src/main/java/org/apache/tuscany/sca/extensibility/equinox/EquinoxServiceDiscoverer.java > Sun Aug 29 08:53:22 2010 > @@ -64,7 +64,7 @@ public class EquinoxServiceDiscoverer im > bundleTracker = new ActiveBundleTracker(context); > bundleTracker.open(); > } > - > + > public void stop() { > bundleTracker.close(); > } > @@ -73,7 +73,7 @@ public class EquinoxServiceDiscoverer im > String header = (String)bundle.getHeaders().get("SCA-Version"); > return Version.parseVersion(header); > } > - > + > public static class ActiveBundleTracker extends BundleTracker { > > /** > @@ -162,7 +162,7 @@ public class EquinoxServiceDiscoverer im > try { > loadClass(); > } catch (ClassNotFoundException e) { > - // Ignore > + // Ignore > } > return (javaClass != null && > serviceType.isAssignableFrom(javaClass)); > } > @@ -210,13 +210,13 @@ public class EquinoxServiceDiscoverer im > return declarations.iterator().next(); > } > } > - > + > private boolean isProviderBundle(Bundle bundle, boolean isTuscanyService) > { > if (bundle.getBundleId() == 0 || > bundle.getSymbolicName().startsWith("1.x-osgi-bundle") > || bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) { > // Skip system bundle as it has access to the application > classloader > // Skip the 1.x runtime bundle as this has 1.x services in it > - // For testing running 1.x and 2.x in same VM. > + // For testing running 1.x and 2.x in same VM. > // Don't know what final form will be yet. > // Skip bundle fragments too > return false; > @@ -231,7 +231,7 @@ public class EquinoxServiceDiscoverer im > } > return true; > } > - > + > protected Collection<Bundle> getBundles(boolean isTuscanyService) { > // return bundles.keySet(); > Set<Bundle> set = new HashSet<Bundle>(); > @@ -256,8 +256,8 @@ public class EquinoxServiceDiscoverer im > > // > http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html > boolean isPropertyFile = > "javax.xml.xpath.XPathFactory".equals(serviceName); > - boolean isTuscanyService = > serviceName.startsWith("org.apache.tuscany.sca."); > - serviceName = "META-INF/services/" + serviceName; > + boolean isTuscanyService = > serviceName.startsWith("org.apache.tuscany.sca.") || > + > serviceName.startsWith("META-INF/services/org.apache.tuscany.sca."); > > Set<URL> visited = new HashSet<URL>(); > //System.out.println(">>>> getServiceDeclarations()"); > @@ -291,6 +291,10 @@ public class EquinoxServiceDiscoverer im > logger.log(Level.SEVERE, e.getMessage(), e); > } > if (urls == null) { > + if(! serviceName.startsWith("META-INF/services/")) { > + return getServiceDeclarations("META-INF/services/" + > serviceName); > + } > + > continue; > } > while (urls.hasMoreElements()) { > @@ -317,7 +321,7 @@ public class EquinoxServiceDiscoverer im > } > return descriptors; > } > - > + > public ClassLoader getContextClassLoader() { > // Get the bundle classloader for the extensibility bundle that has > DynamicImport-Package * > return getClass().getClassLoader(); > >
