Greetings everyone.
I've exhaustively searched the archives for a success story I can build on, but in
vain.
I've been beating my head against mod_jk2 for over 2 days now, and I keep getting SO
close but not quite far enough. If you've had similar experiences but got beyond it -
please read on!
The Bad news is:
- The jakarta-tomcat-connectors-jk2-2.0.2-src comes with little to no documentation.
All references to "reading the docs in the tarball" are false.
- The few README's that exist within the build dirs tell of the minumum
configuration necessary, but no real direction as to how to make it all work.
- Reading the incomplete documentation on the web site shed some light on the
problem, but still isn't getting me there.
- Nowhere does the documentation mention the CLASSPATH issue that comes up.. I
couldn't get anything to work until I added ALL of the tomcat common and server/lib
jar files to the CLASSPATH in the worker2.properties file and added a JAVA_HOME
environment variable to Apache2/bin/envvars
- Nowhere does the documentation mention that the Java VM (jvmdll.so) must be in the
LD_LIBRARY_PATH, or otherwise available via ld.so.conf / ldconfig
- The build scripts for ant "build.xml" refer to a "coyote" directory, which doesn't
exist in the jakarta-tomcat-connectors-jk2-2.0.2-src tarball.
- The "configure" script that was created for some reason fails when testing that a
directory isn't a regular file under RH 8.0... Go figure... I had to hand-edit out all
the "if $(TEST) ! -f" blocks.
- The docs are inconsistent as to where one should place the "jkjni.so" file. If
placed in apache lib (which is also in my ld.so.conf) - things seem ok.. If places in
tomcat/server/lib, things go poorly.
- The docs never clearly define where, when, and how the "shm" block should be
created, only that it's allowed... I only found it to be required through the use of
google searching the archives.
There is some good news:
- After hours of hacking at the build process, I finally got a valid mod_jk2.so and
jkjni.so file
- Tomcat 4.1 had a tomcat-jk2.jar file, so the coyote compile was ultimately
unnecessary - just annoying as the build process required it.
- Tomcat 4.1 launches inside of Apache 2 (as evidenced by the apache error_log file)
The worse news:
- No channels or workers will initialize, no matter WHAT I do. I've followed the
docs to the letter and have both jk2.properties and workers2.properties in their
proper locations
So, with that said.. I'm hoping that where the docs fail, the community will prevail.
Questions:
1) What is the proper format of the "JkUriSet" command in the httpd.conf file? This
is the only example I've found:
<Location /examples>
JkUriSet worker worker
</Location>
If I use this <Location> in my httpd.conf, I get the error:
[Thu Apr 03 21:02:29 2003] [error] uriEnv.init() map to invalid worker /examples worker
So I expected that it wanted the name of the worker (jni I assume, considering the
lack of documentation I am FORCED to assume! help!) so I made the block look like this:
<Location /examples>
JkUriSet worker jni
</Location>
It still complains.. I'm stumped on that one, so I thought -- just remove it and
let the default [uri:/examples/*] handlers manage it (from workers2.properties) -- but
when I try it without the block, I receive these different errors:
[Thu Apr 03 20:58:22 2003] [error] lb_worker.service() all workers in error or
disabled state
[Thu Apr 03 20:58:22 2003] [error] mod_jk.handler() Error connecting to tomcat 120000
2) What must be done to init the jni channels and workers? What is the proper file
format? I've seen many (MANY) references to mod_jk2 on the internet discuss using a
"workers.properties" file, which looks extremely like the old 3.x version... I can't
bring myself to believe that those are right (especially since if I add any of those
commands to workers2.properties, it bombs out...) Using the examples in the docs,
FAQ's, how to's and readmes results in this error log:
----- snip -----
[Thu Apr 03 20:28:09 2003] [notice] Apache configured -- resuming normal operations
[Thu Apr 03 20:28:12 2003] [error] workerEnv.initChannel() init failed for
channel.jni:jni
[Thu Apr 03 20:28:12 2003] [error] workerEnv.initWorkers() init failed for
worker.jni:onStartup
[Thu Apr 03 20:28:12 2003] [error] workerEnv.initWorkers() init failed for
worker.jni:onShutdown
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initChannel() init failed for
channel.jni:jni
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initWorkers() init failed for
worker.jni:onStartup
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initWorkers() init failed for
worker.jni:onShutdown
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initChannel() init failed for
channel.jni:jni
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initWorkers() init failed for
worker.jni:onStartup
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initWorkers() init failed for
worker.jni:onShutdown
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initChannel() init failed for
channel.jni:jni
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initWorkers() init failed for
worker.jni:onStartup
[Thu Apr 03 20:28:13 2003] [error] workerEnv.initWorkers() init failed for
worker.jni:onShutdown
TomcatStarter: main()
Try org.apache.tomcat.startup.Main
Try org.apache.catalina.startup.BootstrapService
Starting org.apache.catalina.startup.BootstrapService
Created catalinaLoader in: /usr/local/jakarta/tomcat/server/lib
[Thu Apr 03 20:28:16 2003] [error] mod_jk child init 1 0
Apr 3, 2003 8:28:17 PM org.apache.commons.modeler.Registry loadRegistry
INFO: Loading registry information
Apr 3, 2003 8:28:17 PM org.apache.commons.modeler.Registry getRegistry
INFO: Creating new Registry instance
Apr 3, 2003 8:28:19 PM org.apache.commons.modeler.Registry getServer
INFO: Creating MBeanServer
----- snip -----
As you can see, Tomcat IS launching.. The VM is coming up and the bootstrap is
initialized... It's the channel.* and worker.* directives that are now failing..
This line causes my curiosity to peak as well, can anyone decrypt it:
[Thu Apr 03 20:28:16 2003] [error] mod_jk child init 1 0
Can ANYONE help?
Puh-lease?
Ken M
[EMAIL PROTECTED]
-------------- Big Snip ----------------
########################################
######## jk2.properties ################
########################################
# list of needed handlers.
handler.list=apr,request,container,channelJni
# Or you can use the mod_jk2 directly
#apr.jniModeSo=/usr/local/apache/modules/mod_jk2.so
channelJni.disable = 0
# If you wish to start the Tomcat from inside web server then
# you don't need any above directive. Here is shown the default
# value for the apr that you can ommit
apr.jniModeSo=inprocess
-------------- Big Snip ----------------
########################################
####### workers2.properties ############
########################################
# Define the comunication channel
[channel.jni:jni]
#info=The jni channel, used if tomcat is started inprocess
# Define the parameters for the Java Virtual Machine
[vm:]
info=Parameters used to load a JVM in the server process
OPT=-Djava.class.path=$CLASSPATH:/usr/local/jakarta/tomcat/server/lib/tomcat-jk2.jar:/usr/local/jakarta/tomcat/bin/boots
trap.jar:/usr/local/jakarta/tomcat/server/lib/catalina.jar:${TOMCAT_HOME}/server/lib/commons-digester.jar:/usr/local/jak
arta/tomcat/common/lib/ant.jar:/usr/local/jakarta/tomcat/common/lib/commons-collections.jar:/usr/local/jakarta/tomcat/co
mmon/lib/commons-logging-api.jar:/usr/local/jakarta/tomcat/common/lib/jasper-compiler.jar:/usr/local/jakarta/tomcat/comm
on/lib/jasper-runtime.jar:/usr/local/jakarta/tomcat/common/lib/naming-common.jar:/usr/local/jakarta/tomcat/common/lib/na
ming-factory.jar:/usr/local/jakarta/tomcat/common/lib/naming-resources.jar:/usr/local/jakarta/tomcat/common/lib/servlet.
jar:/usr/local/jakarta/tomcat/server/lib/commons-beanutils.jar:/usr/local/jakarta/tomcat/server/lib/commons-digester.jar
:.:/usr/local/jakarta/tomcat/server/lib/commons-modeler.jar:/usr/local/jakarta/tomcat/server/lib/jakarta-regexp-1.2.jar:
/usr/local/jakarta/tomcat/server/lib/mx4j-jmx.jar:/usr/local/jakarta/tomcat/server/lib/servlets-common.jar:/usr/local/ja
karta/tomcat/server/lib/servlets-default.jar:/usr/local/jakarta/tomcat/server/lib/servlets-invoker.jar:/usr/local/jakart
a/tomcat/server/lib/servlets-manager.jar:/usr/local/jakarta/tomcat/server/lib/servlets-webdav.jar:/usr/local/jakarta/tom
cat/server/lib/tomcat-util.jar:/usr/local/jakarta/tomcat/server/lib/tomcat-warp.jar
OPT=-Dtomcat.home=/usr/local/jakarta/tomcat
OPT=-Dcatalina.home=/usr/local/jakarta/tomcat
OPT=-Xmx128M
# JNI worker startup handler
[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
stdout=${serverRoot}/logs/stdout.log
stderr=${serverRoot}/logs/stderr.log
# JNI worker shutdown handler
[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
[uri:/*.jsp]
info=Map the whole webapp
[uri:/examples/*]
info=Map the whole webapp
[shm:]
info=SHM Block
file=/var/log/httpd/jk2.shm
size=1048576