# aptitude install libapr1-dev
# su - tomcat
$ cd ${CATALINA_HOME}/bin
$ tar zxf tomcat-native.tar.gz
$ cd tomcat-native-1.1.16-src/jni/native
$ ./configure --prefix=${CATALINA_HOME}/apr --with-apr=/usr/bin/apr-config --with-ssl=yes
$ make
$ make install
インストールが終わると以下のようなメッセージが表示されます。
----------------------------------------------------------------------
Libraries have been installed in:
${CATALINA_HOME}/apr/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
メッセージではいくつかの方法がありますが、最初に挙げられている LD_LIBRARY_PATH 環境変数に APR ライブラリのディレクトリを追加する方針にしました。APR コネクタを使うか使わないかは setenv.sh に追加した行をコメントアウトする・しないで切り替えることができます。
$ cd ${CATALINA_HOME}
$ bin/shutdown.sh # Tomcat が動作している場合のみ
$ echo "export LD_LIBRARY_PATH=${CATALINA_HOME}/apr/lib:\${LD_LIBRARY_PATH}" >> bin/setenv.sh
$ bin/startup.sh
catalina.out に出力される起動ログを見比べてみると…
変更前
2009/08/04 15:36:06 org.apache.catalina.core.AprLifecycleListener init
情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/local/java/jdk1.6.0_14/jre/lib/amd64/server:/usr/local/java/jdk1.6.0_14/jre/lib/amd64:/usr/local/java/jdk1.6.0_14/jre/../lib/amd64:/usr/java/packages/lib/amd64:/lib:/usr/lib
2009/08/04 15:36:06 org.apache.coyote.http11.Http11Protocol init
情報: Coyote HTTP/1.1を http-8080 で初期化します
2009/08/04 15:36:06 org.apache.catalina.startup.Catalina load
情報: Initialization processed in 471 ms
--- (snip) ---
2009/08/04 15:36:08 org.apache.coyote.http11.Http11Protocol start
情報: Coyote HTTP/1.1を http-8080 で起動します
2009/08/04 15:36:08 org.apache.jk.common.ChannelSocket init
情報: JK: ajp13 listening on /0.0.0.0:8009
2009/08/04 15:36:08 org.apache.jk.server.JkMain start
情報: Jk running ID=0 time=0/14 config=null
2009/08/04 15:36:08 org.apache.catalina.startup.Catalina start
変更後
2009/08/04 16:00:28 org.apache.catalina.core.AprLifecycleListener init
情報: Loaded APR based Apache Tomcat Native library 1.1.16.
2009/08/04 16:00:28 org.apache.catalina.core.AprLifecycleListener init
情報: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
2009/08/04 16:00:28 org.apache.coyote.http11.Http11AprProtocol init
情報: Coyote HTTP/1.1を http-8080 で初期化します
2009/08/04 16:00:28 org.apache.coyote.ajp.AjpAprProtocol init
情報: Initializing Coyote AJP/1.3 on ajp-8009
2009/08/04 16:00:28 org.apache.catalina.startup.Catalina load
情報: Initialization processed in 562 ms
--- (snip) ---
2009/08/04 16:01:02 org.apache.coyote.http11.Http11AprProtocol start
情報: Coyote HTTP/1.1を http-8080 で起動します
2009/08/04 16:01:02 org.apache.coyote.ajp.AjpAprProtocol start
情報: Starting Coyote AJP/1.3 on ajp-8009
2009/08/04 16:01:02 org.apache.catalina.startup.Catalina start
APR コネクタが使われていることがわかります。
Tomcat の examples の中にある
org.apache.catalina.CometProcessor
を実装している ChatServlet にアクセスしてみるときちんと (?) 動作していることがわかります。って、この ChatServlet はまだ実装途中? あんまりきちんとは動いてなさそうです…。