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) {