Merge branch 'master' of ssh://git.eclipse.org/gitroot/jetty/org.eclipse.jetty.project

This commit is contained in:
Greg Wilkins 2014-10-30 18:06:37 +11:00
commit 154daa524a
6 changed files with 166 additions and 135 deletions

View File

@ -42,6 +42,7 @@ import org.codehaus.plexus.util.FileUtils;
import org.eclipse.jetty.security.LoginService;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.RequestLog;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ShutdownMonitor;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
@ -61,11 +62,7 @@ import org.eclipse.jetty.xml.XmlConfiguration;
*/
public abstract class AbstractJettyMojo extends AbstractMojo
{
/**
*
*/
public String PORT_SYSPROPERTY = "jetty.port";
/**
* Whether or not to include dependencies on the plugin's classpath with <scope>provided</scope>
@ -277,8 +274,9 @@ public abstract class AbstractJettyMojo extends AbstractMojo
/**
* A wrapper for the Server object
* @parameter
*/
protected JettyServer server = new JettyServer();
protected Server server;
/**
@ -304,6 +302,10 @@ public abstract class AbstractJettyMojo extends AbstractMojo
*/
protected Thread consoleScanner;
protected ServerSupport serverSupport;
/**
* <p>
@ -451,11 +453,13 @@ public abstract class AbstractJettyMojo extends AbstractMojo
* @throws Exception
*/
public void applyJettyXml() throws Exception
{
if (getJettyXmlFiles() == null)
return;
this.server.applyXmlConfigurations(getJettyXmlFiles());
{
Server tmp = ServerSupport.applyXmlConfigurations(server, getJettyXmlFiles());
if (server == null)
server = tmp;
if (server == null)
server = new Server();
}
@ -469,6 +473,9 @@ public abstract class AbstractJettyMojo extends AbstractMojo
try
{
getLog().debug("Starting Jetty Server ...");
//make sure Jetty does not use URLConnection caches with the plugin
Resource.setDefaultUseCaches(false);
configureMonitor();
@ -477,7 +484,7 @@ public abstract class AbstractJettyMojo extends AbstractMojo
//apply any config from a jetty.xml file first which is able to
//be overwritten by config in the pom.xml
applyJettyXml ();
// if a <httpConnector> was specified in the pom, use it
if (httpConnector != null)
{
@ -485,46 +492,21 @@ public abstract class AbstractJettyMojo extends AbstractMojo
if (httpConnector.getPort() <= 0)
{
//use any jetty.port settings provided
String tmp = System.getProperty(PORT_SYSPROPERTY, MavenServerConnector.DEFAULT_PORT_STR);
String tmp = System.getProperty(MavenServerConnector.PORT_SYSPROPERTY, MavenServerConnector.DEFAULT_PORT_STR);
httpConnector.setPort(Integer.parseInt(tmp.trim()));
}
if (httpConnector.getServer() == null)
httpConnector.setServer(this.server);
this.server.addConnector(httpConnector);
httpConnector.setServer(server);
}
// if the user hasn't configured the connectors in a jetty.xml file so use a default one
Connector[] connectors = this.server.getConnectors();
if (connectors == null|| connectors.length == 0)
{
//if <httpConnector> not configured in the pom, create one
if (httpConnector == null)
{
httpConnector = new MavenServerConnector();
//use any jetty.port settings provided
String tmp = System.getProperty(PORT_SYSPROPERTY, MavenServerConnector.DEFAULT_PORT_STR);
httpConnector.setPort(Integer.parseInt(tmp.trim()));
}
if (httpConnector.getServer() == null)
httpConnector.setServer(this.server);
this.server.setConnectors(new Connector[] {httpConnector});
}
ServerSupport.configureConnectors(server, httpConnector);
//set up a RequestLog if one is provided
if (this.requestLog != null)
this.server.setRequestLog(this.requestLog);
//set up the webapp and any context provided
this.server.configureHandlers();
//set up a RequestLog if one is provided and the handle structure
ServerSupport.configureHandlers(server, this.requestLog);
configureWebApplication();
this.server.addWebApplication(webApp);
ServerSupport.addWebApplication(server, webApp);
// set up security realms
for (int i = 0; (this.loginServices != null) && i < this.loginServices.length; i++)
{
getLog().debug(this.loginServices[i].getClass().getName() + ": "+ this.loginServices[i].toString());
this.server.addBean(this.loginServices[i]);
}
ServerSupport.configureLoginServices(server, loginServices);
//do any other configuration required by the
//particular Jetty version
@ -534,7 +516,6 @@ public abstract class AbstractJettyMojo extends AbstractMojo
this.server.start();
getLog().info("Started Jetty Server");
if ( dumpOnStart )
{
@ -580,6 +561,10 @@ public abstract class AbstractJettyMojo extends AbstractMojo
}
/**
* Subclasses should invoke this to setup basic info
* on the webapp

View File

@ -94,9 +94,8 @@ public class JettyEffectiveWebXml extends JettyRunMojo
//apply any config from a jetty.xml file first to our "fake" server instance
//TODO probably not necessary
applyJettyXml ();
server.configureHandlers();
ServerSupport.configureHandlers(server, null);
//ensure config of the webapp based on settings in plugin
configureWebApplication();
@ -114,7 +113,7 @@ public class JettyEffectiveWebXml extends JettyRunMojo
webApp.setQuickStartWebDescriptor(descriptor);
server.addWebApplication(webApp);
ServerSupport.addWebApplication(server, webApp);
//if our server has a thread pool associated we can do any annotation scanning multithreaded,
//otherwise scanning will be single threaded

View File

@ -46,6 +46,7 @@ import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.eclipse.jetty.annotations.AnnotationConfiguration;
import org.eclipse.jetty.quickstart.QuickStartDescriptorGenerator;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.IO;
import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.util.resource.ResourceCollection;
@ -257,9 +258,11 @@ public class JettyRunForkedMojo extends JettyRunMojo
printSystemProperties();
//do NOT apply the jettyXml configuration - as the jvmArgs may be needed for it to work
if (server == null)
server = new Server();
//ensure handler structure enabled
server.configureHandlers();
ServerSupport.configureHandlers(server, null);
//ensure config of the webapp based on settings in plugin
configureWebApplication();
@ -280,7 +283,7 @@ public class JettyRunForkedMojo extends JettyRunMojo
webApp.setQuickStartWebDescriptor(Resource.newResource(forkWebXml));
//add webapp to our fake server instance
server.addWebApplication(webApp);
ServerSupport.addWebApplication(server, webApp);
//if our server has a thread pool associated we can do annotation scanning multithreaded,
//otherwise scanning will be single threaded

View File

@ -47,6 +47,8 @@ import org.eclipse.jetty.util.thread.Scheduler;
*/
public class MavenServerConnector extends AbstractLifeCycle implements Connector
{
public static String PORT_SYSPROPERTY = "jetty.port";
public static final int DEFAULT_PORT = 8080;
public static final String DEFAULT_PORT_STR = String.valueOf(DEFAULT_PORT);
public static final int DEFAULT_MAX_IDLE_TIME = 30000;

View File

@ -16,17 +16,20 @@
// ========================================================================
//
package org.eclipse.jetty.maven.plugin;
import java.io.File;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jetty.security.LoginService;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.RequestLog;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
@ -35,54 +38,16 @@ import org.eclipse.jetty.util.resource.Resource;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.xml.XmlConfiguration;
/**
* JettyServer
*
* Maven jetty plugin version of a wrapper for the Server class.
* ServerSupport
*
* Helps configure the Server instance.
*
*/
public class JettyServer extends org.eclipse.jetty.server.Server
{
private RequestLog requestLog;
private ContextHandlerCollection contexts;
/**
*
*/
public JettyServer()
{
super();
//make sure Jetty does not use URLConnection caches with the plugin
Resource.setDefaultUseCaches(false);
}
public class ServerSupport
{
public void setRequestLog (RequestLog requestLog)
{
this.requestLog = requestLog;
}
/**
* @see org.eclipse.jetty.server.Server#doStart()
*/
public void doStart() throws Exception
{
super.doStart();
}
/**
* @see org.eclipse.jetty.server.handler.HandlerCollection#addHandler(org.eclipse.jetty.server.Handler)
*/
public void addWebApplication(WebAppContext webapp) throws Exception
{
contexts.addHandler (webapp);
}
/**
* Set up the handler structure to receive a webapp.
* Also put in a DefaultHandler so we get a nice page
@ -90,22 +55,25 @@ public class JettyServer extends org.eclipse.jetty.server.Server
* context isn't at root.
* @throws Exception
*/
public void configureHandlers () throws Exception
public static void configureHandlers (Server server, RequestLog requestLog) throws Exception
{
if (server == null)
throw new IllegalArgumentException ("Server is null");
DefaultHandler defaultHandler = new DefaultHandler();
RequestLogHandler requestLogHandler = new RequestLogHandler();
if (this.requestLog != null)
requestLogHandler.setRequestLog(this.requestLog);
contexts = (ContextHandlerCollection)super.getChildHandlerByClass(ContextHandlerCollection.class);
if (contexts==null)
if (requestLog != null)
requestLogHandler.setRequestLog(requestLog);
ContextHandlerCollection contexts = findContextHandlerCollection(server);
if (contexts == null)
{
contexts = new ContextHandlerCollection();
HandlerCollection handlers = (HandlerCollection)super.getChildHandlerByClass(HandlerCollection.class);
if (handlers==null)
HandlerCollection handlers = (HandlerCollection)server.getChildHandlerByClass(HandlerCollection.class);
if (handlers == null)
{
handlers = new HandlerCollection();
super.setHandler(handlers);
server.setHandler(handlers);
handlers.setHandlers(new Handler[]{contexts, defaultHandler, requestLogHandler});
}
else
@ -114,6 +82,87 @@ public class JettyServer extends org.eclipse.jetty.server.Server
}
}
}
/**
* Configure at least one connector for the server
*
* @param server
* @param connector
*/
public static void configureConnectors (Server server, Connector connector)
{
if (server == null)
throw new IllegalArgumentException("Server is null");
//if a connector is provided, use it
if (connector != null)
{
server.addConnector(connector);
return;
}
// if the user hasn't configured the connectors in a jetty.xml file so use a default one
Connector[] connectors = server.getConnectors();
if (connectors == null || connectors.length == 0)
{
//Make a new default connector
MavenServerConnector tmp = new MavenServerConnector();
//use any jetty.port settings provided
String port = System.getProperty(MavenServerConnector.PORT_SYSPROPERTY, MavenServerConnector.DEFAULT_PORT_STR);
tmp.setPort(Integer.parseInt(port.trim()));
tmp.setServer(server);
server.setConnectors(new Connector[] {tmp});
}
}
/**
* Set up any security LoginServices provided.
*
* @param server
* @param loginServices
*/
public static void configureLoginServices (Server server, LoginService[] loginServices)
{
if (server == null)
throw new IllegalArgumentException ("Server is null");
if (loginServices != null)
{
for (LoginService loginService:loginServices)
{
PluginLog.getLog().debug(loginService.getClass().getName() + ": "+ loginService.toString());
server.addBean(loginService);
}
}
}
/**
* @see org.eclipse.jetty.server.handler.HandlerCollection#addHandler(org.eclipse.jetty.server.Handler)
*/
public static void addWebApplication(Server server, WebAppContext webapp) throws Exception
{
if (server == null)
throw new IllegalArgumentException ("Server is null");
ContextHandlerCollection contexts = findContextHandlerCollection(server);
if (contexts == null)
throw new IllegalStateException("ContextHandlerCollection is null");
contexts.addHandler (webapp);
}
public static ContextHandlerCollection findContextHandlerCollection (Server server)
{
if (server == null)
return null;
return (ContextHandlerCollection)server.getChildHandlerByClass(ContextHandlerCollection.class);
}
/**
* Apply xml files to server startup, passing in ourselves as the
@ -122,13 +171,17 @@ public class JettyServer extends org.eclipse.jetty.server.Server
* @param files
* @throws Exception
*/
public void applyXmlConfigurations (List<File> files)
public static Server applyXmlConfigurations (Server server, List<File> files)
throws Exception
{
if (files == null || files.isEmpty())
return;
return server;
Map<String,Object> lastMap = Collections.singletonMap("Server", (Object)this);
Map<String,Object> lastMap = new HashMap<String,Object>();
if (server != null)
lastMap.put("Server", server);
for ( File xmlFile : files )
{
@ -152,5 +205,8 @@ public class JettyServer extends org.eclipse.jetty.server.Server
xmlConfiguration.configure();
lastMap = xmlConfiguration.getIdMap();
}
return (Server)lastMap.get("Server");
}
}

View File

@ -33,6 +33,7 @@ import java.util.TreeMap;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ShutdownMonitor;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.util.log.Log;
@ -57,7 +58,7 @@ public class Starter
private List<File> jettyXmls; // list of jetty.xml config files to apply - Mandatory
private File contextXml; //name of context xml file to configure the webapp - Mandatory
private JettyServer server = new JettyServer();
private Server server;
private JettyWebAppContext webApp;
@ -121,34 +122,16 @@ public class Starter
public void configureJetty () throws Exception
{
LOG.debug("Starting Jetty Server ...");
Resource.setDefaultUseCaches(false);
//apply any configs from jetty.xml files first
applyJettyXml ();
// if the user hasn't configured a connector in the jetty.xml
//then use a default
Connector[] connectors = this.server.getConnectors();
if (connectors == null|| connectors.length == 0)
{
//if a SystemProperty -Djetty.port=<portnum> has been supplied, use that as the default port
MavenServerConnector httpConnector = new MavenServerConnector();
httpConnector.setServer(this.server);
String tmp = System.getProperty(PORT_SYSPROPERTY, MavenServerConnector.DEFAULT_PORT_STR);
httpConnector.setPort(Integer.parseInt(tmp.trim()));
connectors = new Connector[] {httpConnector};
this.server.setConnectors(connectors);
}
//check that everything got configured, and if not, make the handlers
HandlerCollection handlers = (HandlerCollection) server.getChildHandlerByClass(HandlerCollection.class);
if (handlers == null)
{
handlers = new HandlerCollection();
server.setHandler(handlers);
}
//ensure there's a connector
ServerSupport.configureConnectors(server, null);
//check if contexts already configured, create if not
this.server.configureHandlers();
ServerSupport.configureHandlers(server, null);
webApp = new JettyWebAppContext();
@ -176,7 +159,7 @@ public class Starter
xmlConfiguration.configure(webApp);
}
this.server.addWebApplication(webApp);
ServerSupport.addWebApplication(server, webApp);
if(stopPort>0 && stopKey!=null)
{
@ -431,9 +414,12 @@ public class Starter
*/
public void applyJettyXml() throws Exception
{
if (jettyXmls == null)
return;
this.server.applyXmlConfigurations(jettyXmls);
Server tmp = ServerSupport.applyXmlConfigurations(server, jettyXmls);
if (server == null)
server = tmp;
if (server == null)
server = new Server();
}