InMemoryJavaCompiler icon indicating copy to clipboard operation
InMemoryJavaCompiler copied to clipboard

Run compiled class in separate Java process

Open lfuelling opened this issue 8 years ago • 1 comments

Hi @trung,

I'm using your library to compile code that's coming from a web interface. After compilation I'm running the compiled class to evaluate the output.

If a user inputs something like System.exit(0);, the server will crash. I tried to prevent this by running the compiled class in a separate process like this:

public static int exec(Class clazz) throws IOException,
            InterruptedException {
        String javaHome = System.getProperty("java.home");
        String javaBin = javaHome +
                File.separator + "bin" +
                File.separator + "java";
        String classpath = System.getProperty("java.class.path");
        String className = clazz.getCanonicalName();

        ProcessBuilder builder = new ProcessBuilder(
                javaBin, "-cp", classpath, className);

        Process process = builder.start();
        process.waitFor();
        return process.exitValue();
    }

The problem with this is that I'm getting a "Class not found" error everytime I try to run the compiled class like this.

Is it possible to run the compiled class in a separate process using another way?

lfuelling avatar Feb 24 '16 10:02 lfuelling

I think it's due to the your application class loader can't find the class which was dynamically compiled.

I need to try this myself but my thinking is that there should be additional step in your application to load the dynamic compiled class in the application class loader.

trung avatar Sep 24 '17 03:09 trung