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