public class ClassloaderExecutor extends Object
ClassloaderExecutor cle = new ClassloaderExecutor(myClassloader);
cle.execute(new Runnable() {
public void run() {
myObject.myMethod();
}
});
What happens is that the entire object graph of myObject is deep-cloned into the myClassloader classloader
and then the myObject.myMethod() is executed.
You can also execute methods that return something:
ClassloaderExecutor cle = new ClassloaderExecutor(myClassloader);
MyResult result = cle.execute(new Callable() {
public MyResult call() throws Exception {
return myObject.myMethod();
}
});
Here we imagine that myObject.myMethod() returns an object of type MyResult. Again the entire
state will be deep-cloned to myClassloader and then the myObject.myMethod() is executed.
The result of the method call is deep-cloned back into the original classloader (the one that made the call to
cle.execute(..)) and is ready for use.
Note that the ClassloaderExecutor requires a deep cloner implementing the DeepClonerSPI present in the class-path.
| Constructor and Description |
|---|
ClassloaderExecutor(ClassLoader classloader) |
| Modifier and Type | Method and Description |
|---|---|
<T> T |
execute(Callable<T> callable) |
void |
execute(Runnable runnable) |
public ClassloaderExecutor(ClassLoader classloader)
Copyright © 2007–2015. All rights reserved.