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 2015/04/20 16:00:10 UTC

tomee git commit: removing this classloader lock and using synchronized for now

Repository: tomee
Updated Branches:
  refs/heads/tomee-1.7.x 28998c937 -> 899ddaa1c


removing this classloader lock and using synchronized for now


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/899ddaa1
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/899ddaa1
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/899ddaa1

Branch: refs/heads/tomee-1.7.x
Commit: 899ddaa1cd814fb847fdfefb28a0d0baddc59197
Parents: 28998c9
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Mon Apr 20 15:59:53 2015 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Mon Apr 20 16:00:04 2015 +0200

----------------------------------------------------------------------
 .../util/classloader/URLClassLoaderFirst.java   | 83 +++++++++-----------
 1 file changed, 35 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/899ddaa1/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java b/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
index b91c221..f1c48f0 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/classloader/URLClassLoaderFirst.java
@@ -28,13 +28,9 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
-import java.util.concurrent.locks.ReentrantLock;
 
 // TODO: look SM usage, find a better name
 public class URLClassLoaderFirst extends URLClassLoader {
-
-    private static final ReentrantLock LOCK;
-
     // log4j is optional, moreover it will likely not work if not skipped and loaded by a temp classloader
     private static final boolean SKIP_LOG4J = "true".equals(SystemInstance.get().getProperty("openejb.skip.log4j", "true")) && skipLib("org.apache.log4j.Logger");
     private static final boolean SKIP_MYFACES = "true".equals(SystemInstance.get().getProperty("openejb.skip.myfaces", "true")) && skipLib("org.apache.myfaces.spi.FactoryFinderProvider");
@@ -51,7 +47,6 @@ public class URLClassLoaderFirst extends URLClassLoader {
     public static final Collection<String> FORCED_LOAD = new ArrayList<String>();
 
     static {
-        LOCK = new ReentrantLock();
         reloadConfig();
     }
 
@@ -91,62 +86,54 @@ public class URLClassLoaderFirst extends URLClassLoader {
     }
 
     @Override
-    public Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException {
-
-        final ReentrantLock lock = LOCK;
-        lock.lock();
-
-        try {
-            // already loaded?
-            Class<?> clazz = findLoadedClass(name);
-            if (clazz != null) {
-                if (resolve) {
-                    resolveClass(clazz);
-                }
-                return clazz;
-            }
-
-            // JSE classes?
-            if (canBeLoadedFromSystem(name)) {
-                try {
-                    clazz = system.loadClass(name);
-                    if (clazz != null) {
-                        if (resolve) {
-                            resolveClass(clazz);
-                        }
-                        return clazz;
-                    }
-                } catch (final ClassNotFoundException ignored) {
-                    // no-op
-                }
+    public synchronized Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException {
+        // already loaded?
+        Class<?> clazz = findLoadedClass(name);
+        if (clazz != null) {
+            if (resolve) {
+                resolveClass(clazz);
             }
+            return clazz;
+        }
 
-            // look for it in this classloader
-            final boolean ok = !(shouldSkip(name) || shouldDelegateToTheContainer(this, name));
-            if (ok) {
-                clazz = loadInternal(name, resolve);
+        // JSE classes?
+        if (canBeLoadedFromSystem(name)) {
+            try {
+                clazz = system.loadClass(name);
                 if (clazz != null) {
+                    if (resolve) {
+                        resolveClass(clazz);
+                    }
                     return clazz;
                 }
+            } catch (final ClassNotFoundException ignored) {
+                // no-op
             }
+        }
 
-            // finally delegate
-            clazz = loadFromParent(name, resolve);
+        // look for it in this classloader
+        final boolean ok = !(shouldSkip(name) || shouldDelegateToTheContainer(this, name));
+        if (ok) {
+            clazz = loadInternal(name, resolve);
             if (clazz != null) {
                 return clazz;
             }
+        }
 
-            if (!ok) {
-                clazz = loadInternal(name, resolve);
-                if (clazz != null) {
-                    return clazz;
-                }
-            }
+        // finally delegate
+        clazz = loadFromParent(name, resolve);
+        if (clazz != null) {
+            return clazz;
+        }
 
-            throw new ClassNotFoundException(name);
-        } finally {
-            lock.unlock();
+        if (!ok) {
+            clazz = loadInternal(name, resolve);
+            if (clazz != null) {
+                return clazz;
+            }
         }
+
+        throw new ClassNotFoundException(name);
     }
 
     public static boolean shouldDelegateToTheContainer(final ClassLoader loader, final String name) {