TomC@ TomC@ - Die Internetseite
 
 
 

TomC@ - Development: Tipps und Tricks

PDF
PDF

Tomcat Basics

Catalina-Base

Um möglichst unabhängig von den Tomcat-Releases zu bleiben, bietet es sich an die Distributionen unberührt zu lassen und nur auf solche zu verweisen. Hierfür ist eine Verzeichnisstruktur erforderlich, wie sie in der unteren Tabelle zu finden ist. Der grosse Unterschied besteht nun darin, dass in den Startup-Skripten das eigene Verzeichnis als CATALINA_BASE angegeben wird und nur das CATALINA_HOME auf die Tomcat-Distribution verweist.

startup.bat

set JAVA_HOME=PATH-TO-JAVA-HOME
set CATALINA_BASE=..
set _CATALINA_HOME=%CATALINA_HOME%
set CATALINA_HOME=PATH-TO-CATALINA-HOME
set CATALINA_OPTS=-hotspot -ms32m -mx32m 
%CATALINA_HOME%\bin\catalina start %1 %2 %3 %4 %5 %6 %7 %8 %9
                                        

startup.sh

#!/bin/sh
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Cruiser Server

export CATALINA_BASE=..
export CATALINA_HOME=PATH-TO-CATALINA-HOME
export CATALINA_OPTS=-Xmx32m
exec $CATALINA_HOME/bin/catalina.sh start "$@"
                                        
Verzeichnis Bedeutung
bin Verzeichnis für alle Start und Stop-Skripte
conf Verzeichnis für die Tomcat-Konfigurationen, Default-Webkonfiguration Policy-Files, Keystores, etc.
temp Temporäres Tomcat-Verzeichnis für Jar-Dateien
log Verzeichnis für Log-Dateien des Tomcat
webapp Default-Anwendungs-Verzeichnis
work Arbeitsverzeichnis für kompilierte Dateien, etc.
...	                                
set CATALINA_OPTS=-hotspot -ms32m -mx32m -Dcatalina.config=file:../conf/catalina.properties
...
	                            

Um die ClassLoader des Tomcat zu erweitern, besteht seit dem Tomcat 5 die Möglichkeit eine catalina.properties zu referenzieren. HIerzu muss der Tomcat mit einem zusätzlichen Parameter catalina.config gestartet werden. Dies erreicht man durch einen Eintrag in den Startup-Skripten.

Note
Man beachte das der Parameter catalina.config eine echte URL erwartet. Also Protokoll nicht vergessen (Beispiel: file:)

Beispiel einer catalina.properties

package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
common.loader=${catalina.home}/common/classes,${catalina.home}/common/endorsed/*.jar,
                               ${catalina.home}/common/lib/*.jar,../classes,../lib/*.jar
server.loader=${catalina.home}/server/classes,${catalina.home}/server/lib/*.jar
shared.loader=${catalina.home}/shared/classes,${catalina.home}/shared/lib/*.jar
                                        

Apache / Tomcat via JNI

Um den Tomcat mit dem Apache zu kombinieren gibt es mehrere Möglichkeiten. Man kann dies über eine mod_proxy Konfiguration im Apache erreichen, oder über das AJP-Protokoll. Diese Möglichkeiten sind auch gut dokumentiert und häufig eingesetzt und getestet. Eine dritte Möglichkeit ist die Kommunikation über das Java Native Interface (JNI). Diese Möglichkeit ist leider nicht gut dokumentiert und wohl auch nicht gut getestet. Allerdings haben wir es inzwischen geschafft eine lauffähige Konstellation zu finden. Hierzu benötigen Sie folgende Versionen:

  • Apache Tomcat 4.1.27 (die Versionen darunter funktionieren auch)
  • Apache HTTP-Server 2.0.44
  • JK2 Connectoren 2.0.2

Nachdem Sie alle Versionen haben und den Apache und den Tomcat installiert haben, müssen Sie das .dll bzw. .so-Modul in das Apache-Modules-Verzeichnis kopieren und folgenden Eintrag in die httpd.conf hinzufügen.

LoadModule jk2_module modules\mod_jk2.dll
	                    

Auf der Seite des Tomcat benötigen Sie im conf-Verzeichnis eine Datei jk2.properties. In dieser Datei müssen folgende Einträge stehen:

## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED
## WHEN YOU EDIT THE FILE.
## COMMENTS WILL BE _LOST_

# Just to check if the the config  is working
shm.file=c:/Programme/Apache/Apache2.0.44/logs/jk2.shm

# In order to enable jni use any channelJni directive
channelJni.disabled = 0

# For Connecting to Tomcat outprocess
# apr.jniModeSo=/opt/apache2/modules/mod_jk2.so

# If set to inprocess the mod_jk2 will Register natives itself
# This will enable the starting of the Tomcat from mod_jk2
apr.jniModeSo=inprocess	                    
	                    

Nun ist es fast geschafft. Allerdings fehlen noch die wichtigsten Konfigurationen auf der Apache-Seite. Hierzu ist eine workers2.properties Datei im conf-Verzeichnis des Apaches anzulegen mit folgendem Inhalt:

[logger]
level=DEBUG

[config:]
file=${serverRoot}/conf/workers2.properties
debug=0
debugEnv=0

[uriMap:]
info=Maps the requests. Options: debug
debug=0

[shm:]
info=Scoreboard. Required for reconfiguration and status with multiprocess servers
file=${serverRoot}/logs/jk2.shm
size=1000000
debug=0
disabled=0

[workerEnv:]
info=Global server options
timing=1
debug=0

[lb:lb]
info=Default load balancer.
debug=0

[channel.jni:jni]
info=The jni channel, used if tomcat is started inprocess

[status:]
info=Status worker, displays runtime informations

[vm:]
info=Parameters used to load a JVM in the server process
OPT=-Djava.class.path=PATH-TO-tomcat-jni.jar;PATH-TO-commons-logging.jar;PATH-TO-log4j-1.2.8.jar;PATH-TO-tools.jar
OPT=-Dtomcat.home=PATH-TO-tomcat.home
OPT=-Dcatalina.home=PATH-TO-catalina.home
#Example
#OPT=-Djava.class.path=C:/server/jakarta/jakarta-tomcat-4.1.29/bin/tomcat-jni.jar;
                                               C:/server/jakarta/jakarta-tomcat-4.1.29/server/lib/commons-logging.jar;
                                               C:/server/jakarta/jakarta-tomcat-4.1.29/server/lib/log4j-1.2.8.jar;
                                               C:/java/j2sdk1.4.1_01/lib/tools.jar
#OPT=-Dtomcat.home=C:/server/jakarta/jakarta-tomcat-4.1.29
#OPT=-Dcatalina.home=C:/server/jakarta/jakarta-tomcat-4.1.29
OPT=-Xmx128M
disabled=0

[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
disabled=0
stdout=${serverRoot}/logs/stdout.log
stderr=${serverRoot}/logs/stderr.log

[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
disabled=0

[uri:/jkstatus/*]
info=Display status information and checks the config file for changes.
group=status:

[uri:/examples/*]
info=Map the whole webapp
	                    

Wenn Sie nun den Apache starten und den Browser auf http://mydomain/examples zeigen lassen, sollten Sie die Beispiel-Seiten des Tomcat sehen und dort sowohl die Servlets als auch die JSPs ansehen können. Zur Kontrolle, ob der Tomcat wirklich gestartet ist, schauen Sie in den Log-Dateien stderr.log und stdout.log im Apache-conf-Verzeichnis.

Konfiguration

Hier erscheinen demnächst Links zu Tipps und Tricks rund um das Thema "Konfiguration".

Deployment

Hier erscheinen demnächst Links zu Tipps und Tricks rund um das Thema "Deployment".

Web Apps

Hier erscheinen demnächst Links zu Tipps und Tricks rund um das Thema "Webb Applikationen".

Misc

Hier erscheinen demnächst Links zu Tipps und Tricks, welche sich keinem der oben aufgeführten Themen zuordnen lassen.

by Peter Rossbach, Michael Kloss, Lars Roewekamp