org.openejb.util
Class MemoryClassLoader

java.lang.Object
  extended by java.lang.ClassLoader
      extended by 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: 1096 $
Author:
Aaron Mulder (ammulder@alumni.princeton.edu)

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
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findLibrary, findLoadedClass, findResource, findSystemClass, getPackage, getPackages, getParent, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

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.

Method Detail

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
Throws:
java.io.IOException

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
Throws:
java.lang.ClassNotFoundException

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.



Copyright © 1999-2011 OpenEJB. All Rights Reserved.