|
|||||||||
| Home >> All >> [ bsh overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
bsh
Class BshClassManager

java.lang.Objectbsh.BshClassManager
- public class BshClassManager
- extends java.lang.Object
BshClassManager manages all classloading in BeanShell. It also supports a dynamically loaded extension (bsh.classpath package) which allows classpath extension and class file reloading. Currently the extension relies on 1.2 for BshClassLoader and weak references. 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.
| Nested Class Summary | |
static interface |
BshClassManager.Listener
|
(package private) static class |
BshClassManager.SignatureKey
SignatureKey serves as a hash of a method signature on a class for fast lookup of overloaded and general resolved Java methods. |
| Field Summary | |
protected java.util.Hashtable |
absoluteClassCache
Global cache for things we know are classes. |
protected java.util.Hashtable |
absoluteNonClasses
Global cache for things we know are *not* classes. |
private java.lang.ClassLoader |
externalClassLoader
An external classloader supplied by the setClassLoader() command. |
private static java.lang.Object |
NOVALUE
Identifier for no value item. |
protected java.util.Hashtable |
resolvedObjectMethods
Caches for resolved object and static methods. |
protected java.util.Hashtable |
resolvedStaticMethods
|
| Constructor Summary | |
BshClassManager()
|
|
| Method Summary | |
void |
addClassPath(java.net.URL path)
|
void |
addListener(BshClassManager.Listener l)
|
void |
cacheClassInfo(java.lang.String name,
java.lang.Class value)
Cache info about whether name is a class or not. |
void |
cacheResolvedMethod(java.lang.Class clas,
java.lang.Object[] args,
java.lang.reflect.Method method)
Cache a resolved (possibly overloaded) method based on the argument types used to invoke it, subject to classloader change. |
boolean |
classExists(java.lang.String name)
|
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()
|
protected void |
clearCaches()
Clear the caches in BshClassManager |
protected static UtilEvalError |
cmUnavailable()
|
static BshClassManager |
createClassManager()
Create a new instance of the class manager. |
protected void |
doSuperImport()
Support for "import *;" Hide details in here as opposed to NameSpace. |
void |
dump(java.io.PrintWriter pw)
|
protected 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. |
java.lang.reflect.Method |
getResolvedMethod(java.lang.Class clas,
java.lang.String methodName,
java.lang.Object[] args,
boolean onlyStatic)
Return a previously cached resolved method. |
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. |
protected static java.lang.Error |
noClassDefFound(java.lang.String className,
java.lang.Error e)
Annotate the NoClassDefFoundError with some info about the class we were trying to load. |
java.lang.Class |
plainClassForName(java.lang.String name)
Perform a plain Class.forName() or call the externally provided classloader. |
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 loaders and start over. |
void |
setClassLoader(java.lang.ClassLoader externalCL)
Set an external class loader. |
void |
setClassPath(java.net.URL[] cp)
Set a new base classpath and create a new base classloader. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
NOVALUE
private static java.lang.Object NOVALUE
- Identifier for no value item. Use a hashtable as a Set.
externalClassLoader
private java.lang.ClassLoader externalClassLoader
- An external classloader supplied by the setClassLoader() command.
absoluteClassCache
protected transient java.util.Hashtable absoluteClassCache
- Global cache for things we know are classes.
Note: these should probably be re-implemented with Soft references.
(as opposed to strong or Weak)
absoluteNonClasses
protected transient java.util.Hashtable absoluteNonClasses
- Global cache for things we know are *not* classes.
Note: these should probably be re-implemented with Soft references.
(as opposed to strong or Weak)
resolvedObjectMethods
protected transient java.util.Hashtable resolvedObjectMethods
- Caches for resolved object and static methods.
We keep these maps separate to support fast lookup in the general case
where the method may be either.
resolvedStaticMethods
protected transient java.util.Hashtable resolvedStaticMethods
| Constructor Detail |
BshClassManager
public BshClassManager()
| Method Detail |
createClassManager
public static BshClassManager createClassManager()
- Create a new instance of the class manager.
Class manager instnaces are now associated with the interpreter.
classExists
public boolean classExists(java.lang.String name)
classForName
public java.lang.Class classForName(java.lang.String name)
- Load the specified class by name, taking into account added classpath
and reloaded classes, etc.
plainClassForName
public java.lang.Class plainClassForName(java.lang.String name) throws java.lang.ClassNotFoundException
- Perform a plain Class.forName() or call the externally provided
classloader.
If a BshClassManager implementation is loaded the call will be
delegated to it, to allow for additional hooks.
This simply wraps that bottom level class lookup call and provides a
central point for monitoring and handling certain Java version
dependent bugs, etc.
getResource
public java.net.URL getResource(java.lang.String path)
- Get a resource URL using the BeanShell classpath
getResourceAsStream
public java.io.InputStream getResourceAsStream(java.lang.String path)
- Get a resource stream using the BeanShell classpath
cacheClassInfo
public void cacheClassInfo(java.lang.String name, java.lang.Class value)
- Cache info about whether name is a class or not.
cacheResolvedMethod
public void cacheResolvedMethod(java.lang.Class clas, java.lang.Object[] args, java.lang.reflect.Method method)
- Cache a resolved (possibly overloaded) method based on the
argument types used to invoke it, subject to classloader change.
Static and Object methods are cached separately to support fast lookup
in the general case where either will do.
getResolvedMethod
public java.lang.reflect.Method getResolvedMethod(java.lang.Class clas, java.lang.String methodName, java.lang.Object[] args, boolean onlyStatic)
- Return a previously cached resolved method.
clearCaches
protected void clearCaches()
- Clear the caches in BshClassManager
setClassLoader
public void setClassLoader(java.lang.ClassLoader externalCL)
- Set an external class loader. BeanShell will use this at the same
point it would otherwise use the plain Class.forName().
i.e. if no explicit classpath management is done from the script
(addClassPath(), setClassPath(), reloadClasses()) then BeanShell will
only use the supplied classloader. If additional classpath management
is done then BeanShell will perform that in addition to the supplied
external classloader.
However BeanShell is not currently able to reload
classes supplied through the external classloader.
addClassPath
public void addClassPath(java.net.URL path) throws java.io.IOException
reset
public void reset()
- Clear all loaders and start over. No class loading.
setClassPath
public void setClassPath(java.net.URL[] cp) throws UtilEvalError
- Set a new base classpath and create a new base classloader.
This means all types change.
reloadAllClasses
public void reloadAllClasses()
throws UtilEvalError
- Overlay the entire path with a new class loader.
Set the base path to the user path + base path.
No point in including the boot class path (can't reload thos).
reloadClasses
public void reloadClasses(java.lang.String[] classNames) throws UtilEvalError
- Reloading classes means creating a new classloader and using it
whenever we are asked for classes in the appropriate space.
For this we use a DiscreteFilesClassLoader
reloadPackage
public void reloadPackage(java.lang.String pack) throws UtilEvalError
- Reload all classes in the specified package: e.g. "com.sun.tools"
The special package name "
" can be used to refer to unpackaged classes.
doSuperImport
protected void doSuperImport()
throws UtilEvalError
- Support for "import *;"
Hide details in here as opposed to NameSpace.
hasSuperImport
protected boolean hasSuperImport()
- A "super import" ("import *") operation has been performed.
getClassNameByUnqName
protected java.lang.String getClassNameByUnqName(java.lang.String name) throws UtilEvalError
- Return the name or null if none is found,
Throw an ClassPathException containing detail if name is ambigous.
addListener
public void addListener(BshClassManager.Listener l)
removeListener
public void removeListener(BshClassManager.Listener l)
dump
public void dump(java.io.PrintWriter pw)
classLoaderChanged
protected void classLoaderChanged()
noClassDefFound
protected static java.lang.Error noClassDefFound(java.lang.String className, java.lang.Error e)
- Annotate the NoClassDefFoundError with some info about the class
we were trying to load.
cmUnavailable
protected static UtilEvalError cmUnavailable()
|
|||||||||
| Home >> All >> [ bsh overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
JAVADOC
bsh.BshClassManager