You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/08/14 14:12:39 UTC
svn commit: r1617912 - in /tomee/tomee/trunk:
arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/
container/openejb-core/src/main/java/org/apache/openejb/core/
tomee/tomee-catalina/src/main/java/org/apache/tomee/c...
Author: rmannibucau
Date: Thu Aug 14 12:12:38 2014
New Revision: 1617912
URL: http://svn.apache.org/r1617912
Log:
ensuring in our info tree we use the right path for @WebXXX and not an inherited one cause we use a messed up classloading hierarchy
Added:
tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/AnApp.java
Modified:
tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainerTest.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
Added: tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/AnApp.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/AnApp.java?rev=1617912&view=auto
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/AnApp.java (added)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/AnApp.java Thu Aug 14 12:12:38 2014
@@ -0,0 +1,30 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.openejb.arquillian.embedded;
+
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+import java.util.Collections;
+import java.util.Set;
+
+@ApplicationPath("api")
+public class AnApp extends Application {
+ public Set<Class<?>> getClasses() {
+ return Collections.<Class<?>>singleton(ARestService.class);
+ }
+}
Modified: tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainerTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainerTest.java?rev=1617912&r1=1617911&r2=1617912&view=diff
==============================================================================
--- tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainerTest.java (original)
+++ tomee/tomee/trunk/arquillian/arquillian-tomee-embedded/src/test/java/org/apache/openejb/arquillian/embedded/EmbeddedTomEEContainerTest.java Thu Aug 14 12:12:38 2014
@@ -41,7 +41,7 @@ public class EmbeddedTomEEContainerTest
@Deployment
public static WebArchive createDeployment() {
return ShrinkWrap.create(WebArchive.class, "test.war")
- .addClasses(AnEJB.class, AServlet.class, ARestService.class)
+ .addClasses(AnEJB.class, AServlet.class, ARestService.class, AnApp.class)
.setWebXML(new StringAsset(Descriptors.create(WebAppDescriptor.class).version("3.0").exportAsString()));
}
@@ -64,7 +64,7 @@ public class EmbeddedTomEEContainerTest
@Test
public void restServiceIsDeployed() throws Exception {
- final String read = IOUtils.toString(new URL(url.toExternalForm() + "rest/foo").openStream());
+ final String read = IOUtils.toString(new URL(url.toExternalForm() + "api/rest/foo").openStream());
assertEquals("foo", read);
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java?rev=1617912&r1=1617911&r2=1617912&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java Thu Aug 14 12:12:38 2014
@@ -30,7 +30,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.Enumeration;
+import java.util.List;
import java.util.Set;
/**
@@ -76,6 +79,22 @@ public class TempClassLoader extends URL
}
@Override
+ public URL getResource(final String name) {
+ if (!name.startsWith("java/") && !name.startsWith("javax/") && name.endsWith(".class")) {
+ try {
+ final List<URL> urls = Collections.list(getResources(name));
+ if (urls.isEmpty()) {
+ return null;
+ }
+ Collections.sort(urls, new ResourceComparator(getParent(), name));
+ return urls.iterator().next();
+ } catch (final IOException e) {
+ return super.getResource(name);
+ }
+ }
+ return super.getResource(name);
+ }
+
public Enumeration<URL> getResources(final String name) throws IOException {
return URLClassLoaderFirst.filterResources(name, super.getResources(name));
}
@@ -236,4 +255,52 @@ public class TempClassLoader extends URL
}
}
+
+ // let maven resources go after other ones (arquillian tomee embedded and @WebXXX needs it absolutely)
+ private static class ResourceComparator implements Comparator<URL> {
+ private static final ClassLoader STOP_LOADER = getSystemClassLoader().getParent();
+
+ private final ClassLoader loader;
+ private final String name;
+
+ private ResourceComparator(final ClassLoader loader, final String name) {
+ this.loader = loader;
+ this.name = name;
+ }
+
+ @Override
+ public int compare(final URL o1, final URL o2) {
+ if (o1.equals(o2)) {
+ return 0;
+ }
+
+ final int weight1 = weight(o1);
+ final int weight2 = weight(o2);
+ if (weight1 == weight2) {
+ return o1.toExternalForm().compareTo(o2.toExternalForm());
+ }
+ return weight1 - weight2;
+ }
+
+ private int weight(final URL url) {
+ int w = 0;
+ ClassLoader c = loader;
+ while (c != null) {
+ try {
+ if (Collections.list(c.getResources(name)).contains(url)) {
+ w++;
+ } else {
+ break;
+ }
+ } catch (final IOException e) {
+ break;
+ }
+ c = c.getParent();
+ if (c == STOP_LOADER) {
+ break;
+ }
+ }
+ return w;
+ }
+ }
}
Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java?rev=1617912&r1=1617911&r2=1617912&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java Thu Aug 14 12:12:38 2014
@@ -137,7 +137,9 @@ public class TomEEWebappClassLoader exte
}
}
}
- return super.loadClass(name);
+ synchronized (this) { // TODO: rework it to avoid it but not a big issue, see first if of this method
+ return super.loadClass(name);
+ }
}
@Override