You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Casey Burk <ca...@caseyburk.com> on 2011/09/22 21:33:06 UTC

Trying to get 2 instances of Tomcat 6.0.x (Red Hat) to work (each having their own lib directories)...

Hello all!

First and foremost, forgive me if my method of delivery hasn't followed the
normal protocol (this is my first time doing this).

Secondly, the server I'll be deploying my web apps to is a Red Hat box with
2 instances of a single Tomcat 6 installation on it. These instances provide
our team with the capabilities they need to move along the migration
sequence during testing, but the problem is that each instance directory
(i.e. - "/usr/tomcat/test1" and "/usr/tomcat/test2") lack working "lib"
directories with which to load jar files from. We need this.

Is this type of capability or "segregation of class loading" managed through
the use of that CATALINA.PROPERTIES file? If so, does this imply that each
instance directory must have one placed within their "conf" directories? If
so, what directives must be used in each?

Here's the basic structure of our setup as it stands:

*PRIMARY / GLOBAL OUT-OF-THE-BOX TOMCAT FILES -*
/usr/tomcat
/usr/tomcat/conf+lib
/usr/tomcat/conf/catalina.
properties
(The lib directory at this level *IS* working.)

*DEMARCATION 1 / TEST1-SPECIFIC FILES -*
/usr/tomcat/test1
/usr/tomcat/test1/lib+conf+webapps+...
(We need the lib directory to work.)

*DEMARCATION 2 / TEST2-SPECIFIC FILES -*
/usr/tomcat/test2
/usr/tomcat/test2/lib+conf+webapps+...
(We need the lib directory to work.)

The *only* truly active catalina.properties file we have right now in
working order (at the time of this posting) is in / on the primary level
inside the conf directory and it has the following uncommented lines:

package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans.
package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.

common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
server.loader=
shared.loader=
tomcat.util.buf.StringCache.byte.enabled=true

Do any of you have any idea how to make this work?


Regards,

Casey J. Burk
www.caseyburk.com

Re: Trying to get 2 instances of Tomcat 6.0.x (Red Hat) to work (each having their own lib directories)...

Posted by Christopher Schultz <ch...@christopherschultz.net>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Casey,

On 9/22/2011 3:33 PM, Casey Burk wrote:
> First and foremost, forgive me if my method of delivery hasn't
> followed the normal protocol (this is my first time doing this).

Welcome.

> Secondly, the server I'll be deploying my web apps to is a Red Hat
> box with 2 instances of a single Tomcat 6 installation on it. These
> instances provide our team with the capabilities they need to move
> along the migration sequence during testing, but the problem is
> that each instance directory (i.e. - "/usr/tomcat/test1" and
> "/usr/tomcat/test2") lack working "lib" directories with which to
> load jar files from. We need this.

Are you using CATALINA_BASE and a single CATALINA_HOME, or are you
using two distinct Tomcat installations with separate CATALINA_HOMEs?

Generally speaking, each version of Tomcat really only needs a single
install, and anyone who wants to run their own instance can create an
appropriate directory structure, set CATALINA_BASE to point to that,
and set CATALINA_HOME to point to the full install.

> *PRIMARY / GLOBAL OUT-OF-THE-BOX TOMCAT FILES -* /usr/tomcat 
> /usr/tomcat/conf+lib /usr/tomcat/conf/catalina.

So, that looks like CATALINA_HOME to me.

> properties (The lib directory at this level *IS* working.)
> 
> *DEMARCATION 1 / TEST1-SPECIFIC FILES -* /usr/tomcat/test1 
> /usr/tomcat/test1/lib+conf+webapps+... (We need the lib directory
> to work.)

That looks like a CATALINA_BASE to me.

> *DEMARCATION 2 / TEST2-SPECIFIC FILES -* /usr/tomcat/test2 
> /usr/tomcat/test2/lib+conf+webapps+... (We need the lib directory
> to work.)

The lib directory *should* work.

How are you launching Tomcat? What are the values of CATALINA_BASE and
CATALINA_HOME (or do you know)?

- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk6A2ogACgkQ9CaO5/Lv0PCfUQCeIOET+GLVRcR+ZBVuotmy6dYO
ltwAn18eGeWDe+3CvPfK5PsOwjTg9hQC
=7A1n
-----END PGP SIGNATURE-----

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Re: Trying to get 2 instances of Tomcat 6.0.x (Red Hat) to work (each having their own lib directories)...

Posted by Mark Eggers <it...@yahoo.com>.
----- Original Message -----

> From: Casey Burk <ca...@caseyburk.com>
> To: users@tomcat.apache.org
> Cc: 
> Sent: Thursday, September 22, 2011 12:33 PM
> Subject: Trying to get 2 instances of Tomcat 6.0.x (Red Hat) to work (each having their own lib directories)...
> 
> Hello all!
> 
> First and foremost, forgive me if my method of delivery hasn't followed the
> normal protocol (this is my first time doing this).
> 
> Secondly, the server I'll be deploying my web apps to is a Red Hat box with
> 2 instances of a single Tomcat 6 installation on it. These instances provide
> our team with the capabilities they need to move along the migration
> sequence during testing, but the problem is that each instance directory
> (i.e. - "/usr/tomcat/test1" and "/usr/tomcat/test2") lack 
> working "lib"
> directories with which to load jar files from. We need this.
> 
> Is this type of capability or "segregation of class loading" managed 
> through
> the use of that CATALINA.PROPERTIES file? If so, does this imply that each
> instance directory must have one placed within their "conf" 
> directories? If
> so, what directives must be used in each?
> 
> Here's the basic structure of our setup as it stands:
> 
> *PRIMARY / GLOBAL OUT-OF-THE-BOX TOMCAT FILES -*
> /usr/tomcat
> /usr/tomcat/conf+lib
> /usr/tomcat/conf/catalina.
> properties
> (The lib directory at this level *IS* working.)
> 
> *DEMARCATION 1 / TEST1-SPECIFIC FILES -*
> /usr/tomcat/test1
> /usr/tomcat/test1/lib+conf+webapps+...
> (We need the lib directory to work.)
> 
> *DEMARCATION 2 / TEST2-SPECIFIC FILES -*
> /usr/tomcat/test2
> /usr/tomcat/test2/lib+conf+webapps+...
> (We need the lib directory to work.)
> 
> The *only* truly active catalina.properties file we have right now in
> working order (at the time of this posting) is in / on the primary level
> inside the conf directory and it has the following uncommented lines:
> 
> package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans.
> package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.
> 
> common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar
> server.loader=
> shared.loader=
> tomcat.util.buf.StringCache.byte.enabled=true
> 
> Do any of you have any idea how to make this work?
> 
> 
> Regards,
> 
> Casey J. Burk
> www.caseyburk.com
>

I'll take a stab at your question. However a few caveats are in order.

1. I run Fedora, not RedHat
2. I use Tomcat downloaded from Apache, not the distribution's version

That being said, there's a short explanation on how to do this in RUNNING.txt. Look under the heading:

Advanced Configuration - Multiple Tomcat Instances

Normally this document is in $CATALINA_HOME. However the packaged version may have put the document under /usr/share/doc/tomcat6 or something similar.

In general, the steps are as follows.

1. Create a copy of the original Tomcat directory structure (in $CATALINA_HOME) for each
   desired Tomcat.

2. Copy tomcat-juli.jar from $CATALINA_HOME/bin to each new directory structure's bin
   directory ($CATALINA_BASE/bin)

3. Copy all of $CATALINA_HOME/conf to $CATALINA_BASE/conf

4. Copy $CATALINA_HOME/webapps/manager to $CATALINA_BASE/webapps/manager if the manager
   application is desired

5. Make all of your configuration edits to files in $CATALINA_BASE/conf

Make any modifications to the lib directory (for example, adding JDBC drivers) to $CATALINA_BASE/lib. Tomcat will load jars and classes from $CATALINA_BASE/lib first, then $CATALINA_HOME/lib.

To start the new Tomcats, set $CATALINA_HOME to your default Tomcat installation, $CATALINA_BASE to your copy as set up above, and then run $CATALINA_HOME/bin/startup.sh (the file in the original installation). Since you've set $CATALINA_BASE, paths will be set accordingly.

Here are some more notes concerning how to do this.

1. Create the copy

When you're done, the directory structure should look like this:

/usr/tomcat/test1 ($CATALINA_BASE)
                bin
                conf
                    Catalina
                        localhost
                lib
                logs
                temp
                webapps
                work

(similarly for test2)

2. Copy tomcat-juli.jar to $CATALINA_BASE/bin

You may want to create a setenv.sh in $CATALINA_BASE/bin. This should contain all interesting options such as JAVA_OPTS, CATALINA_OPTS, any environment variables, and JMX setup. Do not modify $CATALINA_HOME/bin/catalina.sh or $CATALINA_HOME/bin/startup.sh.

3. Copy all of the $CATALINA_HOME/conf files to $CATALINA_BASE/conf

You will need to edit the $CATALINA_BASE/conf files. Minimally you will need to do the following:

a. Ensure that the Server shutdown port in server.xml is unique
b. Ensure that all Connector ports in server.xml are unique

You'll probably want to enable the manager application, so make sure to edit
tomcat-users.xml appropriately.

To launch all of this, you'll need a shell script. Something like the following is quick and dirty.

#!/bin/bash
$CATALINA_HOME=/usr/tomcat

#
# test1
#
( export $CATALINA_BASE=$CATALINA_HOME/test1; $CATALINA_HOME/bin/startup.sh )
sleep 5
#
# test2
#
(export $CATALINA_BASE=$CATALINA_HOME/test2; $CATALINA_HOME/bin/startup.sh )

Shutting down follows the same pattern. Just substitute shutdown.sh for startup.sh.

Integrating this into /etc/rc.d, system-config-services, or systemd is left as an exercise for the reader.

You may have some SELinux issues as well, although since your $CATALINA_BASE directories are under $CATALINA_HOME, maybe not.

As a final note, I wouldn't recommend putting a $CATALINA_BASE installation under $CATALINA_HOME. Depending on how the RPM update works, you may actually wipe out your $CATALINA_BASE installations. This is speculation, since I don't use the RPM distribution of Tomcat.

. . . . just my two cents.
/mde/

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org