Index: trunk/ehcache/ehcache-core/src/test/resources/META-INF/services/net.sf.ehcache.management.ManagementServer =================================================================== diff -u -N -r8309 -r11186 --- trunk/ehcache/ehcache-core/src/test/resources/META-INF/services/net.sf.ehcache.management.ManagementServer (.../net.sf.ehcache.management.ManagementServer) (revision 8309) +++ trunk/ehcache/ehcache-core/src/test/resources/META-INF/services/net.sf.ehcache.management.ManagementServer (.../net.sf.ehcache.management.ManagementServer) (revision 11186) @@ -1,2 +1,2 @@ -#used by ManagementServerLoaderTest -net.sf.ehcache.management.DummyManagementServerImpl \ No newline at end of file +#used by ResourceClassLoaderTest +net.sf.ehcache.management.ClassThatDoesntExist \ No newline at end of file Index: trunk/ehcache/ehcache-core/src/main/java/net/sf/ehcache/management/DevModeClassLoader.java =================================================================== diff -u -N -r7815 -r11186 --- trunk/ehcache/ehcache-core/src/main/java/net/sf/ehcache/management/DevModeClassLoader.java (.../DevModeClassLoader.java) (revision 7815) +++ trunk/ehcache/ehcache-core/src/main/java/net/sf/ehcache/management/DevModeClassLoader.java (.../DevModeClassLoader.java) (revision 11186) @@ -169,10 +169,14 @@ @Override public Enumeration getResources(String name) throws IOException { - Enumeration[] tmp = new Enumeration[2]; - tmp[0] = findResources(name); - tmp[1] = getParent().getResources(name); - return new MergedEnumeration(tmp[0], tmp[1]); + if (name.startsWith("META-INF/services")) { + return findResources(name); + } else { + Enumeration[] tmp = new Enumeration[2]; + tmp[0] = findResources(name); + tmp[1] = getParent().getResources(name); + return new MergedEnumeration(tmp[0], tmp[1]); + } } @Override Index: trunk/ehcache/ehcache-core/src/test/java/net/sf/ehcache/management/ResourceClassLoaderTest.java =================================================================== diff -u -N -r6307 -r11186 --- trunk/ehcache/ehcache-core/src/test/java/net/sf/ehcache/management/ResourceClassLoaderTest.java (.../ResourceClassLoaderTest.java) (revision 6307) +++ trunk/ehcache/ehcache-core/src/test/java/net/sf/ehcache/management/ResourceClassLoaderTest.java (.../ResourceClassLoaderTest.java) (revision 11186) @@ -23,12 +23,21 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; +import java.util.Iterator; +import java.util.ServiceConfigurationError; +import java.util.ServiceLoader; import junit.framework.Assert; import org.junit.Before; import org.junit.Test; +import static java.util.Collections.list; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.iterableWithSize; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.fail; + /** * * Test to validate the behavior of the resource class loader @@ -75,6 +84,20 @@ } @Test + public void testServicesFilesDoNotDelegate() throws IOException { + ResourceClassLoader resourceClassLoader = new ResourceClassLoader("rest-management-private-classpath", testCaseClassLoader); + assertThat(list(testCaseClassLoader.getResources("META-INF/services/" + ManagementServer.class.getName())), iterableWithSize(1)); + assertThat(list(resourceClassLoader.getResources("META-INF/services/" + ManagementServer.class.getName())), iterableWithSize(1)); + assertThat(ServiceLoader.load(ManagementServer.class, resourceClassLoader), iterableWithSize(1)); + try { + for (ManagementServer unused : ServiceLoader.load(ManagementServer.class, testCaseClassLoader)) { } + fail("Expected ServiceConfigurationError"); + } catch (ServiceConfigurationError e) { + assertThat(e.getMessage(), containsString("Provider net.sf.ehcache.management.ClassThatDoesntExist not found")); + } + } + + @Test public void workingWithClassFromPrivateClassPathTest() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, IOException { Index: trunk/ehcache/ehcache-core/src/main/java/net/sf/ehcache/management/ResourceClassLoader.java =================================================================== diff -u -N -r10789 -r11186 --- trunk/ehcache/ehcache-core/src/main/java/net/sf/ehcache/management/ResourceClassLoader.java (.../ResourceClassLoader.java) (revision 10789) +++ trunk/ehcache/ehcache-core/src/main/java/net/sf/ehcache/management/ResourceClassLoader.java (.../ResourceClassLoader.java) (revision 11186) @@ -130,10 +130,14 @@ * except the first resources (more important) are the ones found with our ResourceClassLoader */ public Enumeration getResources(String resourceName) throws IOException { - Enumeration[] tmp = new Enumeration[2]; - tmp[0] = findResources(resourceName); - tmp[1] = getParent().getResources(resourceName); - return new MergedEnumeration(tmp[0], tmp[1]); + if (resourceName.startsWith("META-INF/services/")) { + return findResources(resourceName); + } else { + Enumeration[] tmp = new Enumeration[2]; + tmp[0] = findResources(resourceName); + tmp[1] = getParent().getResources(resourceName); + return new MergedEnumeration(tmp[0], tmp[1]); + } }; @Override