Class CompilingClassLoader

java.lang.Object
java.lang.ClassLoader
org.apache.storm.sql.javac.CompilingClassLoader

public class CompilingClassLoader extends ClassLoader
This is a Java ClassLoader that will attempt to load a class from a string of source code.

Example

 String className = "com.foo.MyClass";
 String classSource =
   "package com.foo;\n" +
   "public class MyClass implements Runnable {\n" +
   "  @Override public void run() {\n" +
   "   log(\"Hello world\");\n" +
   "  }\n" +
   "}";

 // Load class from source.
 ClassLoader classLoader = new CompilingClassLoader(
     parentClassLoader, className, classSource);
 Class myClass = classLoader.loadClass(className);

 // Use it.
 Runnable instance = (Runnable)myClass.newInstance();
 instance.run();
 

Only one chunk of source can be compiled per instance of CompilingClassLoader. If you need to compile more, create multiple CompilingClassLoader instances.

Uses Java 1.6's in built compiler API.

If the class cannot be compiled, loadClass() will throw a ClassNotFoundException and log the compile errors to System.err. If you don't want the messages logged, or want to explicitly handle the messages you can provide your own DiagnosticListener through {#setDiagnosticListener()}.

See Also: