Peter Roßbach und Michael Kloss
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.
Peter Roßbach
Im Tomcat 5 ist eine JNI Unterstützung jetzt mit dem JK2 2.0.4 und Apache
2.0.48 auch möglich. Mit der Hilfe des Bug Reports
27167 wurde nun eine lauffähige Konfiguration mit dem aktuellen CVS HEAD zum
Tomcat 5.0.20 (10.3.2004) hergestellt. Vermutlich wird diese dann auch mit neueren
Versionen ab Tomcat 4.1.31 zusammenarbeiten.
|
Apache 2.0.48 / Tomcat 4.1.27 via JK2 2.0.4 JNI
| |
| | |
Für die hier dargestellte Konfiguration 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.
|
Apache 2.0.48 / Tomcat 5.0.20 via JK2 2.0.4 JNI
| |
| | |
Mit dem Tomcat 5 haben sich die start und Stopp Parameter und der notwendige Klassenpfad geändert.
Einen aktuelle workers2.properties Datei finden Sie hier:
Für die hier dargestellte Konfiguration benötigen Sie folgende Versionen:
- Apache Tomcat 5.0.20 (die Versionen darunter funktionieren nicht)
- Apache HTTP-Server 2.0.48
- JK2 Connectoren 2.0.4
[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=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
OPT=-Xmx32m
OPT=-Xms32m
OPT=-Djava.home=D:/java/j2sdk1.4.2_03
OPT=-Dcatalina.config=file:../conf/catalina.properties
OPT=-Dcatalina.home=C:/tomcat5/jakarta-tomcat-5/build
OPT=-Dcatalina.base=C:/server/jk2jvm-server
OPT=-Djava.class.path=D:/java/j2sdk1.4.2_03/lib/tools.jar;C:/tomcat5/jakarta-tomcat-5/build/server/lib/tomcat-jni.jar;C:/tomcat5/jakarta-tomcat-5/bin/jmx.jar;C:/tomcat5/jakarta-tomcat-5/build/bin/bootstrap.jar
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=startd
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=stopd
disabled=0
[uri:/jkstatus/*]
info=Display status information and checks the config file for changes.
group=status:
[uri:/myapps/*]
info=Map the whole webapp
[uri:/manager/*]
info=Map the whole webapp