<?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="processes.html">

  &project;

  <properties>
    <author email="craigmcc@apache.org">Craig R. McClanahan</author>
    <title>Development Processes</title>
  </properties>

<body>

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

<section name="Development Processes">

<p>Although application development can take many forms, this manual proposes
a fairly generic process for creating web applications using Tomcat.  The
following sections highlight the commands and tasks that you, as the developer
of the code, will perform.  The same basic approach works when you have
multiple programmers involved, as long as you have an appropriate source code
control system and internal team rules about who is working on what parts
of the application at any given time.</p>

<p>The task descriptions below assume that you will be using CVS for source
code control, and that you have already configured access to the appropriate
CVS repository.  Instructions for doing this are beyond the scope of this
manual.  If you are using a different source code control environment, you
will need to figure out the corresponding commands for your system.</p>


<subsection name="One-Time Setup of Ant and Tomcat for Development">

<p>In order to take advantage of the special Ant tasks that interact with the
<em>Manager</em> web application, you need to perform the following tasks
once (no matter how many web applications you plan to develop).</p>
<ul>
<li><p><em>Configure the Ant custom tasks</em>.  The implementation code for the
    Ant custom tasks is in a JAR file named
    <code>$CATALINA_HOME/lib/catalina-ant.jar</code>, which must be
    copied in to the <code>lib</code> directory of your Ant installation.
    </p></li>
<li><p><em>Define one or more Tomcat users</em>.  The <em>Manager</em> web
    application runs under a security constraint that requires a user to be
    logged in, and have the security role <code>manager-script</code> assigned
    to him or her.  How such users are defined depends on which Realm you have
    configured in Tomcat's <code>conf/server.xml</code> file -- see the
    <a href="../realm-howto.html">Realm Configuration HOW-TO</a> for more
    information.  You may define any number of users (with any username
    and password that you like) with the <code>manager-script</code> role.
    </p></li>
</ul>

</subsection>


<subsection name="Create Project Source Code Directory">

<p>The first step is to create a new project source directory, and customize
the <code>build.xml</code> and <code>build.properties</code> files you will
be using.  The directory structure is described in <a href="source.html">the
previous section</a>, or you can use the
<a href="sample/">sample application</a> as a starting point.</p>

<p>Create your project source directory, and define it within your CVS
repository.  This might be done by a series of commands like this, where
<code>{project}</code> is the name under which your project should be
stored in the CVS repository, and {username} is your login username:</p>
<source><![CDATA[cd {my home directory}
mkdir myapp <-- Assumed "project source directory"
cd myapp
mkdir docs
mkdir src
mkdir web
mkdir web/WEB-INF
cvs import -m "Initial Project Creation" {project} \
    {username} start]]></source>

<p>Now, to verify that it was created correctly in CVS, we will perform a
checkout of the new project:</p>
<source><![CDATA[cd ..
mv myapp myapp.bu
cvs checkout {project}]]></source>

<p>Next, you will need to create and check in an initial version of the
<code>build.xml</code> script to be used for development.  For getting
started quickly and easily, base your <code>build.xml</code> on the
<a href="build.xml.txt">basic build.xml file</a>, included with this manual,
or code it from scratch.</p>
<source><![CDATA[cd {my home directory}
cd myapp
emacs build.xml     <-- if you want a real editor :-)
cvs add build.xml
cvs commit]]></source>

<p>Until you perform the CVS commit, your changes are local to your own
development directory.  Committing makes those changes visible to other
developers on your team that are sharing the same CVS repository.</p>

<p>The next step is to customize the Ant <em>properties</em> that are
named in the <code>build.xml</code> script.  This is done by creating a
file named <code>build.properties</code> in your project's top-level
directory.  The supported properties are listed in the comments inside
the sample <code>build.xml</code> script.  At a minimum, you will generally
need to define the <code>catalina.home</code> property defining where
Tomcat is installed, and the manager application username and password.
You might end up with something like this:</p>
<source><![CDATA[# Context path to install this application on
app.path=/hello

# Tomcat installation directory
catalina.home=/usr/local/apache-tomcat-<version-major-minor/>

# Manager webapp username and password
manager.username=myusername
manager.password=mypassword]]></source>

<p>In general, you will <strong>not</strong> want to check the
<code>build.properties</code> file in to the CVS repository, because it
is unique to each developer's environment.</p>

<p>Now, create the initial version of the web application deployment
descriptor.  You can base <code>web.xml</code> on the
<a href="web.xml.txt">basic web.xml file</a>, or code it from scratch.</p>
<source><![CDATA[cd {my home directory}
cd myapp/web/WEB-INF
emacs web.xml
cvs add web.xml
cvs commit]]></source>

Note that this is only an example web.xml file.  The full definition
of the deployment descriptor file is in the
<a href="https://wiki.apache.org/tomcat/Specifications">Servlet Specification.</a>

</subsection>


<subsection name="Edit Source Code and Pages">

<p>The edit/build/test tasks will generally be your most common activities
during development and maintenance.  The following general principles apply.
As described in <a href="source.html">Source Organization</a>, newly created
source files should be located in the appropriate subdirectory, under your
project source directory.</p>

<p>Whenever you wish to refresh your development directory to reflect the
work performed by other developers, you will ask CVS to do it for you:</p>
<source><![CDATA[cd {my home directory}
cd myapp
cvs update -dP]]></source>

<p>To create a new file, go to the appropriate directory, create the file,
and register it with CVS.  When you are satisfied with it's contents (after
building and testing is successful), commit the new file to the repository.
For example, to create a new JSP page:</p>
<source><![CDATA[cd {my home directory}
cd myapp/web        <-- Ultimate destination is document root
emacs mypage.jsp
cvs add mypage.jsp
... build and test the application ...
cvs commit]]></source>

<p>Java source code that is defined in packages must be organized in a
directory hierarchy (under the <strong>src/</strong> subdirectory) that
matches the package names.  For example, a Java class named
<code>com.mycompany.mypackage.MyClass.java</code> should be stored in file
<code>src/com/mycompany/mypackage/MyClass.java</code>.
Whenever you create a new subdirectory, don't forget to
register it with CVS.</p>

<p>To edit an existing source file, you will generally just start editing
and testing, then commit the changed file when everything works.  Although
CVS can be configured to required you to "check out" or "lock" a file you
are going to be modifying, this is generally not used.</p>

</subsection>


<subsection name="Build the Web Application">

<p>When you are ready to compile the application, issue the following
commands (generally, you will want a shell window open that is set to
the project source directory, so that only the last command is needed):</p>
<source><![CDATA[cd {my home directory}
cd myapp        <-- Normally leave a window open here
ant]]></source>

<p>The Ant tool will be execute the default "compile" target in your
<code>build.xml</code> file, which will compile any new or updated Java
code.  If this is the first time you compile after a "build clean",
it will cause everything to be recompiled.</p>

<p>To force the recompilation of your entire application, do this instead:</p>
<source><![CDATA[cd {my home directory}
cd myapp
ant all]]></source>

<p>This is a very good habit immediately before checking in changes, to
make sure that you have not introduced any subtle problems that Javac's
conditional checking did not catch.</p>

</subsection>


<subsection name="Test Your Web Application">

<p>To test your application, you will want to install it under Tomcat.  The
quickest way to do that is to use the custom Ant tasks that are included in
the sample <code>build.xml</code> script.  Using these commands might follow
a pattern like this:</p>
<ul>
<li><p><em>Start Tomcat if needed</em>.  If Tomcat is not already running,
    you will need to start it in the usual way.
    </p></li>
<li><p><em>Compile your application</em>.  Use the <code>ant compile</code>
    command (or just <code>ant</code>, since this is the default).  Make
    sure that there are no compilation errors.
    </p></li>
<li><p><em>Install the application</em>.  Use the <code>ant install</code>
    command.  This tells Tomcat to immediately start running your app on
    the context path defined in the <code>app.path</code> build property.
    Tomcat does <strong>NOT</strong> have to be restarted for this to
    take effect.
    </p></li>
<li><p><em>Test the application</em>.  Using your browser or other testing
    tools, test the functionality of your application.
    </p></li>
<li><p><em>Modify and rebuild as needed</em>.  As you discover that changes
    are required, make those changes in the original <strong>source</strong>
    files, not in the output build directory, and re-issue the
    <code>ant compile</code> command.  This ensures that your changes will
    be available to be saved (via <code>cvs commit</code>) later on --
    the output build directory is deleted and recreated as necessary.
    </p></li>
<li><p><em>Reload the application</em>.  Tomcat will recognize changes in
    JSP pages automatically, but it will continue to use the old versions
    of any servlet or JavaBean classes until the application is reloaded.
    You can trigger this by executing the <code>ant reload</code> command.
    </p></li>
<li><p><em>Remove the application when you are done</em>.  When you are through
    working on this application, you can remove it from live execution by
    running the <code>ant remove</code> command.
    </p></li>
</ul>

<p>Do not forget to commit your changes to the source code repository when
you have completed your testing!</p>

</subsection>


<subsection name="Creating a Release">

<p>When you are through adding new functionality, and you've tested everything
(you DO test, don't you :-), it is time to create the distributable version
of your web application that can be deployed on the production server.  The
following general steps are required:</p>
<ul>
<li><p>Issue the command <code>ant all</code> from the project source
    directory, to rebuild everything from scratch one last time.
    </p></li>
<li><p>Use the <code>cvs tag</code> command to create an identifier for
    all of the source files utilized to create this release.  This allows
    you to reliably reconstruct a release (from sources) at a later
    time.
    </p></li>
<li><p>Issue the command <code>ant dist</code> to create a distributable
    web application archive (WAR) file, as well as a JAR file containing
    the corresponding source code.
    </p></li>
<li><p>Package the contents of the <code>dist</code> directory using the
    <strong>tar</strong> or <strong>zip</strong> utility, according to
    the standard release procedures used by your organization.
    </p></li>
</ul>

</subsection>


</section>

</body>
</document>
