JK2 JNIワーカによるApache内部起動
 
最終更新日 $Date: 2003/11/01 16:28:37 $

TomcatとApacheが合体?!

そんなゲッターロボみたいな話があるんでしょうか? あるーんです。 JNIチャンネルを使うと、Apacheの内部プロセス(in process)としてTomcatが起動され、 Tomcat単独での起動が不要になります。 この場合JK2は、API呼び出しによってTomcatと会話を行うので、 ソケットチャンネルに比べて性能が上がります (Apache付属のabコマンドで試してみるとわかります)。 その反面、可用性は減ります。

★JNIワーカを使った動作は、私のLinux環境(RedHat8)ではうまくいきませんでした。 「うまく動いてるよー」という方がもしいらっしゃれば、 メールいただけると幸いです。★

[vm:]の部分でJVMに関する設定を行います。 tools.jarへのクラスパスが必要なのは、JSPをコンパイルするjavacコマンドのためです。
JVMへのパスを指定する行は無くても動く場合もありますが、 もしうまく動作せず、"jvm.so not found" というようなメッセージがログに出ていた場合にはこの行を追加してみて下さい。

[worker.jni:onStartup]と[worker.jni:onShutdown]は起動・終了に関する設定です。 使用するクラスはいずれもTomcatStarterですが、ARGに渡すパラメータが異なります。

[uri:xxxx]以下は、前節と同じです。

workers2.properties
# ${APACHE2_HOME}/conf/workers2.properties
# JNIワーカによるApache内部起動

# ログファイルの設定
[logger.file:0]
level=ERROR
file=${serverRoot}/logs/jk2.log

# JNI通信チャンネルの定義
[channel.jni:jni]
info=The jni channel.

# Javaバーチャルマシンのパラメータの定義
[vm:]
info=JVM parameters in the server process
JVM=C:/j2sdk1.4.1/jre/bin/server/jvm.dll
OPT=-Djava.class.path=C:/Tomcat/bin/tomcat-jni.jar;
C:/j2sdk1.4.1/lib/tools.jar ★実際は1行
OPT=-Dtomcat.home=C:/Tomcat
OPT=-Dcatalina.home=C:/Tomcat
OPT=-Xms80m
OPT=-Xmx80m

# JNIワーカの起動時ハンドラ
[worker.jni:onStartup]
info=JVM startup
class=org/apache/jk/apr/TomcatStarter
ARG=start
stdout=${serverRoot}/logs/stdout.log
stderr=${serverRoot}/logs/stderr.log

# JNIワーカの終了時ハンドラ
[worker.jni:onShutdown]
info=JVM shutdown
class=org/apache/jk/apr/TomcatStarter
ARG=stop

# examplesコンテキスト
[uri:/examples/*]
info=Map the Tomcat examples
## group=lb

# ステータス監視ワーカの設定
[status:]
[uri:/jkstatus/*]
group=status:

# 共有メモリ
[shm:]
# 使わない
disabled=1

Tomcat側のjk2.propertiesは、標準のもからコメントを2つはずすだけです。
jk2.properties
## THIS FILE MAY BE OVERRIDEN AT RUNTIME. MAKE SURE TOMCAT IS STOPED
## WHEN YOU EDIT THE FILE.

## COMMENTS WILL BE _LOST_

## DOCUMENTATION OF THE FORMAT IN JkMain javadoc.

# Set the desired handler list
handler.list=apr,request,channelJni  ★コメントはずす
#
# Override the default port for the socketChannel
# channelSocket.port=8019
# Default: 
# channelUnix.file=${jkHome}/work/jk2.socket
# Just to check if the the config  is working
# shm.file=${jkHome}/work/jk2.shm

# In order to enable jni use any channelJni directive
# channelJni.disabled = 0
# And one of the following directives:

# 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  ★コメントはずす



Copyright © 2002-2016, Your Technology Partner. All rights reserved.