Package com.twosigma.beaker.jvm.classloader

Examples of com.twosigma.beaker.jvm.classloader.DynamicClassLoader


    /*
     * This thread performs all the evaluation
     */
   
    public void run() {
      DynamicClassLoader loader = null;;
      jobDescriptor j = null;
      JavaSourceCompiler javaSourceCompiler;
 
      javaSourceCompiler = new JavaSourceCompilerImpl();
     
      while(!exit) {
        try {
          // wait for work
          syncObject.acquire();
         
          // check if we must create or update class loader
          if(loader==null || updateLoader) {
            loader=new DynamicClassLoader(outDir);
            for(String pt : classPath) {
              loader.add(pt);
            }
          }
         
          // get next job descriptor
          j = jobQueue.poll();
          if(j==null)
            continue;
 
          j.outputObject.started();
         
          Pattern p;
          Matcher m;
          String pname = packageId;
         
          JavaSourceCompiler.CompilationUnit compilationUnit = javaSourceCompiler.createCompilationUnit(new File(outDir));
       
          // build the compiler class path
          String classpath = System.getProperty("java.class.path");
          String[] classpathEntries = classpath.split(File.pathSeparator);
          if(classpathEntries!=null && classpathEntries.length>0)
            compilationUnit.addClassPathEntries(Arrays.asList(classpathEntries));
          if(!classPath.isEmpty())
            compilationUnit.addClassPathEntries(classPath);
          compilationUnit.addClassPathEntry(outDir);
       
          // normalize and analyze code
          String code = normalizeCode(j.codeToBeExecuted);
       
          String [] codev = code.split("\n");
          int ci = 0;
       
          StringBuilder javaSourceCode =  new StringBuilder();
          p = Pattern.compile("\\s*package\\s+((?:[a-zA-Z]\\w*)(?:\\.[a-zA-Z]\\w*)*);.*");
          m = p.matcher(codev[ci]);
       
          if(m.matches()) {
            pname = m.group(1);
            ci++;
          }
          javaSourceCode.append("package ");
          javaSourceCode.append(pname);
          javaSourceCode.append(";\n");
       
          for(String i : imports) {
            javaSourceCode.append("import ");
            javaSourceCode.append(i);
            javaSourceCode.append(";\n");
          }
       
          p = Pattern.compile("\\s*import\\s+((?:[a-zA-Z]\\w*)(?:\\.[a-zA-Z]\\w*)*(?:\\.\\*)?);.*");
          m = p.matcher(codev[ci]);
          while(m.matches()) {
            String impstr = m.group(1);
            ci++;
            m = p.matcher(codev[ci]);
       
            javaSourceCode.append("import ");
            javaSourceCode.append(impstr);
            javaSourceCode.append(";\n");
          }
       
          p = Pattern.compile("(?:^|.*\\s+)class\\s+([a-zA-Z]\\w*).*");
          m = p.matcher(codev[ci]);
          if(m.matches()) {
            // this is a class definition
       
            String cname = m.group(1);
       
            for(; ci<codev.length; ci++)
              javaSourceCode.append(codev[ci]);   
       
            compilationUnit.addJavaSource(pname+"."+cname, javaSourceCode.toString());
            try {
              javaSourceCompiler.compile(compilationUnit);
              javaSourceCompiler.persistCompiledClasses(compilationUnit);
              j.outputObject.finished(null);
            } catch(Exception e) { j.outputObject.error("ERROR:\n"+e.toString()); }   
          } else {
            String ret = "void";
            if(codev[codev.length-1].matches("(^|.*\\s+)return\\s+.*"))
              ret = "Object";
            // this is an expression evaluation
            javaSourceCode.append("public class Foo {\n");
            javaSourceCode.append("public static ");
            javaSourceCode.append(ret);
            javaSourceCode.append(" beakerRun() throws InterruptedException {\n");
            for(; ci<codev.length; ci++)
              javaSourceCode.append(codev[ci]);
            javaSourceCode.append("}\n");
            javaSourceCode.append("}\n");
       
            compilationUnit.addJavaSource(pname+".Foo", javaSourceCode.toString());
 
            loader.clearCache();
            javaSourceCompiler.compile(compilationUnit);
            javaSourceCompiler.persistCompiledClasses(compilationUnit);
            Class<?> fooClass = loader.loadClass(pname+".Foo");
            Method mth = fooClass.getDeclaredMethod("beakerRun", (Class[]) null);
            Object o = mth.invoke(null, (Object[])null);
            if(ret.equals("Object")) {
              j.outputObject.finished(o);
            } else {
View Full Code Here


        }
      }
      loader = null;
      ClassLoader cl;
      if(outDir!=null && !outDir.isEmpty()) {
        loader = new DynamicClassLoader(outDir);
        loader.addAll(Arrays.asList(urls));
        cl = loader.getLoader();
      } else
        cl = new URLClassLoader(urls);
      return cl;
View Full Code Here

TOP

Related Classes of com.twosigma.beaker.jvm.classloader.DynamicClassLoader

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.