org.openejb.util
Class MemoryClassLoader
java.lang.Object
|
+--java.lang.ClassLoader
|
+--org.openejb.util.MemoryClassLoader
- public class MemoryClassLoader
- extends java.lang.ClassLoader
Works around deficencies in Sun's URLClassLoader implementation.
Unfortunately, the URLClassLoader doesn't like it when the original
JAR file changes, and reportedly on Windows it keeps the JAR file
locked too. As well, it seems that you can't make a URLClassLoader
using URLs from Resources in a previous URLClassLoader. So this
ClassLoader loads the contents of the JAR(s) into memory immediately
and then releases the files. The classes are flushed as they are used,
but other files stay in memory permanently. Note that you cannot
acquire a class file as a resource (URL or stream).
Warning: URLs for this are not
yet implemented! You cannot call getResource() or getResources()!
- Version:
- $Revision: 1.2 $
Inner classes inherited from class java.lang.ClassLoader |
java.lang.ClassLoader.NativeLibrary |
Fields inherited from class java.lang.ClassLoader |
nocerts |
Constructor Summary |
MemoryClassLoader(java.lang.ClassLoader parent,
java.util.jar.JarFile file)
|
MemoryClassLoader(java.lang.ClassLoader parent,
java.util.jar.JarFile[] file)
|
MemoryClassLoader(java.lang.ClassLoader parent,
java.util.jar.JarInputStream stream)
Note that you must close the stream after the constructor
returns, in case it is itself a JarInputStream or something. |
MemoryClassLoader(java.lang.ClassLoader parent,
java.util.jar.JarInputStream[] stream)
Note that you must close the streams after the constructor
returns, in case they are also from a JarInputStream or something. |
Method Summary |
void |
addJar(java.util.jar.JarFile jar)
Adds a new JAR to this ClassLoader. |
void |
addJar(java.util.jar.JarInputStream stream)
Adds a new JAR to this ClassLoader. |
boolean |
equals(java.lang.Object o)
|
java.lang.Class |
findClass(java.lang.String name)
|
protected java.util.Enumeration |
findResources(java.lang.String name)
|
java.net.URL |
getResource(java.lang.String name)
|
java.io.InputStream |
getResourceAsStream(java.lang.String name)
|
int |
hashCode()
|
Methods inherited from class java.lang.ClassLoader |
, addClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findNative, findResource, findSystemClass, getBootstrapClassPath, getCallerClassLoader, getGetClassLoaderPerm, getPackage, getPackages, getParent, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, isAncestor, loadClass, loadClass, loadLibrary, resolveClass, setSigners |
Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
MemoryClassLoader
public MemoryClassLoader(java.lang.ClassLoader parent,
java.util.jar.JarFile file)
MemoryClassLoader
public MemoryClassLoader(java.lang.ClassLoader parent,
java.util.jar.JarFile[] file)
MemoryClassLoader
public MemoryClassLoader(java.lang.ClassLoader parent,
java.util.jar.JarInputStream stream)
- Note that you must close the stream after the constructor
returns, in case it is itself a JarInputStream or something.
MemoryClassLoader
public MemoryClassLoader(java.lang.ClassLoader parent,
java.util.jar.JarInputStream[] stream)
- Note that you must close the streams after the constructor
returns, in case they are also from a JarInputStream or something.
getResourceAsStream
public java.io.InputStream getResourceAsStream(java.lang.String name)
- Overrides:
getResourceAsStream
in class java.lang.ClassLoader
getResource
public java.net.URL getResource(java.lang.String name)
- Overrides:
getResource
in class java.lang.ClassLoader
findResources
protected java.util.Enumeration findResources(java.lang.String name)
throws java.io.IOException
- Overrides:
findResources
in class java.lang.ClassLoader
equals
public boolean equals(java.lang.Object o)
- Overrides:
equals
in class java.lang.Object
hashCode
public int hashCode()
- Overrides:
hashCode
in class java.lang.Object
findClass
public java.lang.Class findClass(java.lang.String name)
throws java.lang.ClassNotFoundException
- Overrides:
findClass
in class java.lang.ClassLoader
addJar
public void addJar(java.util.jar.JarFile jar)
- Adds a new JAR to this ClassLoader. This may be called at any time.
addJar
public void addJar(java.util.jar.JarInputStream stream)
- Adds a new JAR to this ClassLoader. This may be called at any time.