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
-~----------~----~----~----~------~----~------~--~---