Author: rmannibucau
Date: Sat Oct 13 15:25:36 2012
New Revision: 1397855
URL: http://svn.apache.org/viewvc?rev=1397855&view=rev
Log:
TOMEE-462 try system classloader before defining the class in tempclassloader
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java?rev=1397855&r1=1397854&r2=1397855&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/TempClassLoader.java
Sat Oct 13 15:25:36 2012
@@ -17,7 +17,6 @@
package org.apache.openejb.core;
import org.apache.openejb.loader.IO;
-import org.apache.openejb.loader.Options;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.classloader.URLClassLoaderFirst;
import org.apache.xbean.asm.ClassReader;
@@ -30,8 +29,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
-import java.util.Arrays;
-import java.util.Collection;
import java.util.Set;
/**
@@ -48,11 +45,13 @@ import java.util.Set;
*/
// Note: this class is a fork from OpenJPA
public class TempClassLoader extends URLClassLoader {
- private Set<Skip> skip;
+ private final Set<Skip> skip;
+ private final ClassLoader system;
public TempClassLoader(ClassLoader parent) {
super(new URL[0], parent);
skip =
SystemInstance.get().getOptions().getAll("openejb.tempclassloader.skip",
Skip.NONE);
+ system = ClassLoader.getSystemClassLoader();
}
/*
@@ -92,6 +91,21 @@ public class TempClassLoader extends URL
if (skip(name)) {
return Class.forName(name, resolve, getClass().getClassLoader());
}
+
+ // don't load classes from app classloader
+ // we do it after the previous one since it will probably result to
the same
+ // Class and the previous one is faster than this one
+ if (URLClassLoaderFirst.canBeLoadedFromSystem(name)) {
+ try {
+ c = system.loadClass(name);
+ if (c != null) {
+ return c;
+ }
+ } catch (ClassNotFoundException ignored) {
+ // no-op
+ }
+ }
+
// ( && !name.startsWith("javax.faces.") )||
String resourceName = name.replace('.', '/') + ".class";
InputStream in = getResourceAsStream(resourceName);
@@ -149,10 +163,7 @@ public class TempClassLoader extends URL
// TODO: for jsf it can be useful to include commons-logging and
openwebbeans...
private boolean skip(String name) {
- if (skip.contains(Skip.ALL)) {
- return true;
- }
- return URLClassLoaderFirst.shouldSkip(name);
+ return skip.contains(Skip.ALL) || URLClassLoaderFirst.shouldSkip(name);
}
public static enum Skip {
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java?rev=1397855&r1=1397854&r2=1397855&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
Sat Oct 13 15:25:36 2012
@@ -160,11 +160,8 @@ public class URLClassLoaderFirst extends
// we skip webapp enrichment jars since we want to load them from the
webapp or lib
// Note: this is not a real limitation since it is first fail it will be
done later
- private static boolean canBeLoadedFromSystem(final String name) {
- if (name.startsWith("org.apache.openejb.")) {
- return
!isWebAppEnrichment(name.substring("org.apache.openejb.".length()));
- }
- return true;
+ public static boolean canBeLoadedFromSystem(final String name) {
+ return !name.startsWith("org.apache.openejb.") ||
!isWebAppEnrichment(name.substring("org.apache.openejb.".length()));
}
// making all these call inline if far more costly than factorizing
packages