|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--bsh.BshClassManager | +--bsh.classpath.ClassManagerImpl
Manage all classloading in BeanShell. Allows classpath extension and class file reloading. This class holds the implementation of the BshClassManager so that it can be separated from the core package. This class currently relies on 1.2 for BshClassLoader and weak references. Is there a workaround for weak refs? If so we could make this work with 1.1 by supplying our own classloader code... See "http://www.beanshell.org/manual/classloading.html" for details on the bsh classloader architecture. Bsh has a multi-tiered class loading architecture. No class loader is used unless/until the classpath is modified or a class is reloaded. Note: we may need some synchronization in here Note on jdk1.2 dependency: We are forced to use weak references here to accomodate all of the fleeting namespace listeners. (NameSpaces must be informed if the class space changes so that they can un-cache names). I had the interesting thought that a way around this would be to implement BeanShell's own garbage collector... Then I came to my senses and said - screw it, class re-loading will require 1.2.
Nested Class Summary |
Nested classes inherited from class bsh.BshClassManager |
BshClassManager.Listener |
Field Summary |
Fields inherited from class bsh.BshClassManager |
absoluteClassCache, absoluteNonClasses, resolvedObjectMethods, resolvedStaticMethods |
Constructor Summary | |
ClassManagerImpl()
Used by BshClassManager singleton constructor |
Method Summary | |
void |
addClassPath(java.net.URL path)
|
void |
addListener(BshClassManager.Listener l)
|
java.lang.Class |
classForName(java.lang.String name)
Load the specified class by name, taking into account added classpath and reloaded classes, etc. |
protected void |
classLoaderChanged()
Clear global class cache and notify namespaces to clear their class caches. |
void |
doSuperImport()
Support for "import *;" Hide details in here as opposed to NameSpace. |
void |
dump(java.io.PrintWriter i)
|
java.lang.ClassLoader |
getBaseLoader()
|
java.lang.String |
getClassNameByUnqName(java.lang.String name)
Return the name or null if none is found, Throw an ClassPathException containing detail if name is ambigous. |
BshClassPath |
getClassPath()
Get the full blown classpath. |
java.net.URL |
getResource(java.lang.String path)
Get a resource URL using the BeanShell classpath |
java.io.InputStream |
getResourceAsStream(java.lang.String path)
Get a resource stream using the BeanShell classpath |
protected boolean |
hasSuperImport()
A "super import" ("import *") operation has been performed. |
java.lang.Class |
plainClassForName(java.lang.String name)
Delegate for bottom level implementation of Class.forName(). |
void |
reloadAllClasses()
Overlay the entire path with a new class loader. |
void |
reloadClasses(java.lang.String[] classNames)
Reloading classes means creating a new classloader and using it whenever we are asked for classes in the appropriate space. |
void |
reloadPackage(java.lang.String pack)
Reload all classes in the specified package: e.g. |
void |
removeListener(BshClassManager.Listener l)
|
void |
reset()
Clear all classloading behavior and class caches and reset to initial state. |
void |
setClassPath(java.net.URL[] cp)
Set a new base classpath and create a new base classloader. |
Methods inherited from class bsh.BshClassManager |
cacheClassInfo, cacheResolvedMethod, classExists, clearCaches, cmUnavailable, createClassManager, getResolvedMethod, noClassDefFound, setClassLoader |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public ClassManagerImpl()
Method Detail |
public java.lang.Class classForName(java.lang.String name)
BshClassManager
classForName
in class BshClassManager
public java.lang.Class plainClassForName(java.lang.String name) throws java.lang.ClassNotFoundException
plainClassForName
in class BshClassManager
java.lang.ClassNotFoundException
BshClassManager.plainClassForName()
public java.net.URL getResource(java.lang.String path)
getResource
in class BshClassManager
path
- should be an absolute pathpublic java.io.InputStream getResourceAsStream(java.lang.String path)
getResourceAsStream
in class BshClassManager
path
- should be an absolute pathpublic void addClassPath(java.net.URL path) throws java.io.IOException
addClassPath
in class BshClassManager
java.io.IOException
public void reset()
reset
in class BshClassManager
public void setClassPath(java.net.URL[] cp)
setClassPath
in class BshClassManager
public void reloadAllClasses() throws ClassPathException
reloadAllClasses
in class BshClassManager
ClassPathException
public void reloadClasses(java.lang.String[] classNames) throws ClassPathException
reloadClasses
in class BshClassManager
ClassPathException
public void reloadPackage(java.lang.String pack) throws ClassPathException
reloadPackage
in class BshClassManager
ClassPathException
public BshClassPath getClassPath() throws ClassPathException
ClassPathException
public void doSuperImport() throws UtilEvalError
doSuperImport
in class BshClassManager
UtilEvalError
protected boolean hasSuperImport()
BshClassManager
hasSuperImport
in class BshClassManager
public java.lang.String getClassNameByUnqName(java.lang.String name) throws ClassPathException
getClassNameByUnqName
in class BshClassManager
ClassPathException
public void addListener(BshClassManager.Listener l)
addListener
in class BshClassManager
public void removeListener(BshClassManager.Listener l)
removeListener
in class BshClassManager
public java.lang.ClassLoader getBaseLoader()
protected void classLoaderChanged()
classLoaderChanged
in class BshClassManager
public void dump(java.io.PrintWriter i)
dump
in class BshClassManager
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |