You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ol...@apache.org on 2011/09/12 10:33:42 UTC
svn commit: r1169647 -
/tomcat/maven-plugin/trunk/tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/AbstractRunMojo.java
Author: olamy
Date: Mon Sep 12 08:33:41 2011
New Revision: 1169647
URL: http://svn.apache.org/viewvc?rev=1169647&view=rev
Log:
[MTOMCAT-87] Make http protocol configurable for the embedded Tomcat
Submitted by Adrien C
Modified:
tomcat/maven-plugin/trunk/tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/AbstractRunMojo.java
Modified: tomcat/maven-plugin/trunk/tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/AbstractRunMojo.java
URL: http://svn.apache.org/viewvc/tomcat/maven-plugin/trunk/tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/AbstractRunMojo.java?rev=1169647&r1=1169646&r2=1169647&view=diff
==============================================================================
--- tomcat/maven-plugin/trunk/tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/AbstractRunMojo.java (original)
+++ tomcat/maven-plugin/trunk/tomcat-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/AbstractRunMojo.java Mon Sep 12 08:33:41 2011
@@ -20,19 +20,6 @@ package org.apache.tomcat.maven.plugin;
*/
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
@@ -56,7 +43,6 @@ import org.codehaus.plexus.classworlds.r
import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
import org.codehaus.plexus.util.DirectoryScanner;
import org.codehaus.plexus.util.FileUtils;
-
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -65,10 +51,22 @@ import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Abstract goal that provides common configuration for embedded Tomcat goals.
- *
+ *
* @author Jurgen Lust
* @author Mark Hobson <ma...@gmail.com>
* @version $Id: AbstractRunMojo.java 14033 2011-05-04 17:51:15Z bimargulies $
@@ -82,7 +80,7 @@ public abstract class AbstractRunMojo
/**
* The packaging of the Maven project that this goal operates upon.
- *
+ *
* @parameter expression = "${project.packaging}"
* @required
* @readonly
@@ -91,55 +89,59 @@ public abstract class AbstractRunMojo
/**
* The directory to create the Tomcat server configuration under.
- *
+ *
* @parameter expression="${project.build.directory}/tomcat"
*/
private File configurationDir;
/**
* The port to run the Tomcat server on.
- *
+ *
* @parameter expression="${maven.tomcat.port}" default-value="8080"
*/
private int port;
-
+
/**
* The AJP port to run the Tomcat server on.
- * By default it's 0 this means won't be started.
- * The ajp connector will be started only for value > 0.
- * @since 1.2
+ * By default it's 0 this means won't be started.
+ * The ajp connector will be started only for value > 0.
+ *
* @parameter expression="${maven.tomcat.ajp.port}" default-value="0"
+ * @since 1.2
*/
private int ajpPort;
-
+
/**
* The AJP protocol to run the Tomcat server on.
- * By default it's ajp.
- * NOTE The ajp connector will be started only if {@link #ajpPort} > 0.
- * @since 1.2
+ * By default it's ajp.
+ * NOTE The ajp connector will be started only if {@link #ajpPort} > 0.
+ *
* @parameter expression="${maven.tomcat.ajp.protocol}" default-value="ajp"
- */
+ * @since 1.2
+ */
private String ajpProtocol;
-
+
/**
* The https port to run the Tomcat server on.
- * By default it's 0 this means won't be started.
- * The https connector will be started only for value > 0.
- * @since 1.0
+ * By default it's 0 this means won't be started.
+ * The https connector will be started only for value > 0.
+ *
* @parameter expression="${maven.tomcat.httpsPort}" default-value="0"
+ * @since 1.0
*/
private int httpsPort;
/**
* The character encoding to use for decoding URIs.
- * @since 1.0
+ *
* @parameter expression="${maven.tomcat.uriEncoding}" default-value="ISO-8859-1"
+ * @since 1.0
*/
private String uriEncoding;
/**
* List of System properties to pass to the Tomcat Server.
- *
+ *
* @parameter
* @since 1.0-alpha-2
*/
@@ -147,7 +149,7 @@ public abstract class AbstractRunMojo
/**
* The directory contains additional configuration Files that copied in the Tomcat conf Directory.
- *
+ *
* @parameter expression = "${maven.tomcat.additionalConfigFilesDir}" default-value="${basedir}/src/main/tomcatconf"
* @since 1.0-alpha-2
*/
@@ -155,7 +157,7 @@ public abstract class AbstractRunMojo
/**
* server.xml to use <b>Note if you use this you must configure in this file your webapp paths</b>.
- *
+ *
* @parameter expression="${maven.tomcat.serverXml}"
* @since 1.0-alpha-2
*/
@@ -163,21 +165,21 @@ public abstract class AbstractRunMojo
/**
* overriding the providing web.xml to run tomcat
- *
+ *
* @parameter expression="${maven.tomcat.webXml}"
* @since 1.0-alpha-2
*/
private File tomcatWebXml;
-
+
/**
- * Set this to true to allow Maven to continue to execute after invoking
+ * Set this to true to allow Maven to continue to execute after invoking
* the run goal.
- *
+ *
* @parameter expression="${maven.tomcat.fork}" default-value="false"
* @since 1.0
*/
private boolean fork;
-
+
/**
* Will create a tomcat context for each dependencies of war type with 'scope' set to 'tomcat'.
* In other words, dependencies with:
@@ -186,61 +188,67 @@ public abstract class AbstractRunMojo
* <scope>tomcat</scope>
* </pre>
* To preserve backward compatibility it's false by default.
+ *
* @parameter expression="${maven.tomcat.addContextWarDependencies}" default-value="false"
* @since 1.0
*/
private boolean addContextWarDependencies;
-
+
/**
* The maven project.
*
* @parameter expression="${project}"
- * @since 1.0
* @required
* @readonly
+ * @since 1.0
*/
protected MavenProject project;
/**
* The archive manager.
- * @since 1.0
+ *
* @component
+ * @since 1.0
*/
private ArchiverManager archiverManager;
-
+
/**
* if <code>true</code> a new classLoader separated from maven core will be created to start tomcat.
+ *
* @parameter expression="${tomcat.useSeparateTomcatClassLoader}" default-value="false"
* @since 1.0
*/
protected boolean useSeparateTomcatClassLoader;
-
+
/**
* @parameter expression="${plugin.artifacts}"
* @required
* @since 1.0
*/
- @SuppressWarnings("rawtypes")
+ @SuppressWarnings( "rawtypes" )
private List pluginArtifacts;
-
+
/**
* If set to true ignore if packaging of project is not 'war'.
- * @since 1.0
+ *
* @parameter expression="${tomcat.ignorePackaging}" default-value="false"
+ * @since 1.0
*/
private boolean ignorePackaging;
/**
* Override the default keystoreFile for the HTTPS connector (if enabled)
- * @since 1.1
+ *
* @parameter
+ * @since 1.1
*/
private String keystoreFile;
/**
* Override the default keystorePass for the HTTPS connector (if enabled)
- * @since 1.1
+ *
* @parameter
+ * @since 1.1
*/
private String keystorePass;
@@ -258,30 +266,41 @@ public abstract class AbstractRunMojo
* <strong>Note:</strong> This setting is ignored if you provide a <code>server.xml</code> for your
* Tomcat. Instead please configure naming in the <code>server.xml</code>.
* </p>
+ *
+ * @parameter expression="${maven.tomcat.useNaming}" default-value="false"
+ * @todo adopt documentation once Tomcat 7 is supported (MTOMCAT-62)
* @see <a href="http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/startup/Embedded.html">org.apache.catalina.startup.Embedded</a>
* @see <a href="http://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/startup/Tomcat.html">org.apache.catalina.startup.Tomcat</a>
- * @parameter expression="${maven.tomcat.useNaming}" default-value="false"
* @since 1.2
- * @todo adopt documentation once Tomcat 7 is supported (MTOMCAT-62)
*/
private boolean useNaming;
-
+
/**
* Force context scanning if you don't use a context file with reloadable = "true".
* The other way to use contextReloadable is to add attribute reloadable = "true"
* in your context file.
+ *
* @parameter expression="${maven.tomcat.contextReloadable}" default-value="false"
* @since 1.2
*/
protected boolean contextReloadable;
-
+
/**
* The path of the Tomcat context XML file.
- *
+ *
* @parameter expression = "src/main/webapp/META-INF/context.xml"
*/
- protected File contextFile;
+ protected File contextFile;
+
+ /**
+ * The protocol to run the Tomcat server on.
+ * By default it's HTTP/1.1.
+ *
+ * @parameter expression="${maven.tomcat.protocol}" default-value="HTTP/1.1"
+ * @since 1.2
+ */
+ private String protocol;
// ----------------------------------------------------------------------
// Fields
@@ -291,7 +310,7 @@ public abstract class AbstractRunMojo
* @since 1.0
*/
private ClassRealm tomcatRealm;
-
+
// ----------------------------------------------------------------------
// Mojo Implementation
// ----------------------------------------------------------------------
@@ -331,9 +350,10 @@ public abstract class AbstractRunMojo
catch ( IOException exception )
{
throw new MojoExecutionException( getMessage( "AbstractRunMojo.cannotCreateConfiguration" ), exception );
- } finally
+ }
+ finally
{
- if (useSeparateTomcatClassLoader)
+ if ( useSeparateTomcatClassLoader )
{
Thread.currentThread().setContextClassLoader( originalClassLoaser );
}
@@ -346,7 +366,7 @@ public abstract class AbstractRunMojo
/**
* Gets the webapp context path to use for the web application being run.
- *
+ *
* @return the webapp context path
*/
protected String getPath()
@@ -356,18 +376,18 @@ public abstract class AbstractRunMojo
/**
* Gets the context to run this web application under for the specified embedded Tomcat.
- *
+ *
* @param container the embedded Tomcat container being used
* @return the context to run this web application under
- * @throws IOException if the context could not be created
+ * @throws IOException if the context could not be created
* @throws MojoExecutionException in case of an error creating the context
*/
protected Context createContext( Embedded container )
throws IOException, MojoExecutionException
{
String contextPath = getPath();
- Context context = container.createContext( "/".equals( contextPath ) ? "" : contextPath, getDocBase()
- .getAbsolutePath() );
+ Context context =
+ container.createContext( "/".equals( contextPath ) ? "" : contextPath, getDocBase().getAbsolutePath() );
if ( useSeparateTomcatClassLoader )
{
@@ -376,7 +396,7 @@ public abstract class AbstractRunMojo
context.setLoader( createWebappLoader() );
File contextFile = getContextFile();
- if (contextFile != null)
+ if ( contextFile != null )
{
context.setConfigFile( getContextFile().getAbsolutePath() );
}
@@ -385,9 +405,9 @@ public abstract class AbstractRunMojo
/**
* Gets the webapp loader to run this web application under.
- *
+ *
* @return the webapp loader to use
- * @throws IOException if the webapp loader could not be created
+ * @throws IOException if the webapp loader could not be created
* @throws MojoExecutionException in case of an error creating the webapp loader
*/
protected WebappLoader createWebappLoader()
@@ -396,20 +416,22 @@ public abstract class AbstractRunMojo
if ( useSeparateTomcatClassLoader )
{
return ( isContextReloadable() )
- ? new ExternalRepositoriesReloadableWebappLoader( getTomcatClassLoader(), getLog() )
- : new WebappLoader( getTomcatClassLoader() );
+ ? new ExternalRepositoriesReloadableWebappLoader( getTomcatClassLoader(), getLog() )
+ : new WebappLoader( getTomcatClassLoader() );
}
return ( isContextReloadable() )
- ? new ExternalRepositoriesReloadableWebappLoader( Thread.currentThread().getContextClassLoader(), getLog() )
- : new WebappLoader( Thread.currentThread().getContextClassLoader() );
+ ? new ExternalRepositoriesReloadableWebappLoader( Thread.currentThread().getContextClassLoader(), getLog() )
+ : new WebappLoader( Thread.currentThread().getContextClassLoader() );
}
/**
* Determine whether the passed context.xml file declares the context as reloadable or not.
+ *
* @return false by default, true if reloadable="true" in context.xml.
*/
- protected boolean isContextReloadable() throws MojoExecutionException
+ protected boolean isContextReloadable()
+ throws MojoExecutionException
{
if ( contextReloadable )
{
@@ -419,7 +441,7 @@ public abstract class AbstractRunMojo
boolean reloadable = false;
try
{
- if ( contextFile !=null && contextFile.exists() )
+ if ( contextFile != null && contextFile.exists() )
{
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
@@ -429,8 +451,8 @@ public abstract class AbstractRunMojo
NamedNodeMap nodeMap = contextDoc.getDocumentElement().getAttributes();
Node reloadableAttribute = nodeMap.getNamedItem( "reloadable" );
- reloadable = ( reloadableAttribute != null ) ? Boolean.valueOf( reloadableAttribute.getNodeValue() )
- : false;
+ reloadable =
+ ( reloadableAttribute != null ) ? Boolean.valueOf( reloadableAttribute.getNodeValue() ) : false;
}
getLog().debug( "context reloadable: " + reloadable );
}
@@ -453,17 +475,18 @@ public abstract class AbstractRunMojo
/**
* Gets the webapp directory to run.
- *
+ *
* @return the webapp directory
*/
protected abstract File getDocBase();
/**
* Gets the Tomcat context XML file to use.
- *
+ *
* @return the context XML file
*/
- protected abstract File getContextFile() throws MojoExecutionException;
+ protected abstract File getContextFile()
+ throws MojoExecutionException;
// ----------------------------------------------------------------------
// Private Methods
@@ -471,7 +494,7 @@ public abstract class AbstractRunMojo
/**
* Gets whether this project uses WAR packaging.
- *
+ *
* @return whether this project uses WAR packaging
*/
protected boolean isWar()
@@ -481,7 +504,7 @@ public abstract class AbstractRunMojo
/**
* Gets the URL of the running webapp.
- *
+ *
* @return the URL of the running webapp
* @throws MalformedURLException if the running webapp URL is invalid
*/
@@ -493,8 +516,8 @@ public abstract class AbstractRunMojo
/**
* Creates the Tomcat configuration directory with the necessary resources.
- *
- * @throws IOException if the Tomcat configuration could not be created
+ *
+ * @throws IOException if the Tomcat configuration could not be created
* @throws MojoExecutionException if the Tomcat configuration could not be created
*/
private void initConfiguration()
@@ -510,10 +533,10 @@ public abstract class AbstractRunMojo
configurationDir.mkdirs();
- File confDir = new File( configurationDir, "conf");
+ File confDir = new File( configurationDir, "conf" );
confDir.mkdir();
- copyFile("/conf/tomcat-users.xml", new File( confDir, "tomcat-users.xml" ) );
+ copyFile( "/conf/tomcat-users.xml", new File( confDir, "tomcat-users.xml" ) );
if ( tomcatWebXml != null )
{
if ( !tomcatWebXml.exists() )
@@ -526,7 +549,7 @@ public abstract class AbstractRunMojo
}
else
{
- copyFile("/conf/web.xml", new File( confDir, "web.xml" ) );
+ copyFile( "/conf/web.xml", new File( confDir, "web.xml" ) );
}
File logDir = new File( configurationDir, "logs" );
@@ -563,9 +586,9 @@ public abstract class AbstractRunMojo
/**
* Copies the specified class resource to the specified file.
- *
+ *
* @param fromPath the path of the class resource to copy
- * @param toFile the file to copy to
+ * @param toFile the file to copy to
* @throws IOException if the file could not be copied
*/
private void copyFile( String fromPath, File toFile )
@@ -583,15 +606,15 @@ public abstract class AbstractRunMojo
/**
* Starts the embedded Tomcat server.
- *
- * @throws IOException if the server could not be configured
- * @throws LifecycleException if the server could not be started
+ *
+ * @throws IOException if the server could not be configured
+ * @throws LifecycleException if the server could not be started
* @throws MojoExecutionException if the server could not be configured
*/
private void startContainer()
throws IOException, LifecycleException, MojoExecutionException
{
-
+
// Set the system properties
setupSystemProperties();
final Embedded container;
@@ -604,7 +627,7 @@ public abstract class AbstractRunMojo
container = new Catalina();
container.setCatalinaHome( configurationDir.getAbsolutePath() );
- ( (Catalina) container).setConfigFile( serverXml.getPath() );
+ ( (Catalina) container ).setConfigFile( serverXml.getPath() );
container.start();
}
else
@@ -618,18 +641,17 @@ public abstract class AbstractRunMojo
//container.createLoader( getTomcatClassLoader() ).
// create context
- Context context = createContext(container);
-
+ Context context = createContext( container );
// create host
String appBase = new File( configurationDir, "webapps" ).getAbsolutePath();
Host host = container.createHost( "localHost", appBase );
-
+
host.addChild( context );
-
+
if ( addContextWarDependencies )
{
- Collection<Context> dependecyContexts = createDependencyContexts(container);
+ Collection<Context> dependecyContexts = createDependencyContexts( container );
for ( Context extraContext : dependecyContexts )
{
host.addChild( extraContext );
@@ -647,7 +669,7 @@ public abstract class AbstractRunMojo
engine.setParentClassLoader( getTomcatClassLoader() );
}
// create http connector
- Connector httpConnector = container.createConnector( (InetAddress) null, port, false );
+ Connector httpConnector = container.createConnector( (InetAddress) null, port, protocol );
if ( httpsPort > 0 )
{
httpConnector.setRedirectPort( httpsPort );
@@ -659,13 +681,13 @@ public abstract class AbstractRunMojo
if ( httpsPort > 0 )
{
Connector httpsConnector = container.createConnector( (InetAddress) null, httpsPort, true );
- if ( keystoreFile!=null)
+ if ( keystoreFile != null )
{
- httpsConnector.setAttribute("keystoreFile", keystoreFile);
+ httpsConnector.setAttribute( "keystoreFile", keystoreFile );
}
- if ( keystorePass!=null)
+ if ( keystorePass != null )
{
- httpsConnector.setAttribute("keystorePass", keystorePass);
+ httpsConnector.setAttribute( "keystorePass", keystorePass );
}
container.addConnector( httpsConnector );
@@ -680,8 +702,8 @@ public abstract class AbstractRunMojo
}
}
container.start();
-
- EmbeddedRegistry.getInstance().register(container);
+
+ EmbeddedRegistry.getInstance().register( container );
}
protected ClassRealm getTomcatClassLoader()
@@ -696,8 +718,7 @@ public abstract class AbstractRunMojo
ClassWorld world = new ClassWorld();
ClassRealm root = world.newRealm( "tomcat", Thread.currentThread().getContextClassLoader() );
- for ( @SuppressWarnings("rawtypes")
- Iterator i = pluginArtifacts.iterator(); i.hasNext(); )
+ for ( @SuppressWarnings( "rawtypes" ) Iterator i = pluginArtifacts.iterator(); i.hasNext(); )
{
Artifact pluginArtifact = (Artifact) i.next();
if ( "org.apache.tomcat".equals( pluginArtifact.getGroupId() ) )
@@ -720,12 +741,12 @@ public abstract class AbstractRunMojo
throw new MojoExecutionException( e.getMessage(), e );
}
}
-
+
@SuppressWarnings( "unchecked" )
public Set<Artifact> getProjectArtifacts()
{
return project.getArtifacts();
- }
+ }
/**
* Causes the current thread to wait indefinitely. This method does not return.
@@ -746,7 +767,7 @@ public abstract class AbstractRunMojo
}
}
}
-
+
/**
* Set the SystemProperties from the configuration.
@@ -773,24 +794,24 @@ public abstract class AbstractRunMojo
}
}
}
-
-
+
+
/**
* Allows the startup of additional webapps in the tomcat container by declaration with scope
* "tomcat".
- *
+ *
* @param container tomcat
* @return dependency tomcat contexts of warfiles in scope "tomcat"
*/
- private Collection<Context> createDependencyContexts( Embedded container ) throws MojoExecutionException
+ private Collection<Context> createDependencyContexts( Embedded container )
+ throws MojoExecutionException
{
getLog().info( "Deploying dependency wars" );
// Let's add other modules
List<Context> contexts = new ArrayList<Context>();
ScopeArtifactFilter filter = new ScopeArtifactFilter( "tomcat" );
- @SuppressWarnings("unchecked")
- Set<Artifact> artifacts = project.getArtifacts();
+ @SuppressWarnings( "unchecked" ) Set<Artifact> artifacts = project.getArtifacts();
for ( Artifact artifact : artifacts )
{
@@ -831,15 +852,16 @@ public abstract class AbstractRunMojo
}
}
WebappLoader webappLoader = new WebappLoader( Thread.currentThread().getContextClassLoader() );
- Context context = container.createContext( "/" + artifact.getArtifactId(), artifactWarDir.getAbsolutePath() );
+ Context context =
+ container.createContext( "/" + artifact.getArtifactId(), artifactWarDir.getAbsolutePath() );
context.setLoader( webappLoader );
File contextFile = getContextFile();
- if (contextFile != null)
+ if ( contextFile != null )
{
context.setConfigFile( getContextFile().getAbsolutePath() );
}
contexts.add( context );
-
+
}
}
return contexts;
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org