Apache Tomcat Native Libraries unter Mac OS X installieren

Vor knapp zwei Wochen wurde die neue Tomcat Version 6.0.26 veröffentlicht. Zeitgleich wurden die Tomcat-Native-Libraries auf die Version 1.1.20 aktualisiert. Tomcat-Native verbindet die Apache Portable Runtime mit dem Web-Container. Dies bringt höhere Stabilität, höhere Performanz und die Möglichkeit OpenSSL im Tomcat bentuzen zu können.

Hier ist eine Anleitung, um die Native-Libraries unter Mac OS X zu installieren:

Zunächst muss APR installiert werden, was am leichtesten über MacPorts:
sudo port install apr

Auch die tomcat-native gibt es als Port, allerdings nur in der alten Version 1.1.14, die mit der aktuellen Tomcat Version nicht mehr kompatibel ist. Daher gibt es nun zwei Möglichkeiten:

  1. Einen Port-Patch einspielen: Tomcat-Native-1.1.20 Patch
  2. Die Libraries selbst kompilieren

Da das selber kompilieren unter Mac OS X nicht schwierig ist, zeige ich diesen Weg:

Paket herunterladen und entpacken:
http://tomcat.apache.org/download-native.cgi
tar xf tomcat-native-1.1.20-src.tar.gz
cd tomcat-native-1.1.20-src/jni/native/

Mit configure alles konfigurieren:
./configure --with-apr=/usr/local/apr --with-java-home=$JAVA_HOME --with-ssl=/usr
Wer kein SSL benötigt kann einfach --without-ssl angeben.

Kompilieren und installieren:
make
sudo cp .libs/libtcnative* /usr/lib/java/

Wenn man nun den Tomcat startet, kann man in den Log-Meldungen prüfen, ob die Native-Library geladen wird:
/Applications/apache-tomcat-6.0.26/bin/catalina.sh run
19.03.2010 09:20:21 org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.20.
19.03.2010 09:20:21 org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].

Sollte es zu einer Fehlermeldung kommen, dass der Poller nicht erstellt werden konnte, muss die pollerSize im Connector angepasst werden:
19.03.2010 09:20:41 org.apache.tomcat.util.net.AprEndpoint allocatePoller
INFO: Failed to create poller with specified size of 8192

<connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
pollerSize="1024" >>

Wird kein SSL benutzt ist man nun fertig. Ansonsten ist die SSL Konfiguration in den Connector-Eintragen in der server.xml bei APR-Nutzung anders:

APR Connector configuration
Tomcat SSL howto

Möchte man auf den APR-SSL support verzichten, kann auch einfach das protocol überschrieben werden:

< -- Define a blocking Java SSL Coyote HTTP/1.1 Connector on port 8443 -->
protocol = "org.apache.coyote.http11.Http11Protocol"
port="8443"

< -- Define a non-blocking Java SSL Coyote HTTP/1.1 Connector on port 8443 -->
protocol = "org.apache.coyote.http11.Http11NioProtocol"
port="8443"

Hier noch ein kleiner Grund, warum sich der Aufwand lohnt: Unsere aktuelle Web-Anwendung it.projektwerk.com startet ohne APR in ca. 25 Sekunden. Mit APR in 15 Sekunden.