Author: [EMAIL PROTECTED]
Date: Mon Nov 10 16:34:10 2008
New Revision: 4010

Modified:
    releases/1.6/dev/core/src/com/google/gwt/dev/GWTHosted.java
     
releases/1.6/dev/core/src/com/google/gwt/dev/shell/ServletContainerLauncher.java
     
releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java

Log:
Fixes port usage problems with GWTHosted's Jetty server.

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 Mon Nov 10  
16:34:10 2008
@@ -31,6 +31,7 @@
  import com.google.gwt.util.tools.ArgHandlerString;

  import java.io.PrintWriter;
+import java.net.BindException;
  import java.util.HashSet;
  import java.util.Set;

@@ -239,14 +240,18 @@
            moduleArray);
        server = launcher.start(serverLogger, getPort(), options.getOutDir(),
            servletFilter);
-    } catch (UnableToCompleteException e) {
+      assert (server != null);
+      return server.getPort();
+    } catch (BindException e) {
+      System.err.println("Port "
+          + getPort()
+          + " is already is use; you probably still have another session  
active");
+    } catch (Exception e) {
+      System.err.println("Unable to start embedded HTTP server");
+      e.printStackTrace();
+    } finally {
        PerfLogger.end();
-      return -1;
      }
-    assert (server != null);
-
-    PerfLogger.end();
-    return server.getPort();
+    return -1;
    }
-
  }

Modified:  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/ServletContainerLauncher.java
==============================================================================
---  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/ServletContainerLauncher.java
         
(original)
+++  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/ServletContainerLauncher.java
         
Mon Nov 10 16:34:10 2008
@@ -16,9 +16,9 @@
  package com.google.gwt.dev.shell;

  import com.google.gwt.core.ext.TreeLogger;
-import com.google.gwt.core.ext.UnableToCompleteException;

  import java.io.File;
+import java.net.BindException;

  import javax.servlet.Filter;

@@ -28,6 +28,18 @@
   */
  public interface ServletContainerLauncher {

-  ServletContainer start(TreeLogger topLogger, int port, File appRootDir,
-      Filter shellServletFilter) throws UnableToCompleteException;
+  /**
+   * Start an embedded HTTP server.
+   *
+   * @param logger the server logger
+   * @param port the TCP port to serve on
+   * @param appRootDir the base WAR directory
+   * @param filter a servlet filter that must be installed on the root  
path to
+   *          serve generated files
+   * @return the launch servlet contained
+   * @throws BindException if the requested port is already in use
+   * @throws Exception if the server fails to start for any other reason
+   */
+  ServletContainer start(TreeLogger logger, int port, File appRootDir,
+      Filter filter) throws BindException, Exception;
  }

Modified:  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java
==============================================================================
---  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java     
 
(original)
+++  
releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java     
 
Mon Nov 10 16:34:10 2008
@@ -191,7 +191,7 @@

    @SuppressWarnings("unchecked")
    public ServletContainer start(TreeLogger logger, int port, File  
appRootDir,
-      Filter shellServletFilter) throws UnableToCompleteException {
+      Filter shellServletFilter) throws Exception {
      checkStartParams(logger, port, appRootDir);

      // The dance we do with Jetty's logging system.
@@ -210,6 +210,9 @@
      SelectChannelConnector connector = new SelectChannelConnector();
      connector.setPort(port);
      connector.setHost("127.0.0.1");
+    // Don't steal ports from an existing proc.
+    connector.setReuseAddress(false);
+
      server.addConnector(connector);

      // Create a new web app in the war directory.
@@ -227,15 +230,10 @@

      server.setHandler(wac);
      server.setStopAtShutdown(true);
+    server.start();

-    try {
-      server.start();
-      int actualPort = connector.getLocalPort();
-      return new JettyServletContainer(logger, wac, actualPort,  
appRootDir);
-    } catch (Exception e) {
-      logger.log(TreeLogger.ERROR, "Unable to start embedded Jetty  
server", e);
-      throw new UnableToCompleteException();
-    }
+    return new JettyServletContainer(logger, wac, connector.getLocalPort(),
+        appRootDir);
    }

    private void checkStartParams(TreeLogger logger, int port, File  
appRootDir) {

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

Reply via email to