vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/Launcher.java
branchlauncher
changeset 370 ed48023d1d85
parent 368 6b96afdb4200
child 371 bafc670aa10d
     1.1 --- a/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/Launcher.java	Sat Dec 22 23:23:09 2012 +0100
     1.2 +++ b/vmtest/src/main/java/org/apidesign/bck2brwsr/vmtest/Launcher.java	Sun Dec 23 17:02:34 2012 +0100
     1.3 @@ -17,7 +17,10 @@
     1.4   */
     1.5  package org.apidesign.bck2brwsr.vmtest;
     1.6  
     1.7 +import java.io.IOException;
     1.8  import org.apidesign.bck2brwsr.launcher.Bck2BrwsrLauncher;
     1.9 +import org.apidesign.bck2brwsr.launcher.JSLauncher;
    1.10 +import org.apidesign.bck2brwsr.launcher.MethodInvocation;
    1.11  
    1.12  /**
    1.13   *
    1.14 @@ -25,7 +28,7 @@
    1.15   */
    1.16  final class Launcher {
    1.17      private final String sen;
    1.18 -    private Bck2BrwsrLauncher launcher;
    1.19 +    private Object launcher;
    1.20      
    1.21      Launcher() {
    1.22          this(null);
    1.23 @@ -34,27 +37,36 @@
    1.24          this.sen = sen;
    1.25      }
    1.26  
    1.27 -    synchronized Bck2BrwsrLauncher clear() {
    1.28 -        Bck2BrwsrLauncher l = launcher;
    1.29 +    synchronized Object clear() {
    1.30 +        Object l = launcher;
    1.31          launcher = null;
    1.32          return l;
    1.33      }
    1.34  
    1.35 -    synchronized Bck2BrwsrLauncher.MethodInvocation addMethod(Class<?> clazz, String name) {
    1.36 +    synchronized MethodInvocation addMethod(Class<?> clazz, String name) throws IOException {
    1.37          if (launcher == null) {
    1.38 -            launcher = new Bck2BrwsrLauncher();
    1.39 -            launcher.setTimeout(180000);
    1.40              if (sen != null) {
    1.41 -                launcher.setScriptEngineName(sen);
    1.42 +                JSLauncher js = new JSLauncher();
    1.43 +                js.addClassLoader(clazz.getClassLoader());
    1.44 +                js.initialize();
    1.45 +                launcher = js;
    1.46 +            } else {
    1.47 +                Bck2BrwsrLauncher l = new Bck2BrwsrLauncher();
    1.48 +                l.setTimeout(180000);
    1.49 +                launcher = l;
    1.50              }
    1.51          }
    1.52 -        return launcher.addMethod(clazz, name);
    1.53 +        if (launcher instanceof JSLauncher) {
    1.54 +            return ((JSLauncher)launcher).addMethod(clazz, name);
    1.55 +        } else {
    1.56 +            return ((Bck2BrwsrLauncher)launcher).addMethod(clazz, name);
    1.57 +        }
    1.58      }
    1.59  
    1.60      void exec() throws Exception {
    1.61 -        Bck2BrwsrLauncher l = clear();
    1.62 -        if (l != null) {
    1.63 -            l.execute();
    1.64 +        Object l = clear();
    1.65 +        if (l instanceof Bck2BrwsrLauncher) {
    1.66 +            ((Bck2BrwsrLauncher)l).execute();
    1.67          }
    1.68      }
    1.69