<?xml version="1.0"?>
<!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="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><em>Configure the Ant custom tasks</em>.  The implementation code for the
    Ant custom tasks is in a JAR file named
    <code>$CATALINA_HOME/server/lib/catalina-ant.jar</code>, which must be
    copied in to the <code>lib</code> directory of your Ant installation.
    <br/><br/></li>
<li><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</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</code> role.
    <br/><br/></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>
cd {my home directory}
mkdir myapp	&lt;-- 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>
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>
cd {my home directory}
cd myapp
emacs build.xml		&lt;-- 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 5 is installed, and the manager application username and password.
You might end up with something like this:</p>
<source>
# Context path to install this application on
app.path=/hello

# Tomcat 5 installation directory
catalina.home=/usr/local/apache-tomcat-5.5

# 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>
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="http://java.sun.com/products/servlet">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>
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>
cd {my home directory}
cd myapp/web		&lt;-- 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>
cd {my home directory}
cd myapp		&lt;-- 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>
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><em>Start Tomcat 5 if needed</em>.  If Tomcat 5 is not already running,
    you will need to start it in the usual way.
    <br/><br/></li>
<li><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.
    <br/><br/></li>
<li><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.<br/><br/></li>
<li><em>Test the application</em>.  Using your browser or other testing
    tools, test the functionality of your application.
    <br/><br/></li>
<li><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.
    <br/><br/></li>
<li><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.
    <br/><br/></li>
<li><em>Remove the application when you re 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.</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>Issue the command <code>ant all</code> from the project source
    directory, to rebuild everything from scratch one last time.
    <br/><br/></li>
<li>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.</li>
<li>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.
    <br/><br/></li>
<li>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.</li>
</ul>

</subsection>


</section>

</body>
</document>
