<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You 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.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="manager-howto.html">

    &project;

    <properties>
        <author email="craigmcc@apache.org">Craig R. McClanahan</author>
        <title>Manager App HOW-TO</title>
    </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

<section name="Introduction">

<p>In many production environments, it is very useful to have the capability
to deploy a new web application, or undeploy an existing one, without having
to shut down and restart the entire container.  In addition, you can request
an existing application to reload itself, even if you have not declared it
to be <code>reloadable</code> in the Tomcat server
configuration file.</p>

<p>To support these capabilities, Tomcat includes a web application
(installed by default on context path <code>/manager</code>) that supports
the following functions:</p>
<ul>
<li>Deploy a new web application from the uploaded contents of a WAR file.</li>
<li>Deploy a new web application, on a specified context path, from the
    server file system.</li>
<li>List the currently deployed web applications, as well as the
    sessions that are currently active for those web apps.</li>
<li>Reload an existing web application, to reflect changes in the
    contents of <code>/WEB-INF/classes</code> or <code>/WEB-INF/lib</code>.
    </li>
<li>List the OS and JVM property values.</li>
<li>List the available global JNDI resources, for use in deployment
    tools that are preparing <code>&lt;ResourceLink&gt;</code> elements
    nested in a <code>&lt;Context&gt;</code> deployment description.</li>
<li>Start a stopped application (thus making it available again).</li>
<li>Stop an existing application (so that it becomes unavailable), but
    do not undeploy it.</li>
<li>Undeploy a deployed web application and delete its document base
    directory (unless it was deployed from file system).</li>
</ul>

<p>A default Tomcat installation includes the Manager. To add an instance of the
Manager web application <code>Context</code> to a new host install the
<code>manager.xml</code> context configuration file in the
<code>$CATALINA_BASE/conf/[enginename]/[hostname]</code> folder. Here is an
example:</p>
<source><![CDATA[<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.0\.0\.1" />
</Context>]]></source>

<p>If you have Tomcat configured to support multiple virtual hosts
(websites) you would need to configure a Manager for each.</p>

<p>There are three ways to use the <strong>Manager</strong> web application.</p>
<ul>
<li>As an application with a user interface you use in your browser.
Here is an example URL where you can replace <code>localhost</code> with
your website host name:  <code>http://localhost:8080/manager/html</code> .</li>
<li>A minimal version using HTTP requests only which is suitable for use
by scripts setup by system administrators.  Commands are given as part of the
request URI, and responses are in the form of simple text that can be easily
parsed and processed.  See <a href="#Supported_Manager_Commands">
Supported Manager Commands</a> for more information.</li>
<li>A convenient set of task definitions for the <em>Ant</em>
(version 1.4 or later) build tool.  See
<a href="#Executing_Manager_Commands_With_Ant">Executing Manager Commands
With Ant</a> for more information.</li>
</ul>

</section>

<section name="Configuring Manager Application Access">


    <p><em>The description below uses the variable name $CATALINA_BASE to refer the
    base directory against which most relative paths are resolved. If you have
    not configured Tomcat for multiple instances by setting a CATALINA_BASE
    directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME,
    the directory into which you have installed Tomcat.</em></p>


<p>It would be quite unsafe to ship Tomcat with default settings that allowed
anyone on the Internet to execute the Manager application on your server.
Therefore, the Manager application is shipped with the requirement that anyone
who attempts to use it must authenticate themselves, using a username and
password that have one of <strong>manager-**</strong> roles associated with
them (the role name depends on what functionality is required).
Further, there is no username in the default users file
(<code>$CATALINA_BASE/conf/tomcat-users.xml</code>) that is assigned to those
roles.  Therefore, access to the Manager application is completely disabled
by default.</p>

<p>You can find the role names in the <code>web.xml</code> file of the Manager
web application. The available roles are:</p>

<ul>
  <li><strong>manager-gui</strong> &#8212; Access to the HTML interface.</li>
  <li><strong>manager-status</strong> &#8212; Access to the "Server Status"
    page only.</li>
  <li><strong>manager-script</strong> &#8212; Access to the tools-friendly
    plain text interface that is described in this document,
    and to the "Server Status" page.</li>
  <li><strong>manager-jmx</strong> &#8212; Access to JMX proxy interface
    and to the "Server Status" page.</li>
</ul>

<p>The HTML interface is protected against CSRF (Cross-Site Request Forgery)
attacks, but the text and JMX interfaces cannot be protected. It means that
users who are allowed access to the text and JMX interfaces have to be cautious
when accessing the Manager application with a web browser.
To maintain the CSRF protection:</p>

<ul>
  <li>If you use web browser to access the Manager application using
      a user that has either <strong>manager-script</strong> or
      <strong>manager-jmx</strong> roles (for example for testing
      the plain text or JMX interfaces), you MUST close all windows
      of the browser afterwards to terminate the session.
      If you do not close the browser and visit other sites, you may become
      victim of a CSRF attack.</li>
  <li>It is recommended to never grant
      the <strong>manager-script</strong> or <strong>manager-jmx</strong>
      roles to users that have the <strong>manager-gui</strong> role.</li>
</ul>

<p><strong>Note</strong> that JMX proxy interface is effectively low-level root-like
administrative interface of Tomcat. One can do a lot, if he knows
what commands to call. You should be cautious when enabling the
<strong>manager-jmx</strong> role.</p>

<p>To enable access to the Manager web application, you must either create
a new username/password combination and associate one of the
<strong>manager-**</strong> roles with it, or add a
<strong>manager-**</strong> role
to some existing username/password combination.
As the majority of this document describes the commands of plain textual
interface, let the role name for further example to be
<strong>manager-script</strong>.
Exactly how the usernames/passwords are configured depends on which
<a href="config/realm.html">Realm implementation</a> you are using:</p>
<ul>
<li><em>UserDatabaseRealm</em> plus <em>MemoryUserDatabase</em>, or <em>MemoryRealm</em>
    &#8212; The <em>UserDatabaseRealm</em> and <em>MemoryUserDatabase</em> are
    configured in the default <code>$CATALINA_BASE/conf/server.xml</code>.
    Both <em>MemoryUserDatabase</em> and <em>MemoryRealm</em> read an
    XML-format file by default stored at
    <code>$CATALINA_BASE/conf/tomcat-users.xml</code>, which can be
    edited with any text editor.  This file contains an XML
    <code>&lt;user&gt;</code> for each individual user, which might
    look something like this:
<source><![CDATA[<user username="craigmcc" password="secret" roles="standard,manager-script" />]]></source>
    which defines the username and password used by this individual to
    log on, and the role names he or she is associated with.  You can
    add the <strong>manager-script</strong> role to the comma-delimited
    <code>roles</code> attribute for one or more existing users, and/or
    create new users with that assigned role.</li>
<li><em>DataSourceRealm</em> or <em>JDBCRealm</em>
    &#8212; Your user and role information is stored in
    a database accessed via JDBC.  Add the <strong>manager-script</strong> role
    to one or more existing users, and/or create one or more new users
    with this role assigned, following the standard procedures for your
    environment.</li>
<li><em>JNDIRealm</em> &#8212; Your user and role information is stored in
    a directory server accessed via LDAP.  Add the
    <strong>manager-script</strong> role to one or more existing users,
    and/or create one or more new users with this role assigned, following
    the standard procedures for your environment.</li>
</ul>

<p>The first time you attempt to issue one of the Manager commands
described in the next section, you will be challenged to log on using
BASIC authentication.  The username and password you enter do not matter,
as long as they identify a valid user in the users database who possesses
the role <strong>manager-script</strong>.</p>

<p>In addition to the password restrictions the Manager web application
could be restricted by the <strong>remote IP address</strong> or host by adding
a <code>RemoteAddrValve</code> or <code>RemoteHostValve</code>.
See <a href="config/valve.html#Remote_Address_Filter">valves documentation</a>
for details. Here is
an example of restricting access to the localhost by IP address:</p>
<source><![CDATA[<Context privileged="true">
         <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                allow="127\.0\.0\.1"/>
</Context>]]></source>

</section>

<section name="HTML User-friendly Interface">

<p>The user-friendly HTML interface of Manager web application is located at</p>

<source>http://{host}:{port}/manager/html</source>

<p>As has already been mentioned above, you need <strong>manager-gui</strong>
role to be allowed to access it. There is a separate document that provides
help on this interface. See:</p>

<ul>
  <li><a href="html-manager-howto.html">HTML Manager documentation</a></li>
</ul>

<p>The HTML interface is protected against CSRF (Cross-Site Request Forgery)
attacks. Each access to the HTML pages generates a random token, which is
stored in your session and is included in all links on the page. If your next
action does not have correct value of the token, the action will be denied.
If the token has expired you can start again from the main page or
<em>List Applications</em> page of Manager.</p>

</section>

<section name="Supported Manager Commands">

<p>All commands that the Manager application knows how to process are
specified in a single request URI like this:</p>
<source>http://{host}:{port}/manager/text/{command}?{parameters}</source>
<p>where <code>{host}</code> and <code>{port}</code> represent the hostname
and port number on which Tomcat is running, <code>{command}</code>
represents the Manager command you wish to execute, and
<code>{parameters}</code> represents the query parameters
that are specific to that command.  In the illustrations below, customize
the host and port appropriately for your installation.</p>

<p>The commands are usually executed by HTTP GET requests. The
<code>/deploy</code> command has a form that is executed by an HTTP PUT request.</p>

<subsection name="Common Parameters">

<p>Most commands accept one or more of the following query parameters:</p>
<ul>
<li><strong>path</strong> - The context path (including the leading slash)
    of the web application you are dealing with.  To select the ROOT web
    application, specify "/".  <strong>NOTE</strong>:
    It is not possible to perform administrative commands on the
    Manager application itself.</li>
<li><strong>version</strong> - The version of this web application as used by
    the <a href="config/context.html">parallel deployment</a> feature,</li>
<li><strong>war</strong> - URL of a web application archive (WAR) file, or
    pathname of a directory which contains the web application, or a
    Context configuration ".xml" file.  You can use URLs in any of the
    following formats:
    <ul>
    <li><strong>file:/absolute/path/to/a/directory</strong> - The absolute
        path of a directory that contains the unpacked version of a web
        application.  This directory will be attached to the context path
        you specify without any changes.</li>
    <li><strong>file:/absolute/path/to/a/webapp.war</strong> - The absolute
        path of a web application archive (WAR) file.  This is valid
        <strong>only</strong> for the <code>/deploy</code> command, and is
        the only acceptable format to that command.</li>
    <li><strong>jar:file:/absolute/path/to/a/warfile.war!/</strong> - The
        URL to a local web application archive (WAR) file.  You can use any
        syntax that is valid for the <code>JarURLConnection</code> class
        for reference to an entire JAR file.</li>
    <li><strong>file:/absolute/path/to/a/context.xml</strong> - The
        absolute path of a web application Context configuration ".xml"
        file which contains the Context configuration element.</li>
    <li><strong>directory</strong> - The directory name for the web
        application context in the Host's application base directory.</li>
    <li><strong>webapp.war</strong> - The name of a web application war file
        located in the Host's application base directory.</li>
    </ul></li>
</ul>

<p>Each command will return a response in <code>text/plain</code> format
(i.e. plain ASCII with no HTML markup), making it easy for both humans and
programs to read).  The first line of the response will begin with either
<code>OK</code> or <code>FAIL</code>, indicating whether the requested
command was successful or not.  In the case of failure, the rest of the first
line will contain a description of the problem that was encountered.  Some
commands include additional lines of information as described below.</p>

<p><em>Internationalization Note</em> - The Manager application looks up
its message strings in resource bundles, so it is possible that the strings
have been translated for your platform.  The examples below show the English
version of the messages.</p>

</subsection>

<subsection name="Deploy A New Application Archive (WAR) Remotely">

<source>http://localhost:8080/manager/text/deploy?path=/foo</source>

<p>Upload the web application archive (WAR) file that is specified as the
request data in this HTTP PUT request, install it into the <code>appBase</code>
directory of our corresponding virtual host, and start , using the directory
name or the war file name without the .war extension as the path.  The
application can later be undeployed (and the corresponding application directory
removed) by use of the <code>/undeploy</code> command.</p>

<p>This command is executed by an HTTP PUT request.</p>

<p>The .WAR file may include Tomcat specific deployment configuration, by
including a Context configuration XML file in
<code>/META-INF/context.xml</code>.</p>

<p>URL parameters include:</p>
<ul>
<li><code>update</code>: When set to true, any existing update will be
    undeployed first. The default value is set to false.</li>
<li><code>tag</code>: Specifying a tag name, this allows associating the
    deployed webapp with a tag or label. If the web application is undeployed,
    it can be later redeployed when needed using only the tag.</li>
</ul>

<p><strong>NOTE</strong> - This command is the logical
opposite of the <code>/undeploy</code> command.</p>

<p>If installation and startup is successful, you will receive a response
like this:</p>
<source>OK - Deployed application at context path /foo</source>

<p>Otherwise, the response will start with <code>FAIL</code> and include an
error message.  Possible causes for problems include:</p>
<ul>
<li><em>Application already exists at path /foo</em>
    <p>The context paths for all currently running web applications must be
    unique.  Therefore, you must undeploy the existing web
    application using this context path, or choose a different context path
    for the new one. The <code>update</code> parameter may be specified as
    a parameter on the URL, with a value of <code>true</code> to avoid this
    error. In that case, an undeploy will be performed on an existing
    application before performing the deployment.</p>
    </li>
<li><em>Encountered exception</em>
    <p>An exception was encountered trying to start the new web application.
    Check the Tomcat logs for the details, but likely explanations include
    problems parsing your <code>/WEB-INF/web.xml</code> file, or missing
    classes encountered when initializing application event listeners and
    filters.</p>
    </li>
</ul>

</subsection>

<subsection name="Deploy A New Application from a Local Path">

<p>Deploy and start a new web application, attached to the specified context
<code>path</code> (which must not be in use by any other web application).
This command is the logical opposite of the <code>/undeploy</code> command.</p>

<p>This command is executed by an HTTP GET request.
There are a number of different ways the deploy command can be used.</p>

<subsection name="Deploy a previously deployed webapp">

<source>http://localhost:8080/manager/text/deploy?path=/footoo&amp;tag=footag</source>

<p>This can be used to deploy a previously deployed web application, which
has been deployed using the <code>tag</code> attribute. Note that the work
directory of the Manager webapp will contain the previously deployed WARs;
removing it would make the deployment fail.</p>

</subsection>

<subsection name="Deploy a Directory or WAR by URL">

<p>Deploy a web application directory or ".war" file located on the Tomcat
server. If no <code>path</code> is specified, the directory name or the war file
name without the ".war" extension is used as the path. The <code>war</code>
parameter specifies a URL (including the <code>file:</code> scheme) for either
a directory or a web application archive (WAR) file. The supported syntax for
a URL referring to a WAR file is described on the Javadocs page for the
<code>java.net.JarURLConnection</code> class.  Use only URLs that refer to
the entire WAR file.</p>

<p>In this example the web application located in the directory
<code>/path/to/foo</code> on the Tomcat server is deployed as the
web application context named <code>/footoo</code>.</p>
<source>http://localhost:8080/manager/text/deploy?path=/footoo&amp;war=file:/path/to/foo</source>


<p>In this example the ".war" file <code>/path/to/bar.war</code> on the
Tomcat server is deployed as the web application context named
<code>/bar</code>. Notice that there is no <code>path</code> parameter
so the context path defaults to the name of the web application archive
file without the ".war" extension.</p>
<source>http://localhost:8080/manager/text/deploy?war=jar:file:/path/to/bar.war!/</source>

</subsection>

<subsection name="Deploy a Directory or War from the Host appBase">

<p>Deploy a web application directory or ".war" file located in your Host
appBase directory. The directory name or the war file name without the ".war"
extension is used as the path.</p>

<p>In this example the web application located in a sub directory named
<code>foo</code> in the Host appBase directory of the Tomcat server is
deployed as the web application context named <code>/foo</code>. Notice
that the context path used is the name of the web application directory.</p>
<source>http://localhost:8080/manager/text/deploy?war=foo</source>


<p>In this example the ".war" file <code>bar.war</code> located in your
Host appBase directory on the Tomcat server is deployed as the web
application context named <code>/bar</code>.</p>
<source>http://localhost:8080/manager/text/deploy?war=bar.war</source>

</subsection>

<subsection name="Deploy using a Context configuration &quot;.xml&quot; file">

<p>If the Host deployXML flag is set to true you can deploy a web
application using a Context configuration ".xml" file and an optional
".war" file or web application directory. The context <code>path</code>
is not used when deploying a web application using a context ".xml"
configuration file.</p>

<p>A Context configuration ".xml" file can contain valid XML for a
web application Context just as if it were configured in your
Tomcat <code>server.xml</code> configuration file. Here is an
example:</p>
<source><![CDATA[<Context path="/foobar" docBase="/path/to/application/foobar">
</Context>]]></source>


<p>When the optional <code>war</code> parameter is set to the URL
for a web application ".war" file or directory it overrides any
docBase configured in the context configuration ".xml" file.</p>

<p>Here is an example of deploying an application using a Context
configuration ".xml" file.</p>
<source>http://localhost:8080/manager/text/deploy?config=file:/path/context.xml</source>


<p>Here is an example of deploying an application using a Context
configuration ".xml" file and a web application ".war" file located
on the server.</p>
<source>http://localhost:8080/manager/text/deploy
 ?config=file:/path/context.xml&amp;war=jar:file:/path/bar.war!/</source>

</subsection>

<subsection name="Deployment Notes">

<p>If the Host is configured with unpackWARs=true and you deploy a war
file, the war will be unpacked into a directory in your Host appBase
directory.</p>

<p>If the application war or directory is installed in your Host appBase
directory and either the Host is configured with autoDeploy=true or the
Context path must match the directory name or war file name without the
".war" extension.</p>

<p>For security when untrusted users can manage web applications, the
Host deployXML flag can be set to false.  This prevents untrusted users
from deploying web applications using a configuration XML file and
also prevents them from deploying application directories or ".war"
files located outside of their Host appBase.</p>

</subsection>

<subsection name="Deploy Response">

<p>If installation and startup is successful, you will receive a response
like this:</p>
<source>OK - Deployed application at context path /foo</source>

<p>Otherwise, the response will start with <code>FAIL</code> and include an
error message.  Possible causes for problems include:</p>
<ul>
<li><em>Application already exists at path /foo</em>
    <p>The context paths for all currently running web applications must be
    unique.  Therefore, you must undeploy the existing web
    application using this context path, or choose a different context path
    for the new one. The <code>update</code> parameter may be specified as
    a parameter on the URL, with a value of <code>true</code> to avoid this
    error. In that case, an undeploy will be performed on an existing
    application before performing the deployment.</p>
    </li>
<li><em>Document base does not exist or is not a readable directory</em>
    <p>The URL specified by the <code>war</code> parameter must identify a
    directory on this server that contains the "unpacked" version of a
    web application, or the absolute URL of a web application archive (WAR)
    file that contains this application.  Correct the value specified by
    the <code>war</code> parameter.</p>
    </li>
<li><em>Encountered exception</em>
    <p>An exception was encountered trying to start the new web application.
    Check the Tomcat logs for the details, but likely explanations include
    problems parsing your <code>/WEB-INF/web.xml</code> file, or missing
    classes encountered when initializing application event listeners and
    filters.</p>
    </li>
<li><em>Invalid application URL was specified</em>
    <p>The URL for the directory or web application that you specified
    was not valid.  Such URLs must start with <code>file:</code>, and URLs
    for a WAR file must end in ".war".</p>
    </li>
<li><em>Invalid context path was specified</em>
    <p>The context path must start with a slash character. To reference the
    ROOT web application use "/".</p>
    </li>
<li><em>Context path must match the directory or WAR file name:</em>
    <p>If the application war or directory is installed in your Host appBase
    directory and either the Host is configured with autoDeploy=true the
    Context path must match the directory name or war file name without
    the ".war" extension.</p>
    </li>
<li><em>Only web applications in the Host web application directory can
     be installed</em>
     <p>
     If the Host deployXML flag is set to false this error will happen
     if an attempt is made to deploy a web application directory or
      ".war" file outside of the Host appBase directory.
     </p></li>
</ul>

</subsection>
</subsection>

<subsection name="List Currently Deployed Applications">

<source>http://localhost:8080/manager/text/list</source>

<p>List the context paths, current status (<code>running</code> or
<code>stopped</code>), and number of active sessions for all currently
deployed web applications.  A typical response immediately
after starting Tomcat might look like this:</p>
<source>OK - Listed applications for virtual host localhost
/webdav:running:0
/examples:running:0
/manager:running:0
/:running:0</source>

</subsection>

<subsection name="Reload An Existing Application">

<source>http://localhost:8080/manager/text/reload?path=/examples</source>

<p>Signal an existing application to shut itself down and reload.  This can
be useful when the web application context is not reloadable and you have
updated classes or property files in the <code>/WEB-INF/classes</code>
directory or when you have added or updated jar files in the
<code>/WEB-INF/lib</code> directory.
</p>
<p><strong>NOTE:</strong> The <code>/WEB-INF/web.xml</code>
web application configuration file is not reread on a reload.
If you have made changes to your web.xml file you must stop
then start the web application.
</p>

<p>If this command succeeds, you will see a response like this:</p>
<source>OK - Reloaded application at context path /examples</source>

<p>Otherwise, the response will start with <code>FAIL</code> and include an
error message.  Possible causes for problems include:</p>
<ul>
<li><em>Encountered exception</em>
    <p>An exception was encountered trying to restart the web application.
    Check the Tomcat logs for the details.</p>
    </li>
<li><em>Invalid context path was specified</em>
    <p>The context path must start with a slash character. To reference the
    ROOT web application use "/".</p>
    </li>
<li><em>No context exists for path /foo</em>
    <p>There is no deployed application on the context path
    that you specified.</p>
    </li>
<li><em>No context path was specified</em>
    <p>
    The <code>path</code> parameter is required.
    </p></li>
<li><em>Reload not supported on WAR deployed at path /foo</em>
    <p>
    Currently, application reloading (to pick up changes to the classes or
    <code>web.xml</code> file) is not supported when a web application is
    deployed directly from a WAR file.  It only works when the web application
    is deployed from an unpacked directory.  If you are using a WAR file,
    you should <code>undeploy</code> and then <code>deploy</code> or
    <code>deploy</code> with the <code>update</code> parameter the
    application again to pick up your changes.
    </p></li>
</ul>

</subsection>

<subsection name="List OS and JVM Properties">

<source>http://localhost:8080/manager/text/serverinfo</source>

<p>Lists information about the Tomcat version, OS, and JVM properties.</p>

<p>If an error occurs, the response will start with <code>FAIL</code> and
include an error message.  Possible causes for problems include:</p>
<ul>
<li><em>Encountered exception</em>
    <p>An exception was encountered trying to enumerate the system properties.
    Check the Tomcat logs for the details.</p>
    </li>
</ul>

</subsection>

<subsection name="List Available Global JNDI Resources">

<source>http://localhost:8080/manager/text/resources[?type=xxxxx]</source>

<p>List the global JNDI resources that are available for use in resource
links for context configuration files.  If you specify the <code>type</code>
request parameter, the value must be the fully qualified Java class name of
the resource type you are interested in (for example, you would specify
<code>javax.sql.DataSource</code> to acquire the names of all available
JDBC data sources).  If you do not specify the <code>type</code> request
parameter, resources of all types will be returned.</p>

<p>Depending on whether the <code>type</code> request parameter is specified
or not, the first line of a normal response will be:</p>
<source>OK - Listed global resources of all types</source>
<p>or</p>
<source>OK - Listed global resources of type xxxxx</source>
<p>followed by one line for each resource.  Each line is composed of fields
delimited by colon characters (":"), as follows:</p>
<ul>
<li><em>Global Resource Name</em> - The name of this global JNDI resource,
    which would be used in the <code>global</code> attribute of a
    <code>&lt;ResourceLink&gt;</code> element.</li>
<li><em>Global Resource Type</em> - The fully qualified Java class name of
    this global JNDI resource.</li>
</ul>

<p>If an error occurs, the response will start with <code>FAIL</code> and
include an error message.  Possible causes for problems include:</p>
<ul>
<li><em>Encountered exception</em>
    <p>An exception was encountered trying to enumerate the global JNDI
    resources.  Check the Tomcat logs for the details.</p>
    </li>
<li><em>No global JNDI resources are available</em>
    <p>The Tomcat server you are running has been configured without
    global JNDI resources.</p>
    </li>
</ul>


</subsection>

<subsection name="Session Statistics">

<source>http://localhost:8080/manager/text/sessions?path=/examples</source>

<p>Display the default session timeout for a web application, and the
number of currently active sessions that fall within one-minute ranges of
their actual timeout times.  For example, after restarting Tomcat and then
executing one of the JSP samples in the <code>/examples</code> web app,
you might get something like this:</p>

<source><![CDATA[OK - Session information for application at context path /examples
Default maximum session inactive interval 30 minutes
<1 minutes: 1 sessions
1 - <2 minutes: 1 sessions]]></source>

</subsection>

<subsection name="Expire Sessions">

<source>http://localhost:8080/manager/text/expire?path=/examples&amp;idle=num</source>

<p>Display the session statistics (like the above <code>/sessions</code>
command) and expire sessions that are idle for longer than <code>num</code>
minutes. To expire all sessions, use <code>&amp;idle=0</code> .</p>

<source><![CDATA[OK - Session information for application at context path /examples
Default maximum session inactive interval 30 minutes
1 - <2 minutes: 1 sessions
3 - <4 minutes: 1 sessions
>0 minutes: 2 sessions were expired]]></source>

<p>Actually <code>/sessions</code> and <code>/expire</code> are synonims for
the same command. The difference is in the presence of <code>idle</code>
parameter.</p>

</subsection>

<subsection name="Start an Existing Application">

<source>http://localhost:8080/manager/text/start?path=/examples</source>

<p>Signal a stopped application to restart, and make itself available again.
Stopping and starting is useful, for example, if the database required by
your application becomes temporarily unavailable.  It is usually better to
stop the web application that relies on this database rather than letting
users continuously encounter database exceptions.</p>

<p>If this command succeeds, you will see a response like this:</p>
<source>OK - Started application at context path /examples</source>

<p>Otherwise, the response will start with <code>FAIL</code> and include an
error message.  Possible causes for problems include:</p>
<ul>
<li><em>Encountered exception</em>
    <p>An exception was encountered trying to start the web application.
    Check the Tomcat logs for the details.</p>
    </li>
<li><em>Invalid context path was specified</em>
    <p>The context path must start with a slash character. To reference the
    ROOT web application use "/".</p>
    </li>
<li><em>No context exists for path /foo</em>
    <p>There is no deployed application on the context path
    that you specified.</p>
    </li>
<li><em>No context path was specified</em>
    <p>
    The <code>path</code> parameter is required.
    </p></li>
</ul>

</subsection>

<subsection name="Stop an Existing Application">

<source>http://localhost:8080/manager/text/stop?path=/examples</source>

<p>Signal an existing application to make itself unavailable, but leave it
deployed.  Any request that comes in while an application is
stopped will see an HTTP error 404, and this application will show as
"stopped" on a list applications command.</p>

<p>If this command succeeds, you will see a response like this:</p>
<source>OK - Stopped application at context path /examples</source>

<p>Otherwise, the response will start with <code>FAIL</code> and include an
error message.  Possible causes for problems include:</p>
<ul>
<li><em>Encountered exception</em>
    <p>An exception was encountered trying to stop the web application.
    Check the Tomcat logs for the details.</p>
    </li>
<li><em>Invalid context path was specified</em>
    <p>The context path must start with a slash character. To reference the
    ROOT web application use "/".</p>
    </li>
<li><em>No context exists for path /foo</em>
    <p>There is no deployed application on the context path
    that you specified.</p>
    </li>
<li><em>No context path was specified</em>
    The <code>path</code> parameter is required.
    </li>
</ul>

</subsection>


<subsection name="Undeploy an Existing Application">

<source>http://localhost:8080/manager/text/undeploy?path=/examples</source>

<p><strong><span style="color: red;">WARNING</span> - This command will delete any web
application artifacts that exist within <code>appBase</code> directory
(typically "webapps") for this virtual host</strong>.
This will delete the the application .WAR, if present,
the application directory resulting either from a deploy in unpacked form
or from .WAR expansion as well as the XML Context definition from
<code>$CATALINA_BASE/conf/[enginename]/[hostname]/</code> directory.
If you simply want to take an application
out of service, you should use the <code>/stop</code> command instead.</p>

<p>Signal an existing application to gracefully shut itself down, and
remove it from Tomcat (which also makes this context path available for
reuse later).  In addition, the document root directory is removed, if it
exists in the <code>appBase</code> directory (typically "webapps") for
this virtual host.  This command is the logical opposite of the
<code>/deploy</code> command.</p>

<p>If this command succeeds, you will see a response like this:</p>
<source>OK - Undeployed application at context path /examples</source>

<p>Otherwise, the response will start with <code>FAIL</code> and include an
error message.  Possible causes for problems include:</p>
<ul>
<li><em>Encountered exception</em>
    <p>An exception was encountered trying to undeploy the web application.
    Check the Tomcat logs for the details.</p>
    </li>
<li><em>Invalid context path was specified</em>
    <p>The context path must start with a slash character. To reference the
    ROOT web application use "/".</p>
    </li>
<li><em>No context exists for path /foo</em>
    <p>There is no deployed application on the context path
    that you specified.</p>
    </li>
<li><em>No context path was specified</em>
    The <code>path</code> parameter is required.
    </li>
</ul>

</subsection>

<subsection name="Finding memory leaks">

<source>http://localhost:8080/manager/text/findleaks[?statusLine=[true|false]]</source>

<p><strong>The find leaks diagnostic triggers a full garbage collection. It
should be used with extreme caution on production systems.</strong></p>

<p>The find leaks diagnostic attempts to identify web applications that have
caused memory leaks when they were stopped, reloaded or undeployed. Results
should always be confirmed
with a profiler. The diagnostic uses additional functionality provided by the
StandardHost implementation. It will not work if a custom host is used that
does not extend StandardHost.</p>

<p>Explicitly triggering a full garbage collection from Java code is documented
to be unreliable. Furthermore, depending on the JVM used, there are options to
disable explicit GC triggering, like <code>-XX:+DisableExplicitGC</code>.
If you want to make sure, that the diagnostics were successfully running a full
GC, you will need to check using tools like GC logging, JConsole or similar.</p>

<p>If this command succeeds, you will see a response like this:</p>
<source>/leaking-webapp</source>

<p>If you wish to see a status line included in the response then include the
<code>statusLine</code> query parameter in the request with a value of
<code>true</code>.</p>

<p>Each context path for a web application that was stopped, reloaded or
undeployed, but which classes from the previous runs are still loaded in memory,
thus causing a memory leak, will be listed on a new line. If an application
has been reloaded several times, it may be listed several times.</p>

<p>If the command does not succeed, the response will start with
<code>FAIL</code> and include an error message.</p>

</subsection>

<subsection name="Connector SSL/TLS diagnostics">

<source>http://localhost:8080/manager/text/sslConnectorCiphers</source>

<p>The SSL Connector/Ciphers diagnostic lists the SSL/TLS ciphers that are currently
configured for each connector. For BIO and NIO, the names of the individual
cipher suites are listed. For APR, the value of SSLCipherSuite is returned.</p>

<p>The response will look something like this:</p>
<source>OK - Connector / SSL Cipher information
Connector[HTTP/1.1-8080]
  SSL is not enabled for this connector
Connector[HTTP/1.1-8443]
  TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA
  TLS_DHE_RSA_WITH_AES_128_CBC_SHA
  TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
  TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
  ...</source>

</subsection>

<subsection name="Thread Dump">

<source>http://localhost:8080/manager/text/threaddump</source>

<p>Write a JVM thread dump.</p>

<p>The response will look something like this:</p>
<source><![CDATA[OK - JVM thread dump
2014-12-08 07:24:40.080
Full thread dump Java HotSpot(TM) Client VM (25.25-b02 mixed mode):

"http-nio-8080-exec-2" Id=26 cpu=46800300 ns usr=46800300 ns blocked 0 for -1 ms waited 0 for -1 ms
   java.lang.Thread.State: RUNNABLE
        locks java.util.concurrent.ThreadPoolExecutor$Worker@1738ad4
        at sun.management.ThreadImpl.dumpThreads0(Native Method)
        at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:446)
        at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:440)
        at org.apache.tomcat.util.Diagnostics.getThreadDump(Diagnostics.java:409)
        at org.apache.catalina.manager.ManagerServlet.threadDump(ManagerServlet.java:557)
        at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:371)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
...
]]></source>

</subsection>

<subsection name="VM Info">

<source>http://localhost:8080/manager/text/vminfo</source>

<p>Write some diagnostic information about Java Virtual Machine.</p>

<p>The response will look something like this:</p>
<source><![CDATA[OK - VM info
2014-12-08 07:27:32.578
Runtime information:
  vmName: Java HotSpot(TM) Client VM
  vmVersion: 25.25-b02
  vmVendor: Oracle Corporation
  specName: Java Virtual Machine Specification
  specVersion: 1.8
  specVendor: Oracle Corporation
  managementSpecVersion: 1.2
  name: ...
  startTime: 1418012458849
  uptime: 393855
  isBootClassPathSupported: true

OS information:
...
]]></source>

</subsection>

<subsection name="Save Configuration">

<source>http://localhost:8080/manager/text/save</source>

<p>If specified without any parameters, this command saves the current
configuration of the server to server.xml. The existing file will be renamed as
a backup if required.</p>

<p>If specified with a <code>path</code> parameter that matches the path of
a deployed web application then the configuration for that web application will
be saved to an appropriately named context.xml file in the <code>xmlBase</code>
for the current Host.</p>

<p>To use the command a StoreConfig MBean must be present. Typically this is
configured using the <a
href="config/listeners.html#StoreConfig_Lifecycle_Listener_-_org.apache.catalina.storeconfig.StoreConfigLifecycleListener">StoreConfigLifecycleListener</a>.
</p>

<p>If the command does not succeed, the response will start with
<code>FAIL</code> and include an error message.</p>

</subsection>

</section>

<section name="Server Status">

<p>From the following links you can view Status information about the server.
Any one of <strong>manager-**</strong> roles allows access to this page.</p>

<source>http://localhost:8080/manager/status
http://localhost:8080/manager/status/all</source>

<p>Displays server status information in HTML format.</p>

<source>http://localhost:8080/manager/status?XML=true
http://localhost:8080/manager/status/all?XML=true</source>

<p>Displays server status information in XML format.</p>

<p>First, you have the server and JVM version number, JVM provider, OS name
and number followed by the architecture type.</p>

<p>Second, there is information about the memory usage of the JVM.</p>

<p>Then, there is information about the Tomcat AJP and HTTP connectors.
The same information is available for both of them :
</p>
<ul>
    <li><p>Threads information : Max threads, min and max spare threads,
    current thread count and current thread busy.</p></li>
    <li><p>Request information : Max processing time and processing time,
    request and error count, bytes received and sent.</p></li>
    <li><p>A table showing Stage, Time, Bytes Sent, Bytes Receive, Client,
    VHost and Request. All existing threads are listed in the table.
    Here is the list of the possible thread stages :</p>
    <ul>
        <li><p><em>"Parse and Prepare Request"</em> : The request headers are
        being parsed or the necessary preparation to read the request body (if
        a transfer encoding has been specified) is taking place.</p></li>
        <li><p><em>"Service"</em> : The thread is processing a request and
        generating the response. This stage follows the "Parse and Prepare
        Request" stage and precedes the "Finishing" stage. There is always at
        least one thread in this stage (the server-status page).</p></li>
        <li><p><em>"Finishing"</em> : The end of the request processing. Any
        remainder of the response still in the output buffers is sent to the
        client. This stage is followed by "Keep-Alive" if it is appropriate to
        keep the connection alive or "Ready" if "Keep-Alive" is not
        appropriate.</p></li>
        <li><p><em>"Keep-Alive"</em> : The thread keeps the connection open to
        the client in case the client sends another request. If another request
        is received, the next stage will be "Parse and Prepare Request". If no
        request is received before the keep alive times out, the connection will
        be closed and the next stage will be "Ready".</p></li>
        <li><p><em>"Ready"</em> : The thread is at rest and ready to be
        used.</p></li>
    </ul>
    </li>
</ul>

<p>If you are using <code>/status/all</code> command, additional information
on each of deployed web applications will be available.</p>

</section>

<section name="Using the JMX Proxy Servlet">

  <subsection name="What is JMX Proxy Servlet">
    The JMX Proxy Servlet is a lightweight proxy to get and set the
    tomcat internals. (Or any class that has been exposed via an MBean)
    Its usage is not very user friendly but the UI is
    extremely help for integrating command line scripts for monitoring
    and changing the internals of tomcat. You can do two things with the proxy:
    get information and set information. For you to really understand the
    JMX Proxy Servlet, you should have a general understanding of JMX.
    If you don't know what JMX is, then prepare to be confused.
  </subsection>

  <subsection name="JMX Query command">
    <p>This takes the form:</p>
<source>http://webserver/manager/jmxproxy/?qry=STUFF</source>
    <p>Where <code>STUFF</code> is the JMX query you wish to perform. For example,
    here are some queries you might wish to run:</p>
    <ul>
      <li>
        <code>qry=*%3Atype%3DRequestProcessor%2C* -->
         type=RequestProcessor</code> which will locate all
         workers which can process requests and report
         their state.
      </li>
      <li>
        <code>qry=*%3Aj2eeType=Servlet%2c* -->
            j2eeType=Servlet</code> which return all loaded servlets.
      </li>
      <li>
        <code>qry=Catalina%3Atype%3DEnvironment%2Cresourcetype%3DGlobal%2Cname%3DsimpleValue -->
            Catalina:type=Environment,resourcetype=Global,name=simpleValue</code>
            which look for a specific MBean by the given name.
      </li>
    </ul>
    <p>
    You'll need to experiment with this to really understand its capabilites.
    If you provide no <code>qry</code> parameter, then all of the MBeans will
    be displayed. We really recommend looking at the tomcat source code and
    understand the JMX spec to get a better understanding of all the queries
    you may run.
    </p>
  </subsection>

  <subsection name="JMX Get command">
  <p>
    The JXMProxyServlet also supports a "get" command that you can use to
    fetch the value of a specific MBean's attribute. The general form of
    the <code>get</code> command is:
  </p>

<source>http://webserver/manager/jmxproxy/?get=BEANNAME&amp;att=MYATTRIBUTE&amp;key=MYKEY</source>

    <p>You must provide the following parameters:</p>
    <ol>
      <li><code>get</code>: The full bean name</li>
      <li><code>att</code>: The attribute you wish to fetch</li>
      <li><code>key</code>: (optional) The key into a CompositeData MBean attribute</li>
    </ol>
    <p>
    If all goes well, then it will say OK, otherwise an error message will
    be shown. For example, let's say we wish to fetch the current heap memory
    data:
    </p>

<source>http://webserver/manager/jmxproxy/?get=java.lang:type=Memory&amp;att=HeapMemoryUsage</source>

    <p>Or, if you only want the "used" key:</p>

<source>http://webserver/manager/jmxproxy/
 ?get=java.lang:type=Memory&amp;att=HeapMemoryUsage&amp;key=used</source>
  </subsection>

  <subsection name="JMX Set command">
    <p>
    Now that you can query an MBean, its time to muck with Tomcat's internals!
    The general form of the set command is :
    </p>
<source>http://webserver/manager/jmxproxy/?set=BEANNAME&amp;att=MYATTRIBUTE&amp;val=NEWVALUE</source>
    <p>So you need to provide 3 request parameters:</p>
    <ol>
      <li><code>set</code>: The full bean name</li>
      <li><code>att</code>: The attribute you wish to alter</li>
      <li><code>val</code>: The new value </li>
    </ol>
    <p>
    If all goes ok, then it will say OK, otherwise an error message will be
    shown. For example, lets say we wish to turn up debugging on the fly for the
    <code>ErrorReportValve</code>. The following will set debugging to 10.
    </p>
<source>http://localhost:8080/manager/jmxproxy/
 ?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost
 &amp;att=debug&amp;val=10</source>
    <p>and my result is (YMMV):</p>
<source>Result: ok</source>

    <p>Here is what I see if I pass in a bad value. Here is the URL I used,
    I try set debugging equal to 'cow':</p>
<source>http://localhost:8080/manager/jmxproxy/
 ?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost
 &amp;att=debug&amp;val=cow</source>
    <p>When I try that, my result is</p>
<source>Error: java.lang.NumberFormatException: For input string: "cow"</source>
  </subsection>

  <subsection name="JMX Invoke command">
    <p>The <code>invoke</code> command enables methods to be called on MBeans. The
    general form of the command is:</p>
<source>http://webserver/manager/jmxproxy/
 ?invoke=BEANNAME&amp;op=METHODNAME&amp;ps=COMMASEPARATEDPARAMETERS</source>
    <p>For example, to call the <code>findConnectors()</code> method of the
    <strong>Service</strong> use:</p>
<source>http://localhost:8080/manager/jmxproxy/
 ?invoke=Catalina%3Atype%3DService&amp;op=findConnectors&amp;ps=</source>
  </subsection>
</section>

<section name="Executing Manager Commands With Ant">

<p>In addition to the ability to execute Manager commands via HTTP requests,
as documented above, Tomcat includes a convenient set of Task definitions
for the <em>Ant</em> (version 1.4 or later) build tool.  In order to use these
commands, you must perform the following setup operations:</p>
<ul>
<li>Download the binary distribution of Ant from
    <a href="http://ant.apache.org">http://ant.apache.org</a>.
    You must use version <strong>1.4</strong> or later.</li>
<li>Install the Ant distribution in a convenient directory (called
    ANT_HOME in the remainder of these instructions).</li>
<li>Copy the file <code>server/lib/catalina-ant.jar</code> from your Tomcat
    installation into Ant's library directory (<code>$ANT_HOME/lib</code>).
    </li>
<li>Add the <code>$ANT_HOME/bin</code> directory to your <code>PATH</code>
    environment variable.</li>
<li>Configure at least one username/password combination in your Tomcat
    user database that includes the <code>manager-script</code> role.</li>
</ul>

<p>To use custom tasks within Ant, you must declare them first with a
<code>&lt;taskdef&gt;</code> element.  Therefore, your <code>build.xml</code>
file might look something like this:</p>

<source><![CDATA[<project name="My Application" default="compile" basedir=".">

  <!-- Configure the directory into which the web application is built -->
  <property name="build"    value="${basedir}/build"/>

  <!-- Configure the context path for this application -->
  <property name="path"     value="/myapp"/>

  <!-- Configure properties to access the Manager application -->
  <property name="url"      value="http://localhost:8080/manager/text"/>
  <property name="username" value="myusername"/>
  <property name="password" value="mypassword"/>

  <!-- Configure the custom Ant tasks for the Manager application -->
  <taskdef name="list"      classname="org.apache.catalina.ant.ListTask"/>
  <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask"/>
  <taskdef name="start"     classname="org.apache.catalina.ant.StartTask"/>
  <taskdef name="reload"    classname="org.apache.catalina.ant.ReloadTask"/>
  <taskdef name="stop"      classname="org.apache.catalina.ant.StopTask"/>
  <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask"/>
  <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"/>
  <typedef name="sessions"  classname="org.apache.catalina.ant.SessionsTask"/>
  <taskdef name="findleaks" classname="org.apache.catalina.ant.FindLeaksTask"/>
  <typedef name="vminfo"    classname="org.apache.catalina.ant.VminfoTask"/>
  <typedef name="threaddump" classname="org.apache.catalina.ant.ThreaddumpTask"/>
  <typedef name="sslConnectorCiphers" classname="org.apache.catalina.ant.SslConnectorCiphersTask"/>

  <!-- Executable Targets -->
  <target name="compile" description="Compile web application">
    <!-- ... construct web application in ${build} subdirectory, and
            generated a ${path}.war ... -->
  </target>

  <target name="deploy" description="Install web application"
          depends="compile">
    <deploy url="${url}" username="${username}" password="${password}"
            path="${path}" war="file:${build}${path}.war"/>
  </target>

  <target name="reload" description="Reload web application"
          depends="compile">
    <reload  url="${url}" username="${username}" password="${password}"
            path="${path}"/>
  </target>

  <target name="undeploy" description="Remove web application">
    <undeploy url="${url}" username="${username}" password="${password}"
            path="${path}"/>
  </target>

</project>]]></source>

<p>Note: The definition of the resources task above will override the resources
datatype added in Ant 1.7. If you wish to use the resources datatype you will
need to use Ant's namespace support to assign the Tomcat tasks to their own
namespace.</p>

<p>Now, you can execute commands like <code>ant deploy</code> to deploy the
application to a running instance of Tomcat, or <code>ant reload</code> to
tell Tomcat to reload it.  Note also that most of the interesting values in
this <code>build.xml</code> file are defined as replaceable properties, so
you can override their values from the command line.  For example, you might
consider it a security risk to include the real manager password in your
<code>build.xml</code> file's source code.  To avoid this, omit the password
property, and specify it from the command line:</p>
<source>ant -Dpassword=secret deploy</source>

<subsection name="Tasks output capture">

<p>Using <em>Ant</em> version <strong>1.6.2</strong> or later,
the Catalina tasks offer the option to capture their output in
properties or external files. They support directly the following subset of the
<code>&lt;redirector&gt;</code> type attributes:
</p>

<table class="defaultTable">
<tr>
<th>Attribute</th>
<th>Description</th>
<th style="text-align: center;">Required</th>
</tr>
<tr>
<td>output</td>
<td>Name of a file to which to write the output. If
the error stream is not also redirected to a file or property, it will
appear in this output.</td>
<td style="text-align: center;">No</td>
</tr>
<tr>
<td>error</td>
<td>The file to which the standard error of the
command should be redirected.</td>
<td style="text-align: center;">No</td>
</tr>
<tr>
<td>logError</td>
<td>This attribute is used when you wish to see
error output in Ant's log and you are redirecting output to a
file/property. The error output will not be included in the output
file/property. If you redirect error with the <i>error</i> or <i>errorProperty</i>
attributes, this will have no effect.</td>
<td style="text-align: center;">No</td>
</tr>
<tr>
<td>append</td>
<td>Whether output and error files should be
appended to or overwritten. Defaults to <code>false</code>.</td>
<td style="text-align: center;">No</td>
</tr>
<tr>
<td>createemptyfiles</td>
<td>Whether output and error files should be created
even when empty. Defaults to <code>true</code>.</td>
<td style="text-align: center;">No</td>
</tr>
<tr>
<td>outputproperty</td>
<td>The name of a property in which the output of
the command should be stored. Unless the error stream is redirected to
a separate file or stream, this property will include the error output.</td>
<td style="text-align: center;">No</td>
</tr>
<tr>
<td>errorproperty</td>
<td>The name of a property in which the standard
error of the command should be stored.</td>
<td style="text-align: center;">No</td>
</tr>
</table>

<p>A couple of additional attributes can also be specified:
</p>
<table class="defaultTable">
<tr>
<th>Attribute</th>
<th>Description</th>
<th style="text-align: center;">Required</th>
</tr>
<tr>
<td>alwaysLog</td>
<td>This attribute is used when you wish to see the
output you are capturing, appearing also in the Ant's log. It must not be
used unless you are capturing task output.
Defaults to <code>false</code>.
<em>This attribute will be supported directly by <code>&lt;redirector&gt;</code>
in Ant 1.6.3</em></td>
<td style="text-align: center;">No</td>
</tr>
<tr>
<td>failonerror</td>
<td>This attribute is used when you wish to avoid that
any manager command processing error terminates the ant execution. Defaults to <code>true</code>.
It must be set to <code>false</code>, if you want to capture error output,
otherwise execution will terminate before anything can be captured.
<br/>
This attribute acts only on manager command execution,
any wrong or missing command attribute will still cause Ant execution termination.
</td>
<td style="text-align: center;">No</td>
</tr>
</table>

<p>They also support the embedded <code>&lt;redirector&gt;</code> element
in which you can specify
its full set of attributes, but <code>input</code>, <code>inputstring</code> and
<code>inputencoding</code> that, even if accepted, are not used because they have
no meaning in this context.
Refer to <a href="http://ant.apache.org">ant manual</a> for details on
<code>&lt;redirector&gt;</code> element attributes.
</p>

<p>
Here is a sample build file extract that shows how this output redirection support
can be used:
</p>

<source><![CDATA[    <target name="manager.deploy"
        depends="context.status"
        if="context.notInstalled">
        <deploy url="${mgr.url}"
            username="${mgr.username}"
            password="${mgr.password}"
            path="${mgr.context.path}"
            config="${mgr.context.descriptor}"/>
    </target>

    <target name="manager.deploy.war"
        depends="context.status"
        if="context.deployable">
        <deploy url="${mgr.url}"
            username="${mgr.username}"
            password="${mgr.password}"
            update="${mgr.update}"
            path="${mgr.context.path}"
            war="${mgr.war.file}"/>
    </target>

    <target name="context.status">
        <property name="running" value="${mgr.context.path}:running"/>
        <property name="stopped" value="${mgr.context.path}:stopped"/>

        <list url="${mgr.url}"
            outputproperty="ctx.status"
            username="${mgr.username}"
            password="${mgr.password}">
        </list>

        <condition property="context.running">
            <contains string="${ctx.status}" substring="${running}"/>
        </condition>
        <condition property="context.stopped">
            <contains string="${ctx.status}" substring="${stopped}"/>
        </condition>
        <condition property="context.notInstalled">
            <and>
                <isfalse value="${context.running}"/>
                <isfalse value="${context.stopped}"/>
            </and>
        </condition>
        <condition property="context.deployable">
            <or>
                <istrue value="${context.notInstalled}"/>
                <and>
                    <istrue value="${context.running}"/>
                    <istrue value="${mgr.update}"/>
                </and>
                <and>
                    <istrue value="${context.stopped}"/>
                    <istrue value="${mgr.update}"/>
                </and>
            </or>
        </condition>
        <condition property="context.undeployable">
            <or>
                <istrue value="${context.running}"/>
                <istrue value="${context.stopped}"/>
            </or>
        </condition>
    </target>]]></source>

<p><strong>WARNING:</strong> even if it doesn't make many sense, and is always a bad idea,
calling a Catalina task more than once,
badly set Ant tasks depends chains may cause that a task be called
more than once in the same Ant run, even if not intended to. A bit of caution should be exercised when you are
capturing output from that task, because this could lead to something unexpected:</p>
<ul>
<li>when capturing in a property you will find in it only the output from the <em>first</em> call, because
Ant properties are immutable and once set they cannot be changed,
</li>
<li>when capturing in a file, each run will overwrite it and you will find in it only the <em>last</em> call
output, unless you are using the <code>append="true"</code> attribute, in which case you will
see the output of each task call appended to the file.
</li>
</ul>

</subsection>

</section>


</body>

</document>
