<?xml version="1.0"?>
<document>
<copyright>
   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.
</copyright>
<properties>
<title>Quick Start JK2 Configuration Guide</title>
<author email="mturk@mappingsoft.com">Mladen Turk</author>
<date>$Date$</date>
</properties>
<section name="Introduction">
<p>
  This document describes the configuration files used by JK2 on the
  Tomcat and Web Server side:
    <ul>
    <li>
    <b>jk2.properties</b> is used on the Tomcat side. It's installation path in
    the $TOMCAT_HOME/conf directory.
    </li>
    <li>
    <b>workers2.properties</b> is used on the webserver side. For the Apache
    servers the default path is in the ServerRoot/conf directory.
    </li>
    </ul>    
  Although JK2 has many things in common with mod_jk, the configuration is quite
  different, and all the directives should be inside the workers2.properties.
  This enables JK2 to have the same configuration file no mater what the web server
  it's connected to.
</p>
</section>

<section name="Minimum Configuration">
<p>
    Minimum configuration is the simplest one to make the JK2 working. The used
    channel will be socket, and lot of options are used by default. Both the
    Tomcat and web server are on the same computer.
</p>
<p>
jk2.properties:
<source>
# The default port is 8009 but you can use another one
# channelSocket.port=8019
</source>
That is all needed on the Tomcat side to configure the JK2.
</p>
<p>
workers2.properties:
<source>
# Define the communication channel 
[channel.socket:localhost:8009]
info=Ajp13 forwarding over socket
tomcatId=localhost:8009

# Map the Tomcat examples webapp to the Web server uri space
[uri:/examples/*]
info=Map the whole webapp
</source>
</p>
<p>
Start the Tomcat and Web server and browse to the <a>http://localhost/examples/</a>
</p>
</section>

<section name="Minimum JNI Configuration">
<p>
    Minimum JNI configuration is the simplest one to make the Tomcat working
    from inside the web server as inprocess. The only comunication channel used
    is JNI. The JK2 will register all the native calls by itself, so there is
    no need to specify the native library on Java side.
</p>
<p>
jk2.properties:
<source>
# Add the apr and channelJni to the list of handlers
handler.list=apr,request,container,channelJni
# The native libraries will be registered by JK2
apr.jniModeSo=inprocess
</source>
</p>
<p>
workers2.properties:
<source>
# Define the comunication channel 
[channel.jni:jni]
info=The jni channel, used if tomcat is started inprocess

# Define the parameters for the Java Virtual Machine
[vm:]
info=Parameters used to load a JVM in the server process
OPT=-Djava.class.path=${TOMCAT_HOME}/lib/tomcat-jni.jar;${TOMCAT_HOME}/lib/tomcat.jar
OPT=-Dtomcat.home=${TOMCAT_HOME}
OPT=-Dcatalina.home=${TOMCAT_HOME}
OPT=-Xmx128M

# JNI worker startup handler
[worker.jni:onStartup]
info=Command to be executed by the VM on startup. This one will start tomcat.
class=org/apache/jk/apr/TomcatStarter
ARG=start
stdout=${serverRoot}/logs/stdout.log
stderr=${serverRoot}/logs/stderr.log

# JNI worker shutdown handler
[worker.jni:onShutdown]
info=Command to be executed by the VM on shutdown. This one will stop tomcat.
class=org/apache/jk/apr/TomcatStarter
ARG=stop

# Map the Tomcat examples webapp to the Web server uri space
[uri:/examples/*]
info=Map the whole webapp
</source>
</p>
<p>
Start the Web server and browse to the <a>http://localhost/examples/</a>
</p>

</section>

</document>