org.codehaus.janino
Class CachingJavaSourceClassLoader
java.lang.Object
java.lang.ClassLoader
org.codehaus.commons.compiler.AbstractJavaSourceClassLoader
org.codehaus.janino.JavaSourceClassLoader
org.codehaus.janino.CachingJavaSourceClassLoader
public class CachingJavaSourceClassLoader
- extends JavaSourceClassLoader
A 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!
Constructor Summary |
CachingJavaSourceClassLoader(java.lang.ClassLoader parentClassLoader,
java.io.File[] optionalSourcePath,
java.lang.String optionalCharacterEncoding,
java.io.File cacheDirectory)
See CachingJavaSourceClassLoader(ClassLoader, ResourceFinder, String, ResourceFinder, ResourceCreator) . |
CachingJavaSourceClassLoader(java.lang.ClassLoader parentClassLoader,
ResourceFinder sourceFinder,
java.lang.String optionalCharacterEncoding,
ResourceFinder classFileCacheResourceFinder,
ResourceCreator classFileCacheResourceCreator)
Notice that this class is thread-safe if and only if the classFileCacheResourceCreator stores its data
atomically, i.e. |
Methods inherited from class java.lang.ClassLoader |
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findResource, findResources, findSystemClass, getPackage, getPackages, getParent, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
CachingJavaSourceClassLoader
public CachingJavaSourceClassLoader(java.lang.ClassLoader parentClassLoader,
java.io.File[] optionalSourcePath,
java.lang.String optionalCharacterEncoding,
java.io.File cacheDirectory)
- See
CachingJavaSourceClassLoader(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(java.lang.ClassLoader parentClassLoader,
ResourceFinder sourceFinder,
java.lang.String optionalCharacterEncoding,
ResourceFinder classFileCacheResourceFinder,
ResourceCreator classFileCacheResourceCreator)
- Notice that this class is thread-safe if and only if the
classFileCacheResourceCreator
stores its data
atomically, i.e. the classFileCacheResourceFinder
sees the resource written by the classFileCacheResourceCreator
only after the OutputStream
is closed.
In order to make the caching scheme work, both the classFileCacheResourceFinder
and the sourceFinder
must support the Resource.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 class pkg.Cls
in resource pkg/Cls.java
optionalCharacterEncoding
- Encoding of Java™ source or null
for platform default
encodingclassFileCacheResourceFinder
- Finds precompiled class pkg.Cls
in resource pkg/Cls.class
(see class description)classFileCacheResourceCreator
- Stores compiled class pkg.Cls
in resource pkg/Cls.class
(see
class description)
generateBytecodes
protected java.util.Map generateBytecodes(java.lang.String className)
throws java.lang.ClassNotFoundException
- Override
JavaSourceClassLoader.generateBytecodes(String)
to implement class file caching.
- Overrides:
generateBytecodes
in class JavaSourceClassLoader
- Returns:
- String name => byte[] bytecode, or
null
if no source code could be found
- Throws:
java.lang.ClassNotFoundException
- Compilation problems or class file cache I/O problems
Copyright © 2001-2012. All Rights Reserved.