in tomcat8-maven-plugin/src/main/java/org/apache/tomcat/maven/plugin/tomcat8/run/AbstractRunMojo.java [1112:1376]
private void startContainer()
throws IOException, LifecycleException, MojoExecutionException, ServletException
{
String previousCatalinaBase = System.getProperty( "catalina.base" );
try
{
// Set the system properties
setupSystemProperties();
System.setProperty( "catalina.base", configurationDir.getAbsolutePath() );
if ( serverXml != null )
{
if ( !serverXml.exists() )
{
throw new MojoExecutionException( serverXml.getPath() + " not exists" );
}
Catalina container = new Catalina();
if ( useSeparateTomcatClassLoader )
{
Thread.currentThread().setContextClassLoader( getTomcatClassLoader() );
container.setParentClassLoader( getTomcatClassLoader() );
}
container.setUseNaming( this.useNaming );
container.setConfigFile( serverXml.getAbsolutePath() );
container.start();
EmbeddedRegistry.getInstance().register( container );
}
else
{
System.setProperty( "java.util.logging.manager", "org.apache.juli.ClassLoaderLogManager" );
System.setProperty( "java.util.logging.config.file",
new File( configurationDir, "conf/logging.properties" ).toString() );
// Trigger loading of catalina.properties
CatalinaProperties.getProperty( "foo" );
Tomcat embeddedTomcat = new ExtendedTomcat( configurationDir );
embeddedTomcat.setBaseDir( configurationDir.getAbsolutePath() );
MemoryRealm memoryRealm = new MemoryRealm();
if ( tomcatUsers != null )
{
if ( !tomcatUsers.exists() )
{
throw new MojoExecutionException( " tomcatUsers " + tomcatUsers.getPath() + " not exists" );
}
getLog().info( "use tomcat-users.xml from " + tomcatUsers.getAbsolutePath() );
memoryRealm.setPathname( tomcatUsers.getAbsolutePath() );
}
embeddedTomcat.getEngine().setRealm( memoryRealm );
Context ctx = createContext( embeddedTomcat );
if ( useNaming )
{
embeddedTomcat.enableNaming();
}
embeddedTomcat.getHost().setAppBase( new File( configurationDir, "webapps" ).getAbsolutePath() );
if ( hostName != null )
{
embeddedTomcat.getHost().setName( hostName );
}
if ( aliases != null )
{
for ( String alias : aliases )
{
embeddedTomcat.getHost().addAlias( alias );
}
}
createStaticContext( embeddedTomcat, ctx, embeddedTomcat.getHost() );
Connector connector = new Connector( protocol );
connector.setPort( port );
connector.setMaxPostSize( maxPostSize );
if ( httpsPort > 0 )
{
connector.setRedirectPort( httpsPort );
}
if ( address != null )
{
connector.setAttribute( "address", address );
}
connector.setURIEncoding( uriEncoding );
connector.setUseBodyEncodingForURI( this.useBodyEncodingForURI );
embeddedTomcat.getService().addConnector( connector );
embeddedTomcat.setConnector( connector );
AccessLogValve alv = new AccessLogValve();
alv.setDirectory( new File( configurationDir, "logs" ).getAbsolutePath() );
alv.setPattern( "%h %l %u %t \"%r\" %s %b %I %D" );
embeddedTomcat.getHost().getPipeline().addValve( alv );
// create https connector
Connector httpsConnector = null;
if ( httpsPort > 0 )
{
httpsConnector = new Connector( protocol );
httpsConnector.setPort( httpsPort );
httpsConnector.setMaxPostSize( maxPostSize );
httpsConnector.setSecure( true );
httpsConnector.setProperty( "SSLEnabled", "true" );
// should be default but configure it anyway
httpsConnector.setProperty( "sslProtocol", "TLS" );
if ( keystoreFile != null )
{
httpsConnector.setAttribute( "keystoreFile", keystoreFile );
}
if ( keystorePass != null )
{
httpsConnector.setAttribute( "keystorePass", keystorePass );
}
if ( keystoreType != null )
{
httpsConnector.setAttribute( "keystoreType", keystoreType );
}
if ( trustManagerClassName != null )
{
httpsConnector.setAttribute( "trustManagerClassName", trustManagerClassName );
}
if ( trustMaxCertLength != null )
{
httpsConnector.setAttribute( "trustMaxCertLength", trustMaxCertLength );
}
if ( truststoreAlgorithm != null )
{
httpsConnector.setAttribute( "truststoreAlgorithm", truststoreAlgorithm );
}
if ( truststoreFile != null )
{
httpsConnector.setAttribute( "truststoreFile", truststoreFile );
}
if ( truststorePass != null )
{
httpsConnector.setAttribute( "truststorePass", truststorePass );
}
if ( truststoreProvider != null )
{
httpsConnector.setAttribute( "truststoreProvider", truststoreProvider );
}
if ( truststoreType != null )
{
httpsConnector.setAttribute( "truststoreType", truststoreType );
}
httpsConnector.setAttribute( "clientAuth", clientAuth );
httpsConnector.setUseBodyEncodingForURI( this.useBodyEncodingForURI );
if ( address != null )
{
httpsConnector.setAttribute( "address", address );
}
embeddedTomcat.getEngine().getService().addConnector( httpsConnector );
}
// create ajp connector
Connector ajpConnector = null;
if ( ajpPort > 0 )
{
ajpConnector = new Connector( ajpProtocol );
ajpConnector.setPort( ajpPort );
ajpConnector.setURIEncoding( uriEncoding );
ajpConnector.setUseBodyEncodingForURI( this.useBodyEncodingForURI );
if ( address != null )
{
ajpConnector.setAttribute( "address", address );
}
embeddedTomcat.getEngine().getService().addConnector( ajpConnector );
}
if ( addContextWarDependencies || !getAdditionalWebapps().isEmpty() )
{
createDependencyContexts( embeddedTomcat );
}
if ( useSeparateTomcatClassLoader )
{
Thread.currentThread().setContextClassLoader( getTomcatClassLoader() );
embeddedTomcat.getEngine().setParentClassLoader( getTomcatClassLoader() );
}
embeddedTomcat.start();
Properties portProperties = new Properties();
portProperties.put( "tomcat.maven.http.port", Integer.toString( connector.getLocalPort() ) );
session.getExecutionProperties().put( "tomcat.maven.http.port",
Integer.toString( connector.getLocalPort() ) );
System.setProperty( "tomcat.maven.http.port", Integer.toString( connector.getLocalPort() ) );
if ( httpsConnector != null )
{
session.getExecutionProperties().put( "tomcat.maven.https.port",
Integer.toString( httpsConnector.getLocalPort() ) );
portProperties.put( "tomcat.maven.https.port", Integer.toString( httpsConnector.getLocalPort() ) );
System.setProperty( "tomcat.maven.https.port", Integer.toString( httpsConnector.getLocalPort() ) );
}
if ( ajpConnector != null )
{
session.getExecutionProperties().put( "tomcat.maven.ajp.port",
Integer.toString( ajpConnector.getLocalPort() ) );
portProperties.put( "tomcat.maven.ajp.port", Integer.toString( ajpConnector.getLocalPort() ) );
System.setProperty( "tomcat.maven.ajp.port", Integer.toString( ajpConnector.getLocalPort() ) );
}
if ( propertiesPortFilePath != null )
{
File propertiesPortsFile = new File( propertiesPortFilePath );
if ( propertiesPortsFile.exists() )
{
propertiesPortsFile.delete();
}
FileOutputStream fileOutputStream = new FileOutputStream( propertiesPortsFile );
try
{
portProperties.store( fileOutputStream, "Apache Tomcat Maven plugin port used" );
}
finally
{
IOUtils.closeQuietly( fileOutputStream );
}
}
EmbeddedRegistry.getInstance().register( embeddedTomcat );
}
}
finally
{
if ( previousCatalinaBase != null )
{
System.setProperty( "catalina.base", previousCatalinaBase );
}
}
}