classworlds
is a framework for container developers
who require complex manipulation of Java's ClassLoaders. Java's
native ClassLoader
mechanims and classes can cause
much headache and confusion for certain types of application
developers. Projects which involve dynamic loading of components
or otherwise represent a 'container' can benefit from the classloading
control provided by classworlds
.
classworlds
provides a richer set of semantics for
class loading than Java's normal mechanisms, while still being
able to provide a ClassLoader
interface to integrate
seamlessly with the Java environment.
The classworlds
model does away with the hierarchy
normally associated with ClassLoaders. Instead, there is a
pool of ClassRealms
which can import arbitrary packages from other ClassRealms.
Effectively, classworlds
turns the old-style
hierarchy into a directed graph.
In a application container environment, the container may have a realm capable of loading on the container/component contract interfaces and classes. Another realm is created for each component which imports the contract classes from the container realm.
This model allows for fine-grained control of which classloader loads any particular class. This form of partial isolation can reduce the myriad strange errors that are produced by loading classes from multiple loaders.