Make LaunchedURLClassLoader lock provider static
Fixes gh-1380
This commit is contained in:
parent
fc7823bc42
commit
54625cc2a0
|
|
@ -36,19 +36,10 @@ import org.springframework.boot.loader.jar.JarFile;
|
||||||
*/
|
*/
|
||||||
public class LaunchedURLClassLoader extends URLClassLoader {
|
public class LaunchedURLClassLoader extends URLClassLoader {
|
||||||
|
|
||||||
static {
|
private static LockProvider LOCK_PROVIDER = setupLockProvider();
|
||||||
try {
|
|
||||||
ClassLoader.registerAsParallelCapable();
|
|
||||||
}
|
|
||||||
catch (NoSuchMethodError ex) {
|
|
||||||
// Not available on earlier JDKs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private final ClassLoader rootClassLoader;
|
private final ClassLoader rootClassLoader;
|
||||||
|
|
||||||
private final LockProvider lockProvider;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new {@link LaunchedURLClassLoader} instance.
|
* Create a new {@link LaunchedURLClassLoader} instance.
|
||||||
* @param urls the URLs from which to load classes and resources
|
* @param urls the URLs from which to load classes and resources
|
||||||
|
|
@ -57,17 +48,6 @@ public class LaunchedURLClassLoader extends URLClassLoader {
|
||||||
public LaunchedURLClassLoader(URL[] urls, ClassLoader parent) {
|
public LaunchedURLClassLoader(URL[] urls, ClassLoader parent) {
|
||||||
super(urls, parent);
|
super(urls, parent);
|
||||||
this.rootClassLoader = findRootClassLoader(parent);
|
this.rootClassLoader = findRootClassLoader(parent);
|
||||||
this.lockProvider = createLockProvider();
|
|
||||||
}
|
|
||||||
|
|
||||||
private LockProvider createLockProvider() {
|
|
||||||
try {
|
|
||||||
ClassLoader.class.getMethod("getClassLoadingLock", String.class);
|
|
||||||
return new Java7LockProvider();
|
|
||||||
}
|
|
||||||
catch (NoSuchMethodException ex) {
|
|
||||||
return new LockProvider();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ClassLoader findRootClassLoader(ClassLoader classLoader) {
|
private ClassLoader findRootClassLoader(ClassLoader classLoader) {
|
||||||
|
|
@ -148,7 +128,7 @@ public class LaunchedURLClassLoader extends URLClassLoader {
|
||||||
@Override
|
@Override
|
||||||
protected Class<?> loadClass(String name, boolean resolve)
|
protected Class<?> loadClass(String name, boolean resolve)
|
||||||
throws ClassNotFoundException {
|
throws ClassNotFoundException {
|
||||||
synchronized (this.lockProvider.getLock(this, name)) {
|
synchronized (LaunchedURLClassLoader.LOCK_PROVIDER.getLock(this, name)) {
|
||||||
Class<?> loadedClass = findLoadedClass(name);
|
Class<?> loadedClass = findLoadedClass(name);
|
||||||
if (loadedClass == null) {
|
if (loadedClass == null) {
|
||||||
Handler.setUseFastConnectionExceptions(true);
|
Handler.setUseFastConnectionExceptions(true);
|
||||||
|
|
@ -244,6 +224,16 @@ public class LaunchedURLClassLoader extends URLClassLoader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static LockProvider setupLockProvider() {
|
||||||
|
try {
|
||||||
|
ClassLoader.registerAsParallelCapable();
|
||||||
|
return new Java7LockProvider();
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodError ex) {
|
||||||
|
return new LockProvider();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Strategy used to provide the synchronize lock object to use when loading classes.
|
* Strategy used to provide the synchronize lock object to use when loading classes.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue