1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463
|
<html><head><META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Tomcat Connector - Domino HowTo</title><meta value="Andy Armstrong" name="author"><meta value="andy@tagish.com" name="email"><meta value="Henri Gomez" name="author"><meta value="hgomez@apache.org" name="email"><link rel="stylesheet" type="text/css" href="../../style.css"></head><body vlink="#525D76" alink="#525D76" link="#525D76" text="#000000" bgcolor="#ffffff"><table cellspacing="4" width="100%" border="0"><!--PAGE HEADER--><tr><td colspan="2"><!--TOMCAT LOGO--><a href="http://tomcat.apache.org/"><img border="0" alt="Apache Tomcat" align="left" src="../../images/tomcat.gif"></a><!--APACHE LOGO--><a href="http://www.apache.org/"><img border="0" alt="Apache Logo" align="right" src="http://www.apache.org/images/asf-logo.gif"></a></td></tr><!--HEADER SEPARATOR--><tr><td colspan="2"><hr size="1" noshade="noshade"></td></tr><tr><!--RIGHT SIDE MAIN BODY--><td align="left" valign="top" width="80%"><table cellspacing="4" width="100%" border="0"><tr><td valign="top" align="left"><h1>Tomcat Connector</h1><h2>Domino HowTo</h2></td><td nowrap="true" valign="top" align="right"><img border="0" hspace="0" vspace="0" height="1" width="1" src="../../images/void.gif"></td></tr></table><table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#525D76"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Introduction"><strong>Introduction</strong></a></font></td></tr><tr><td><blockquote>
<p>
This document explains how to set up Domino to cooperate with Tomcat.
</p>
<p>
It is recommended that you also read the <a href="workers.html">Workers HowTo</a> document
to learn how to setup the working entities between your WebServer and Tomcat Engines.
</p>
<p>
Recent versions of the Lotus Domino web server have had the ability to host Java servlets,
but at the time of writing the Domino servlet container uses JDK 1.2.2 and it is not (apparently)
possible to replace this with JDK 1.3.
</p>
<p>
That means if you want to use JAAS or any other API
that is JDK 1.3 only in your servlets you're stuck.
</p>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Document Conventions and Assumptions"><strong>Document Conventions and Assumptions</strong></a></font></td></tr><tr><td><blockquote>
<p>
${tomcat_home} is the root directory of tomcat.
Your Tomcat installation should have the following subdirectories:
<ul>
<li>
${tomcat_home}\conf - Where you can place various configuration files
</li>
<li>
${tomcat_home}\webapps - Containing example applications
</li>
<li>
${tomcat_home}\bin - Where you place web server plugins
</li>
</ul>
</p>
<p>
In all the examples in this document ${tomcat_home} will be <b>c:\tomcat</b>.
A worker is defined to be a tomcat process that accepts work from the Domino server.
</p>
</blockquote></td></tr></table>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Supported Configuration"><strong>Supported Configuration</strong></a></font></td></tr><tr><td><blockquote>
<p>
The Domino Tomcat redirector was developed and tested on:
<ul>
<li>
WinNT4.0-i386 SP6a (it should be able to work on other versions of the NT service pack.) and Win2K Professional
</li>
<li>
RedHat Linux 7
</li>
<li>
Lotus Domino 5.0.6a
</li>
<li>
Tomcat 3.2.x, Tomcat 3.3.x, Tomcat 4.0.x, Tomcat 4.1.x and Tomcat 5
</li>
</ul>
</p>
<p>
The redirector uses <b>ajp12</b> and <b>ajp13</b> to send requests to the Tomcat containers.
It probably also works with Tomcat in process, but that hasn't been tested.
</p>
</blockquote></td></tr></table>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Who support ajp protocols ?"><strong>Who support ajp protocols ?</strong></a></font></td></tr><tr><td><blockquote>
<p>
The ajp12 protocol is only available in Tomcat 3.2.x and 3.3.x.
</p>
<p>
The <b>ajp12</b> has been <b>deprecated</b> with Tomcat 3.3.x and you should use instead
<b>ajp13</b> which is the only ajp protocol known by Tomcat 4.0.x, 4.1.x and 5.
</p>
<p>
Of course Tomcat 3.2.x and 3.3.x also support ajp13 protocol.
</p>
<p>
Others servlet engines such as <b>jetty</b> have support for ajp13 protocol
</p>
</blockquote></td></tr></table>
</blockquote></td></tr></table><table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#525D76"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Installation on Windows"><strong>Installation on Windows</strong></a></font></td></tr><tr><td><blockquote>
<p>
The Tomcat redirector requires 3 entities:
</p>
<ul>
<li>
tomcat_redirect.dll - The Domino plugin; either obtain a pre-built DLL or build it yourself
(see the build section).
</li>
<li>
workers.properties - A file that describes the host(s) and port(s) used by the workers (Tomcat processes).
A sample workers.properties can be found under the conf directory.
</li>
<li>
tomcat_redirector.reg - Registry entries
</li>
</ul>
<p>
We'll assume that tomcat redirector is placed in <b>c:\jk\lib\tomcat_redirector.dll</b>,
the properties file is in<b>c:\jk\conf</b>
and you created a log directory <b>c:\jk\logs</b>
</p>
<p>
Copy the file <b>tomcat_redirector.dll</b> to the Domino program directory
(this is the directory, which may be called something like <b>c:\Lotus\Domino</b>, that contains a file called
<b>nlnotes.exe</b>).
</p>
<p class="screen"><div align="left"><table bgcolor="#000000" cellpadding="2" cellspacing="0" border="1" width="80%"><tr><td align="left" bgcolor="#000000"><div class="screen">Copy redirector dll to Domino program directory</div><code><nobr><em class="screen">c:\></em><b class="screen">copy c:\jk\lib\tomcat_redirector.dll c:\Lotus\Domino</b></nobr></code><br></td></tr></table></div></p>
<p>
Shortly we will tell Domino where to find this file, but before we do that we need to make some registry entries.
The simplest way is to edit the supplied file <b>tomcat_redirector.reg</b>, which initially will look like this :
</p>
<div class="example"><pre>
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Jakarta Dsapi Redirector\1.0]
"log_file"="c:\\jk\\logs\\domino.log"
"log_level"="debug"
"worker_file"="c:\\jk\\conf\\workers.properties"
"worker_mount_file"="c:\\jk\\conf\\uriworkermap.properties"
"tomcat_start"="c:\\tomcat\\bin\\tomcat.bat start"
"tomcat_stop"="c:\\tomcat\\bin\\tomcat.bat stop"
</pre></div>
<p>
Edit this file to reflect the location where Tomcat has been installed, i.e. replace the instances
of <b>c:\\tomcat</b> and <b>c:\\jk</b> with the appropriate path remembering to <b>retain the double backslashes</b>.
</p>
<p>
Once you've made the necessary changes save this file and double click on it to enter it into the registry.
</p>
<p>
Note that the files referred to by the worker_file and worker_mount_file keys need to exist and contain sane values.
Default Tomcat installations will have these files. Note also that recent versions of Tomcat write a file called uriworkermap.properties-auto when they start up that can be renamed uriworkermap.properties to obtain default behaviour.
</p>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Note for Windows 2000 users"><strong>Note for Windows 2000 users</strong></a></font></td></tr><tr><td><blockquote>
<p>
For some reason Windows 2000 seems to have a problem resolving the references to localhost
in the default workers.properties.
</p>
<p>
The easiest solution is to replace 'localhost' with '127.0.0.1' everywhere it appears.
</p>
</blockquote></td></tr></table>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Automatically Starting Tomcat"><strong>Automatically Starting Tomcat</strong></a></font></td></tr><tr><td><blockquote>
<p>
The last two registry entries above provide commands that the redirector DLL will use to
start and stop Tomcat when the Domino http server starts and stops respectively.
</p>
<p>
If you don't require this behaviour these two lines can be omitted
(or deleted if you've already placed them in the registry).
</p>
</blockquote></td></tr></table>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Configuring Domino"><strong>Configuring Domino</strong></a></font></td></tr><tr><td><blockquote>
<p>
Finally we need to configure Domino to use the DSAPI extension DLL.
For those who are unfamiliar with Domino server configuration most of a server's configurable behavior
is dictated by a document called the "server document" in a database called the
<b>"Public Name and Address Book"</b> or <b>"NAB"</b> for short
</p>
<p>
(N.B. Lotus have renamed the NAB to "Domino Directory" from Domino 5 onwards).
Each Domino server will have a NAB (called names.nsf) and each NAB will have a number of server documents
including one for the current server.
</p>
<p>
If you have not previously configured a Domino server you may need to refer to the supplied documentation,
or you may need to pass this document to your tame Domino administrator.
</p>
<p>
Assuming you know your way around a Domino server document what we're going to do is actually quite simple.
Open the server document for this server, place it in Edit mode, then locate the DSAPIsection and the 'DSAPI filter file names' field on the Internet Protocols tab, HTTP sub-tab. Add "tomcat_redirector.dll" to the DSAPI field, then save and close the document.
</p>
</blockquote></td></tr></table>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Restart Domino"><strong>Restart Domino</strong></a></font></td></tr><tr><td><blockquote>
<p>
In order to get these settings to take effect and make sure that you haven't disrupted anything
else you should now restart the Domino server.
</p>
<p>If the server is running as a service and you have changed any relevant system variables
(JAVA_HOME, TOMCAT_HOME, CLASSPATH) since the last time you restarted the computer you should
do a complete restart now because updates to system variables are not seen by services until after a reboot.
</p>
<p>
If all goes well you should see something like this on the server console when the web server starts up :
</p>
<p class="screen"><div align="left"><table bgcolor="#000000" cellpadding="2" cellspacing="0" border="1" width="80%"><tr><td align="left" bgcolor="#000000"><code class="screen"><nobr>29/05/2001 18:54:13 JVM: Java Virtual Machine initialized.</nobr></code><br><code class="screen"><nobr>29/05/2001 18:54:14 Attempting to start Tomcat: c:\tomcat\bin\tomcat.bat start</nobr></code><br><code class="screen"><nobr>Including all jars in c:\tomcat\lib in your CLASSPATH.</nobr></code><br><code class="screen"><nobr></nobr></code><br><code class="screen"><nobr>Using CLASSPATH: c:\tomcat\classes;c:\tomcat\lib\ant.jar;c:\tomcat\lib\servlet.jar</nobr></code><br><code class="screen"><nobr></nobr></code><br><code class="screen"><nobr>Starting Tomcat in new window</nobr></code><br><code class="screen"><nobr>29/05/2001 18:54:15 Apache Tomcat Interceptor (Jakarta/DSAPI/1.0) loaded</nobr></code><br><code class="screen"><nobr>29/05/2001 18:54:16 HTTP Web Server started</nobr></code><br></td></tr></table></div></p>
<p>
At about the same time Tomcat should open in a new window (assuming you enabled the autostart option in the registry settings).
</p>
<p>
You should now be able to visit a URL that is handled by Tomcat.
Something like may be available, depending on how Tomcat is configured :
</p>
<div class="example"><pre>
http://name of server/servlet/SnoopServlet
</pre></div>
<p>
If that all works you're done ;-)
</p>
</blockquote></td></tr></table>
</blockquote></td></tr></table><table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#525D76"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Installation on Linux"><strong>Installation on Linux</strong></a></font></td></tr><tr><td><blockquote>
<p>
The Tomcat redirector requires 3 entities:
</p>
<ul>
<li>
libtomcat.so - The Domino plugin; either obtain a pre-built shared lib or build it yourself
(see the build section).
</li>
<li>
workers.properties - A file that describes the host(s) and port(s) used by the workers (Tomcat processes).
A sample workers.properties can be found under the conf directory.
</li>
<li>
libtomcat.ini - configuration entries
</li>
</ul>
<p>
Copy the file <b>libtomcat.so</b> to the Domino program directory which may be called
something like <b>/opt/lotus/notes/5601/linux</b>, it should contains a file called <b>libnotes.so</b>
and copy <b>libtomcat.ini</b> to the Domino data directory.
</p>
<p class="screen"><div align="left"><table bgcolor="#000000" cellpadding="2" cellspacing="0" border="1" width="80%"><tr><td align="left" bgcolor="#000000"><div class="screen">Copy redirector shared lib to Domino program directory</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cp c:\jk\lib\libtomcat.so /opt/lotus/notes/5601/linux</b></nobr></code><br><div class="screen">Copy config to Domino data directory</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">cp c:\jk\conf\libtomcat.ini /opt/datalotus</b></nobr></code><br></td></tr></table></div></p>
<p>
Note that if you're building the redirector from source these files should already
have been copied to the appropriate locations.
</p>
<p>
Before using the redirector you may like to review the settings in <b>libtomcat.ini</b> which,
by default, will look something like this:
</p>
<div class="example"><pre>
log_file=/var/log/domino.log
log_level=debug
worker_file=/var/tomcat3/conf/workers.properties
worker_mount_file=/var/tomcat3/conf/uriworkermap.properties
tomcat_start=/var/tomcat3/bin/tomcat.sh start
tomcat_stop=/var/tomcat3/bin/tomcat.sh stop
</pre></div>
<p>
If you're building the redirector from the source you may not need to make any changes,
otherwise you may have to edit this file to reflect the location where Tomcat has been installed,
i.e. replace the instances of /usr/local/apache/tomcat with the appropriate path.
</p>
<p>
Note that the files referred to by the <b>worker_file</b> and <b>worker_mount_file</b> keys need to exist
and contain sane values.
</p>
<p>
Default Tomcat installations will have these files.
Note also that recent versions of Tomcat write a file called <b>uriworkermap.properties-auto</b>
when they start up that can be renamed <b>uriworkermap.properties</b> to obtain default behaviour.
</p>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Automatically Starting Tomcat"><strong>Automatically Starting Tomcat</strong></a></font></td></tr><tr><td><blockquote>
<p>
The last two registry entries above provide commands that the redirector will use to start and stop
Tomcat when the Domino http server starts and stops respectively.
</p>
<p>
If you don't require this behaviour these two lines can be deleted.
</p>
</blockquote></td></tr></table>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Configuring Domino"><strong>Configuring Domino</strong></a></font></td></tr><tr><td><blockquote>
<p>
Finally we need to configure Domino to use the DSAPI extension.
</p>
<p>
For those who are unfamiliar with Domino server configuration most of a server's
configurable behavior is dictated by a document called the "server document" in a database called the
<b>"Public Name and Address Book"</b> or <b>"NAB"</b> for short
</p>
<p>
N.B. Lotus have renamed the NAB to "Domino Directory" from Domino 5 onwards).
</p>
<p>
Each Domino server will have a NAB (called names.nsf) and each NAB will have a number of server documents
including one for the current server.
If you have not previously configured a Domino server you may need to refer to the supplied documentation,
or you may need to pass this document to your tame Domino administrator.
</p>
<p>
Assuming you know your way around a Domino server document what we're going to do is actually quite simple.
</p>
<p>
Open the server document for this server, place it in Edit mode, then locate the
<b>DSAPIsection</b> and the <b>'DSAPI filter file names'</b> field on the Internet Protocols tab,
HTTP sub-tab.
</p>
<p>
Add <b>"libtomcat.so"</b> to the DSAPI field, then save and close the document.
</p>
</blockquote></td></tr></table>
<table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#828DA6"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Restart Domino"><strong>Restart Domino</strong></a></font></td></tr><tr><td><blockquote>
<p>
In order to get these settings to take effect and make sure that you haven't
disrupted anything else you should now restart the Domino HTTP server.
</p>
<p>
At the Domino console type
</p>
<p class="screen"><div align="left"><table bgcolor="#000000" cellpadding="2" cellspacing="0" border="1" width="80%"><tr><td align="left" bgcolor="#000000"><code class="screen"><nobr>> tell http quit</nobr></code><br><code class="screen"><nobr>> load http</nobr></code><br></td></tr></table></div></p>
<p>
You should see the HTTP server reload along with messages that will confirm that the redirector
has loaded and that Tomcat has (if you used Tomcat autostart) started.
</p>
<p>
You should now be able to visit a URL that is handled by Tomcat. Something like
</p>
<div class="example"><pre>
http://name of server/servlet/SnoopServlet
</pre></div>
may be available, depending on how Tomcat is configured.
</blockquote></td></tr></table>
</blockquote></td></tr></table><table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#525D76"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Building for Windows"><strong>Building for Windows</strong></a></font></td></tr><tr><td><blockquote>
<p>
To compile it you'll need the JK Domino sources and Microsoft Visual C++ 6.0.
</p>
<p>
You will probably also want the Lotus Notes C API version 5.0.7 or later.
You can build the DLL without the C API, in which case you'll need to define the macro NO_CAPI in config.h.
If you do this Domino logging from the DLL will be disabled.
</p>
<ul>
<li>
Change directory to the domino plugin source directory.
</li>
<li>
Edit <b>dsapi.dsp</b> and update the include and library path to reflect your own Domino server installation
(search for a <b>/I compiler</b> option and <b>/libpath</b> linker option)
</li>
<li>
Make the source with MSDEV
</li>
</ul>
<p class="screen"><div align="left"><table bgcolor="#000000" cellpadding="2" cellspacing="0" border="1" width="80%"><tr><td align="left" bgcolor="#000000"><div class="screen">Change directory to the dsapi plugins source directory</div><code><nobr><em class="screen">c:\></em><b class="screen">cd c:\home\apache\jk\domino</b></nobr></code><br><div class="screen">Build the sources using MSDEV</div><code><nobr><em class="screen">c:\></em><b class="screen">MSDEV dsapi.dsp /MAKE ALL</b></nobr></code><br></td></tr></table></div></p>
</blockquote></td></tr></table><table width="100%" cellpadding="2" cellspacing="0" border="0"><tr><td bgcolor="#525D76"><font face="arial,helvetica.sanserif" color="#ffffff"><a name="Building for Linux"><strong>Building for Linux</strong></a></font></td></tr><tr><td><blockquote>
<p>
You will probably also want the Lotus Notes C API version 5.0.3 for Unix or later.
</p>
<p>
You can build the redirector without the C API, in which case you'll need to define the macro NO_CAPI in config.h.
If you do this, Domino logging from the redirector will be disabled.
</p>
<ul>
<li>
Change directory to the Domino plugin source directory.
</li>
<li>
Edit <b>Makefile</b> and update the include and library path to reflect your own Domino server installation
</li>
</ul>
<div class="example"><pre>
edit the Makefile providing appropriate values for these variables
# The root of your Domino installation. Mine's in /usr/local/lotus, but your's
# may well be /opt/lotus
NOTESROOT=/usr/local/lotus
# The place where the Notes API is installed
NOTESAPI=$(NOTESROOT)/notesapi
# The Domino program directory.
NOTESHOME=$(NOTESROOT)/notes/5061/linux
# The Domino data directory (the directory containing names.nsf)
NOTESDATA=$(NOTESROOT)/notes/data
# The include path for the Notes C API headers
NOTESINC=$(NOTESAPI)/include
# Where tomcat is installed. This is where conf, lib, webapps et al normally are
TOMCATHOME=/var/tomcat3
# Your JDK's include directory
JAVAINC=$(JAVA_HOME)/include
</pre></div>
<ul>
<li>
Now you should build via make
</li>
</ul>
<p class="screen"><div align="left"><table bgcolor="#000000" cellpadding="2" cellspacing="0" border="1" width="80%"><tr><td align="left" bgcolor="#000000"><div class="screen">Launch build via make</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make</b></nobr></code><br><div class="screen">place the redirector (libtomcat.so) and its settings file (libtomcat.ini) in the appropriate places</div><code><nobr><em class="screen">[user@host] ~ $ </em><b class="screen">make install</b></nobr></code><br></td></tr></table></div></p>
</blockquote></td></tr></table></td></tr><!--FOOTER SEPARATOR--><tr><td colspan="2"><hr size="1" noshade="noshade"></td></tr><!--PAGE FOOTER--><tr><td colspan="2"><div align="center"><font size="-1" color="#525D76"><em>
Copyright © 1999-2005, Apache Software Foundation
</em></font></div></td></tr></table></body></html>
|