Author: [EMAIL PROTECTED]
Date: Fri Nov  7 11:13:01 2008
New Revision: 3988

Modified:
    releases/1.6/dev/core/src/com/google/gwt/dev/GWTHosted.java
    releases/1.6/dev/core/src/com/google/gwt/dev/GWTShell.java

Log:
Adds GWTHosted -server selection, which allows the server to be specified  
on the command line.

Review by: bobv (TBR)


Modified: releases/1.6/dev/core/src/com/google/gwt/dev/GWTHosted.java
==============================================================================
--- releases/1.6/dev/core/src/com/google/gwt/dev/GWTHosted.java (original)
+++ releases/1.6/dev/core/src/com/google/gwt/dev/GWTHosted.java Fri Nov  7  
11:13:01 2008
@@ -23,6 +23,7 @@
  import com.google.gwt.dev.shell.ArtifactAcceptor;
  import com.google.gwt.dev.shell.GWTShellServletFilter;
  import com.google.gwt.dev.shell.ServletContainer;
+import com.google.gwt.dev.shell.ServletContainerLauncher;
  import com.google.gwt.dev.shell.jetty.JettyLauncher;
  import com.google.gwt.dev.util.PerfLogger;
  import com.google.gwt.dev.util.log.PrintWriterTreeLogger;
@@ -44,12 +45,6 @@
     */
    protected class ArgHandlerModulesExtra extends ArgHandlerExtra {

-    private final PrintWriterTreeLogger console = new  
PrintWriterTreeLogger(
-        new PrintWriter(System.err));
-    {
-      console.setMaxDetail(TreeLogger.WARN);
-    }
-
      @Override
      public boolean addExtraArg(String arg) {
        return addModule(console, arg);
@@ -65,6 +60,32 @@
        return new String[] {"module"};
      }
    }
+  /**
+   * Handles the -server command line flag.
+   */
+  protected class ArgHandlerServer extends ArgHandlerString {
+    @Override
+    public String getPurpose() {
+      return "Prevents the embedded Tomcat server from running, even if a  
port is specified";
+    }
+
+    @Override
+    public String getTag() {
+      return "-server";
+    }
+
+    @Override
+    public String[] getTagArgs() {
+      return new String[] {"serverLauncherClass"};
+    }
+
+    @Override
+    public boolean setString(String arg) {
+      // Supercedes -noserver.
+      setRunTomcat(true);
+      return setServer(console, arg);
+    }
+  }

    /**
     * Handles a startup url that can be passed on the command line.
@@ -107,14 +128,37 @@
      System.exit(0);
    }

+  protected final PrintWriterTreeLogger console = new  
PrintWriterTreeLogger(
+      new PrintWriter(System.err, true));
+
+  /**
+   * The servlet launcher to use (defaults to embedded Jetty).
+   */
+  private ServletContainerLauncher launcher = new JettyLauncher();
+
+  /**
+   * The set of modules this hosted mode instance can run.
+   */
    private Set<ModuleDef> modules = new HashSet<ModuleDef>();

+  /**
+   * The server that was started.
+   */
    private ServletContainer server;

+  /**
+   * Our servlet filter, embedded into the server, which autogenerates GWT
+   * modules when the selection script is requested.
+   */
    private GWTShellServletFilter servletFilter;

+  {
+    console.setMaxDetail(TreeLogger.WARN);
+  }
+
    public GWTHosted() {
      super(false, true);
+    registerHandler(new ArgHandlerServer());
      registerHandler(new ArgHandlerStartupURLs());
      registerHandler(new ArgHandlerModulesExtra());
    }
@@ -126,11 +170,33 @@
        modules.add(moduleDef);
        return true;
      } catch (UnableToCompleteException e) {
-      System.err.println("Unable to load module '" + moduleName + "'");
+      logger.log(TreeLogger.ERROR, "Unable to load module '" + moduleName  
+ "'");
        return false;
      }
    }

+  public boolean setServer(TreeLogger logger, String serverClassName) {
+    Throwable t;
+    try {
+      Class<?> clazz = Class.forName(serverClassName, true,
+          Thread.currentThread().getContextClassLoader());
+      Class<? extends ServletContainerLauncher> sclClass =  
clazz.asSubclass(ServletContainerLauncher.class);
+      launcher = sclClass.newInstance();
+      return true;
+    } catch (ClassCastException e) {
+      t = e;
+    } catch (ClassNotFoundException e) {
+      t = e;
+    } catch (InstantiationException e) {
+      t = e;
+    } catch (IllegalAccessException e) {
+      t = e;
+    }
+    logger.log(TreeLogger.ERROR, "Unable to load server class '"
+        + serverClassName + "'", t);
+    return false;
+  }
+
    @Override
    protected ArtifactAcceptor doCreateArtifactAcceptor(final ModuleDef  
module) {
      return new ArtifactAcceptor() {
@@ -155,8 +221,7 @@

    @Override
    protected int startUpServer() {
-    PerfLogger.start("GWTShell.startup (Jetty launch)");
-    JettyLauncher launcher = new JettyLauncher();
+    PerfLogger.start("GWTHosted.startUpServer");
      try {
        TreeLogger serverLogger = getTopLogger().branch(TreeLogger.INFO,
            "Starting HTTP on port " + getPort(), null);

Modified: releases/1.6/dev/core/src/com/google/gwt/dev/GWTShell.java
==============================================================================
--- releases/1.6/dev/core/src/com/google/gwt/dev/GWTShell.java  (original)
+++ releases/1.6/dev/core/src/com/google/gwt/dev/GWTShell.java  Fri Nov  7  
11:13:01 2008
@@ -103,7 +103,7 @@
    }

    /**
-   * handles the -noserver command line flag.
+   * Handles the -noserver command line flag.
     */
    protected class ArgHandlerNoServerFlag extends ArgHandlerFlag {
      @Override

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to