/* * Copyright 2008 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.core.ext; import java.io.File; import java.net.BindException; /** * Defines the service provider interface for launching servlet containers that * can be used by the GWT development mode. * <p> * Subclasses should be careful about calling any methods defined on this class * or else they risk failing when used with a version of GWT that did not have * those methods. */ public abstract class ServletContainerLauncher { /* * NOTE: Any new methods must have default implementations, and any users of * this class must be prepared to handle LinkageErrors when calling new * methods. */ /** * @return byte array containing an icon (fitting into 24x24) to * use for the server, or null if only the name should be used */ public byte[] getIconBytes() { return null; } /** * @return a path to a 24-pixel high image file (relative to the classpath) to * be used for this servlet container, or null if none. * @deprecated see {@link #getIconBytes} instead. */ @Deprecated public String getIconPath() { return null; } /** * @return a short human-readable name of this servlet container, or null * if no name should be displayed. */ public String getName() { return "Web Server"; } /** * Return true if this servlet container launcher is configured for secure * operation (ie, HTTPS). This value is only queried after arguments, if any, * have been processed. * * The default implementation just returns false. * * @return true if HTTPS is in use */ public boolean isSecure() { return false; } /** * Process any supplied arguments. * <p> * Will be called before {@link #start(TreeLogger, int, File)}, if at all. * * @param logger logger to use for warnings/errors * @param arguments single string containing the arguments for this SCL, the * format to be defined by the SCL * @return true if the arguments were processed successfully */ public boolean processArguments(TreeLogger logger, String arguments) { logger.log(TreeLogger.ERROR, getName() + " does not accept any arguments"); return false; } /** * Set the bind address for the web server socket. * <p> * Will be called before {@link #start(TreeLogger, int, File)}, if at all. * If not called, the SCL should listen on all addresses. * * @param bindAddress host name or IP address, suitable for use with * {@link java.net.InetAddress#getByName(String)} */ public void setBindAddress(String bindAddress) { /* * By default, we do nothing, which means that old SCL implementations * will bind to all addresses. */ } /** * Start an embedded HTTP servlet container. * * @param logger the server logger * @param port the TCP port to serve on; if 0 is requested, a port should be * automatically selected * @param appRootDir the base WAR directory * @return the launched servlet container * @throws BindException if the requested port is already in use * @throws Exception if the server fails to start for any other reason */ public abstract ServletContainer start(TreeLogger logger, int port, File appRootDir) throws BindException, Exception; }