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


Reply via email to