| // |
| // ======================================================================== |
| // Copyright (c) 1995-2012 Sabre Holdings. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| package org.eclipse.jetty.ant; |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.apache.tools.ant.BuildException; |
| import org.apache.tools.ant.Task; |
| import org.apache.tools.ant.taskdefs.Property; |
| import org.eclipse.jetty.ant.types.Connector; |
| import org.eclipse.jetty.ant.types.Connectors; |
| import org.eclipse.jetty.ant.types.ContextHandlers; |
| import org.eclipse.jetty.ant.types.LoginServices; |
| import org.eclipse.jetty.ant.types.SystemProperties; |
| import org.eclipse.jetty.ant.utils.TaskLog; |
| import org.eclipse.jetty.security.LoginService; |
| import org.eclipse.jetty.server.RequestLog; |
| import org.eclipse.jetty.webapp.WebAppContext; |
| |
| /** |
| * Ant task for running a Jetty server. |
| */ |
| public class JettyRunTask extends Task |
| { |
| private int scanIntervalSeconds; |
| |
| /** Temporary files directory. */ |
| private File tempDirectory; |
| |
| /** List of web applications to be deployed. */ |
| private List<AntWebAppContext> webapps = new ArrayList<AntWebAppContext>(); |
| |
| /** Location of jetty.xml file. */ |
| private File jettyXml; |
| |
| /** List of server connectors. */ |
| private Connectors connectors = null; |
| |
| /** Server request logger object. */ |
| private RequestLog requestLog; |
| |
| /** List of login services. */ |
| private LoginServices loginServices; |
| |
| /** List of system properties to be set. */ |
| private SystemProperties systemProperties; |
| |
| /** List of other contexts to deploy */ |
| private ContextHandlers contextHandlers; |
| |
| |
| /** Port Jetty will use for the default connector */ |
| private int jettyPort = 8080; |
| |
| private int stopPort; |
| |
| private String stopKey; |
| |
| private boolean daemon; |
| |
| public JettyRunTask() |
| { |
| TaskLog.setTask(this); |
| } |
| |
| /** |
| * Creates a new <code>WebApp</code> Ant object. |
| * @param webapp the webapp context |
| */ |
| public void addWebApp(AntWebAppContext webapp) |
| { |
| webapps.add(webapp); |
| } |
| |
| /** |
| * Adds a new Ant's connector tag object if it have not been created yet. |
| * @param connectors the connectors |
| */ |
| public void addConnectors(Connectors connectors) |
| { |
| if (this.connectors != null) |
| throw new BuildException("Only one <connectors> tag is allowed!"); |
| this.connectors = connectors; |
| } |
| |
| public void addLoginServices(LoginServices services) |
| { |
| if (this.loginServices != null ) |
| throw new BuildException("Only one <loginServices> tag is allowed!"); |
| this.loginServices = services; |
| } |
| |
| public void addSystemProperties(SystemProperties systemProperties) |
| { |
| if (this.systemProperties != null) |
| throw new BuildException("Only one <systemProperties> tag is allowed!"); |
| this.systemProperties = systemProperties; |
| } |
| |
| public void addContextHandlers (ContextHandlers handlers) |
| { |
| if (this.contextHandlers != null) |
| throw new BuildException("Only one <contextHandlers> tag is allowed!"); |
| this.contextHandlers = handlers; |
| } |
| |
| public File getTempDirectory() |
| { |
| return tempDirectory; |
| } |
| |
| public void setTempDirectory(File tempDirectory) |
| { |
| this.tempDirectory = tempDirectory; |
| } |
| |
| public File getJettyXml() |
| { |
| return jettyXml; |
| } |
| |
| public void setJettyXml(File jettyXml) |
| { |
| this.jettyXml = jettyXml; |
| } |
| |
| public void setRequestLog(String className) |
| { |
| try |
| { |
| this.requestLog = (RequestLog) Class.forName(className).newInstance(); |
| } |
| catch (InstantiationException e) |
| { |
| throw new BuildException("Request logger instantiation exception: " + e); |
| } |
| catch (IllegalAccessException e) |
| { |
| throw new BuildException("Request logger instantiation exception: " + e); |
| } |
| catch (ClassNotFoundException e) |
| { |
| throw new BuildException("Unknown request logger class: " + className); |
| } |
| } |
| |
| public String getRequestLog() |
| { |
| if (requestLog != null) |
| { |
| return requestLog.getClass().getName(); |
| } |
| |
| return ""; |
| } |
| |
| /** |
| * Sets the port Jetty uses for the default connector. |
| * |
| * @param jettyPort The port Jetty will use for the default connector |
| */ |
| public void setJettyPort(final int jettyPort) |
| { |
| this.jettyPort = jettyPort; |
| } |
| |
| /** |
| * Executes this Ant task. The build flow is being stopped until Jetty |
| * server stops. |
| * |
| * @throws BuildException if unable to build |
| */ |
| public void execute() throws BuildException |
| { |
| |
| TaskLog.log("Configuring Jetty for project: " + getProject().getName()); |
| |
| setSystemProperties(); |
| |
| List<Connector> connectorsList = null; |
| |
| if (connectors != null) |
| connectorsList = connectors.getConnectors(); |
| else |
| connectorsList = new Connectors(jettyPort,30000).getDefaultConnectors(); |
| |
| List<LoginService> loginServicesList = (loginServices != null?loginServices.getLoginServices():new ArrayList<LoginService>()); |
| ServerProxyImpl server = new ServerProxyImpl(); |
| server.setConnectors(connectorsList); |
| server.setLoginServices(loginServicesList); |
| server.setRequestLog(requestLog); |
| server.setJettyXml(jettyXml); |
| server.setDaemon(daemon); |
| server.setStopPort(stopPort); |
| server.setStopKey(stopKey); |
| server.setContextHandlers(contextHandlers); |
| server.setTempDirectory(tempDirectory); |
| server.setScanIntervalSecs(scanIntervalSeconds); |
| |
| try |
| { |
| for (WebAppContext webapp: webapps) |
| { |
| server.addWebApplication((AntWebAppContext)webapp); |
| } |
| } |
| catch (Exception e) |
| { |
| throw new BuildException(e); |
| } |
| |
| server.start(); |
| } |
| |
| public int getStopPort() |
| { |
| return stopPort; |
| } |
| |
| public void setStopPort(int stopPort) |
| { |
| this.stopPort = stopPort; |
| TaskLog.log("stopPort="+stopPort); |
| } |
| |
| public String getStopKey() |
| { |
| return stopKey; |
| } |
| |
| public void setStopKey(String stopKey) |
| { |
| this.stopKey = stopKey; |
| TaskLog.log("stopKey="+stopKey); |
| } |
| |
| /** |
| * @return the daemon |
| */ |
| public boolean isDaemon() |
| { |
| return daemon; |
| } |
| |
| /** |
| * @param daemon the daemon to set |
| */ |
| public void setDaemon(boolean daemon) |
| { |
| this.daemon = daemon; |
| TaskLog.log("Daemon="+daemon); |
| } |
| |
| public int getScanIntervalSeconds() |
| { |
| return scanIntervalSeconds; |
| } |
| |
| public void setScanIntervalSeconds(int secs) |
| { |
| scanIntervalSeconds = secs; |
| TaskLog.log("scanIntervalSecs="+secs); |
| } |
| |
| /** |
| * Sets the system properties. |
| */ |
| private void setSystemProperties() |
| { |
| if (systemProperties != null) |
| { |
| Iterator propertiesIterator = systemProperties.getSystemProperties().iterator(); |
| while (propertiesIterator.hasNext()) |
| { |
| Property property = ((Property) propertiesIterator.next()); |
| SystemProperties.setIfNotSetAlready(property); |
| } |
| } |
| } |
| |
| } |