blob: cd4777116262174560db9e0e850376a260e6e8ff [file] [log] [blame]
/*
* 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;
}