Chapter 44. Setting Up mod_jk with embedded Tomcat

NoteNote
 

Replace ${JONAS_BASE} and ${APACHE_HOME} with appropriate values.

  1. Open the file $JONAS_BASE/conf/server.xml and uncomment the following line:

    <!--
    <Connector port="9009" enableLookups="false"
        redirectPort="9043" debug="0"
        protocol="AJP/1.3" />
    -->  

    Edit it to look like the following:

    <Connector port="9009" enableLookups="false"
        redirectPort="9043" debug="0"
        protocol="AJP/1.3" />
  2. Now you can either let tomcat generate the mod_jk.conf file automatically, which will setup forwarding for a limited set of applications, or you can create a custom mod_jk.conf file. The automatically generated file cannot be customized since it is re-written every time tomcat is restarted by the user.

    1. To enable automatic generation insert the following into the server.xml file nested under the base <Server> tag:

      <Listener className="org.apache.jk.config.ApacheConfig"
          modJk="$APACHE_HOME/modules/mod_jk.so" />

      and insert the following under the <Host> element:

      <Listener className="org.apache.jk.config.ApacheConfig"
          append="true" forwardAll="false"
          modJk="$APACHE_HOME/modules/mod_jk.so"/>

      When jonas/tomcat is restarted, there will be a file created under $JONAS_BASE/conf/auto called mod_jk.conf.

    2. If you want to create a custom file, the recommendation is to place mod_jk.conf under $JONAS_BASE/conf/jk. A simple mod_jk.conf file that can be used is:

      # Load the mod_jk module if not loaded.
      <IfModule !mod_jk.c>
      LoadModule jk_module "$APACHE_HOME/modules/mod_jk.so"
      </IfModule>
      
      # Specify location of worker file and log file.
      # Worker file will follow shortly.
      JkWorkersFile "$JONAS_BASE/conf/jk/workers.properties"
      JkLogFile "$JONAS_BASE/logs/mod_jk.log"
      
      # When and how much logging.
      JkLogLevel emerg
      
      # This is a little awkward. It seems mod_jk associates 
      # applications that map to tomcat based on the virtual host. 
      # If, for instance, I wish to visit the jonasAdmin application 
      # through http://jonas-server/jonasAdmin from another machine 
      # and I have the following setting then the application behaves
      # perfectly normally; that is, struts kicks in as expected, 
      # form-based authentication and forwarding is done exactly as 
      # expected if you were using the application directly using 
      # the appropriate port (9000). However, if you try using 
      # http://localhost/jonasAdmin from jonas-server without the 
      # explicit VirtualHost declaration, only the directory contents
      # are mapped. So we need to explicitly mention both virtual hosts.
      <VirtualHost jonas-server>
          ServerName jonas-server
          JkMount /olstore ajp13
          JkMount /olstore/* ajp13
          JkMount /jonasAdmin ajp13
          JkMount /jonasAdmin/* ajp13
      </VirtualHost>
      # ajp13 is in fact the worker name used in workers.properties.
      <VirtualHost localhost>
          ServerName localhost
          JkMount /olstore ajp13
          JkMount /olstore/* ajp13
          JkMount /jonasAdmin ajp13
          JkMount /jonasAdmin/* ajp13
      </VirtualHost>
  3. To tell apache to use this file, edit the $APACHE_HOME/conf/httpd.conf file and insert:

    Include ${JONAS_BASE}/conf/jk/mod_jk.conf

    NoteNote
     

    Replace ${JONAS_BASE} with appropriate value.

  4. Create a workers.properties file. This can be placed in $JONAS_ROOT/conf/jk/workers.properties.

    A sample that has been used successfully is:

    # workers.java_home should point to your Java installation. 
    # Normally you should have a /bin and a /lib beneath it.
    #
    workers.java_home=/usr/lib/jvm/java
    
    #
    # You should configure your environment slash... ps=\ on NT 
    # and / on UNIX and possibly something different elsewhere.
    #
    ps=/
    
    #
    #------ ADVANCED MODE -------------------------------------
    #----------------------------------------------------------
    #
    
    #
    #------ DEFAULT worker list -------------------------------
    #----------------------------------------------------------
    #
    #
    # The workers that your plugins should create and work with
    #
    # Add 'inprocess' if you want a JNI connector
    worker.list=ajp13
    # , inprocess
    
    #
    #------ DEFAULT worker1 WORKER DEFINITION -----------------
    #----------------------------------------------------------
    #
    
    #
    #!
    Defining a worker named worker1 and of type worker1
    # Note that the name and the type do not have to match.
    #
    worker.ajp13.port=9009
    worker.ajp13.host=jonas-server
    worker.ajp13.type=ajp13
    
    #----------------------------------------------------------
  5. Once all this is completed, restart httpd and ensure that jonas/tomcat is up. You can follow that up with a quick test by visiting http://host_name/jonasAdmin. You should now be able to use the application as normal.