Package hudson
Class PluginManager.UberClassLoader
java.lang.Object
java.lang.ClassLoader
hudson.util.DelegatingClassLoader
hudson.PluginManager.UberClassLoader
- Enclosing class:
PluginManager
ClassLoader that can see all plugins.-
Constructor Summary
ConstructorsConstructorDescriptionUberClassLoader(List<PluginWrapper> activePlugins) The servlet container'sClassLoader(the parent of Jenkins core) is parallel-capable and maintains its own growingMapofClassLoader.getClassLoadingLock(java.lang.String)objects per class name for every load attempt (including misses), and we cannot override this behavior. -
Method Summary
Modifier and TypeMethodDescriptionprotected Class<?> protected URLfindResource(String name) protected Enumeration<URL> findResources(String name) booleanisPluginJar(URL jarUrl) toString()Methods inherited from class hudson.util.DelegatingClassLoader
loadClassMethods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Constructor Details
-
UberClassLoader
The servlet container'sClassLoader(the parent of Jenkins core) is parallel-capable and maintains its own growingMapofClassLoader.getClassLoadingLock(java.lang.String)objects per class name for every load attempt (including misses), and we cannot override this behavior. Wrap the servlet containerClassLoaderinExistenceCheckingClassLoaderto avoid callingClassLoader.getParent()'sClassLoader.loadClass(String, boolean)at all for misses by first checking if the resource exists. If the resource does not exist, we immediately throwClassNotFoundException. As a result, the servlet container'sClassLoaderis never asked to try and fail, and it never creates/retains lock objects for those misses.
-
-
Method Details
-
findClass
- Overrides:
findClassin classClassLoader- Throws:
ClassNotFoundException
-
findResource
- Overrides:
findResourcein classClassLoader
-
findResources
- Overrides:
findResourcesin classClassLoader- Throws:
IOException
-
toString
-
isPluginJar
@Restricted(org.kohsuke.accmod.restrictions.NoExternalUse.class) public boolean isPluginJar(URL jarUrl)
-