Class CachingJavaSourceClassLoader
JavaSourceClassLoader
that uses a resource storage provided by the application to cache
compiled classes and thus saving unnecessary recompilations.
The application provides access to the resource storeage through a pair of a ResourceFinder
and a ResourceCreator
(see CachingJavaSourceClassLoader(ClassLoader, ResourceFinder, String, ResourceFinder, ResourceCreator)
.
See AbstractJavaSourceClassLoader.main(String[])
for an example how to use this class.
Notice: You must NOT rely on that this class stores some particular data in some particular resources through
the given classFileCacheResourceFinder/Creator
! These serve only as a means for the CachingJavaSourceClassLoader
to persistently cache some data between invocations. In other words: If you want to
compile .java
files into .class
files, then don't use this class but Compiler
instead!
-
Nested Class Summary
Nested classes/interfaces inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
AbstractJavaSourceClassLoader.ProtectionDomainFactory
-
Field Summary
Fields inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
optionalProtectionDomainFactory
-
Constructor Summary
ConstructorsConstructorDescriptionCachingJavaSourceClassLoader
(ClassLoader parentClassLoader, File[] optionalSourcePath, String optionalCharacterEncoding, File cacheDirectory) CachingJavaSourceClassLoader
(ClassLoader parentClassLoader, ResourceFinder sourceFinder, String optionalCharacterEncoding, ResourceFinder classFileCacheResourceFinder, ResourceCreator classFileCacheResourceCreator) Notice that this class is thread-safe if and only if theclassFileCacheResourceCreator
stores its data atomically, i.e. -
Method Summary
Modifier and TypeMethodDescriptionprotected Map
generateBytecodes
(String className) OverrideJavaSourceClassLoader.generateBytecodes(String)
to implement class file caching.Methods inherited from class org.codehaus.janino.JavaSourceClassLoader
findClass, setCompileErrorHandler, setDebuggingInfo, setSourceFileCharacterEncoding, setSourcePath, setWarningHandler
Methods inherited from class org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
main, setProtectionDomainFactory
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResource, findResources, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Constructor Details
-
CachingJavaSourceClassLoader
public CachingJavaSourceClassLoader(ClassLoader parentClassLoader, File[] optionalSourcePath, String optionalCharacterEncoding, File cacheDirectory) SeeCachingJavaSourceClassLoader(ClassLoader, ResourceFinder, String, ResourceFinder, ResourceCreator)
.- Parameters:
optionalSourcePath
- Directories to scan for source filescacheDirectory
- Directory to use for caching generated class files (see class description)
-
CachingJavaSourceClassLoader
public CachingJavaSourceClassLoader(ClassLoader parentClassLoader, ResourceFinder sourceFinder, String optionalCharacterEncoding, ResourceFinder classFileCacheResourceFinder, ResourceCreator classFileCacheResourceCreator) Notice that this class is thread-safe if and only if theclassFileCacheResourceCreator
stores its data atomically, i.e. theclassFileCacheResourceFinder
sees the resource written by theclassFileCacheResourceCreator
only after theOutputStream
is closed.In order to make the caching scheme work, both the
classFileCacheResourceFinder
and thesourceFinder
must support theResource.lastModified()
method, so that the modification time of the source and the class files can be compared.- Parameters:
parentClassLoader
- Attempt to load classes through this one before looking for source filessourceFinder
- Finds Java™ source for classpkg.Cls
in resourcepkg/Cls.java
optionalCharacterEncoding
- Encoding of Java™ source ornull
for platform default encodingclassFileCacheResourceFinder
- Finds precompiled classpkg.Cls
in resourcepkg/Cls.class
(see class description)classFileCacheResourceCreator
- Stores compiled classpkg.Cls
in resourcepkg/Cls.class
(see class description)
-
-
Method Details
-
generateBytecodes
OverrideJavaSourceClassLoader.generateBytecodes(String)
to implement class file caching.- Overrides:
generateBytecodes
in classJavaSourceClassLoader
- Returns:
- String name => byte[] bytecode, or
null
if no source code could be found - Throws:
ClassNotFoundException
- Compilation problems or class file cache I/O problems
-