Package com.ultikits.ultitools
Class ModuleClassLoader
java.lang.Object
java.lang.ClassLoader
java.security.SecureClassLoader
java.net.URLClassLoader
com.ultikits.ultitools.ModuleClassLoader
- All Implemented Interfaces:
Closeable,AutoCloseable
The single, parent-first module loader. Only classes physically supplied by explicit module JAR
URLs enter the ordered rewrite chain. Server JARs, directories and manifest Class-Path additions
retain URLClassLoader's own definition path. Resource discovery remains inherited; module JAR
handles are retained until this loader closes, just like URLClassLoader's own JAR handles.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate booleanprivate final BiConsumer<String, byte[]> private final ConcurrentMap<URL, LinkageAudit.Audit> private final ConcurrentMap<String, Package> private final ConcurrentMap<String, Object> private final ConcurrentMap<URL, ConcurrentMap<String, Integer>> private final List<ClassRewriteRule> private final AtomicBoolean -
Constructor Summary
ConstructorsConstructorDescriptionModuleClassLoader(URL[] urls, ClassLoader parent, URL serverJar) Production rules use this start's real parent, never the module loader itself.ModuleClassLoader(URL[] urls, ClassLoader parent, URL serverJar, List<ClassRewriteRule> rules, BiConsumer<String, byte[]> definitionObserver) Internal test seam observes a copy of exactly the bytes about to be defined. -
Method Summary
Modifier and TypeMethodDescription(package private) List<LinkageAudit.Finding> Uses exactly the rule snapshot that class definition uses, also for the offline entry point.(package private) voidauditModules(Logger logger) Pre-scans each explicit module once; classification waits for normal container assembly.voidclose()private voidensurePackage(String binaryName, Manifest manifest, URL source) protected Class<?> (package private) LinkageAudit.Auditprivate static boolean(package private) voidlogRewriteCounts(Logger logger) One observed startup snapshot, after module initialization.private JarFilemoduleJar(URL source, JarURLConnection connection) private static byte[]readFully(InputStream input) private voidrecordRewrite(URL source, String binaryName) (package private) voidreportModule(Class<?> mainClass, String[] roots, Logger logger) Emits a cached audit only when normal assembly has obtained the module's real scan roots.private byte[]Methods inherited from class java.net.URLClassLoader
addURL, definePackage, findResource, findResources, getPermissions, getResourceAsStream, getURLs, newInstance, newInstanceMethods inherited from class java.security.SecureClassLoader
defineClass, defineClassMethods 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, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Field Details
-
moduleJars
-
rules
-
definitionObserver
-
packageLocks
-
ownPackages
-
auditedModules
-
moduleAudits
-
reportedModules
-
moduleJarFiles
-
closed
private boolean closed -
rewrittenClasses
-
startupReported
-
-
Constructor Details
-
ModuleClassLoader
ModuleClassLoader(URL[] urls, ClassLoader parent, URL serverJar) Production rules use this start's real parent, never the module loader itself. -
ModuleClassLoader
ModuleClassLoader(URL[] urls, ClassLoader parent, URL serverJar, List<ClassRewriteRule> rules, BiConsumer<String, byte[]> definitionObserver) Internal test seam observes a copy of exactly the bytes about to be defined.
-
-
Method Details
-
audit
Uses exactly the rule snapshot that class definition uses, also for the offline entry point.- Throws:
IOException
-
inspect
- Throws:
IOException
-
reportModule
Emits a cached audit only when normal assembly has obtained the module's real scan roots. -
auditModules
Pre-scans each explicit module once; classification waits for normal container assembly. -
findClass
- Overrides:
findClassin classURLClassLoader- Throws:
ClassNotFoundException
-
moduleJar
- Throws:
IOException
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classURLClassLoader- Throws:
IOException
-
rewrite
-
recordRewrite
-
logRewriteCounts
One observed startup snapshot, after module initialization. Later lazy loads are not predictions in this count and do not print additional startup lines. -
ensurePackage
-
isSealed
-
readFully
- Throws:
IOException
-