tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jane Muse" <>
Subject RE: Disable class monitoring for reloading container classes
Date Thu, 07 Oct 2010 19:11:52 GMT
There are several Java's on the IBM machine. Yesterday I performed tests by changing JAVA_HOME
in the catalina startup script to Sun's Java 1.5 and Sun's java 1.6. Previously it was IBM's
J9 1.5.0. The results were the same with the various JVM's.

The reason why there's a problem when the application gets reloaded is due to we are loading
a JNI native library that the application requires. According to the following link, section
11.2.4, the JVM does not allow a JNI native library to be loaded by more than one class loader.
When the application is shut down by tomcat, the native library does not get unloaded from
the class loader. This only happens when the JVM is brought down. Thus when the application
starts up after tomcat reloads it, we get an UnsatisfiedLinkError.



-----Original Message-----
From: André Warnier [] 
Sent: Thursday, October 07, 2010 3:26 AM
To: Tomcat Users List
Subject: Re: Disable class monitoring for reloading container classes

Jane Muse wrote:
> André - you are correct. We actually modified "autoDeploy" attribute 
> on the <Host> element to false,
  and not "reloadable" in the application context xml, and then it worked on IBM I V7R1.
  Your 3rd point below is probably the key to why it works on one version of the O/S and not
the other.
  The version where it does not work is Java 1.5.0, and where it does is Java 1.6.0.
  I have a question into IBM to see if I can change the Java used by the O/S.

I believe that if you phrased the question like that, they may not understand what you mean,
as the OS itself probably does not use Java.

 > Do you know how I could change the JVM used by tomcat on a machine?

To change the JVM used by Tomcat is easy, but first you need to install a 1.6 JVM on that
machine.  You should be able to install the JVM 1.6 "in addition to" the existing 1.5, if
you have any concern about the possibility of breaking other applications.
For the exact way to do that, you will need help from an OS specialist for that machine.

Once you have installed this 1.6 JVM, having Tomcat use it instead of the 1.5 JVM is easy.
Basically, it consists of setting the environment value "JAVA_HOME" to point to the new JVM
before starting Tomcat.  That's all there is to it.
That needs to be done somewhere in the scripts which are used at Tomcat start, but I cannot
tell you where exactly on that platform.  If Java and Tomcat are IBM "packages" on that platform,
then you will probably also need an OS specialist to help you with that.

> re: your fourth point I test this by changing the system time on the O/S.
Right. But my point was : since in reality, on a productive system, this is happening only

twice a year, does it matter if those times the application(s) get reloaded ?
(In fact, I strongly suspect that it may happen only /at most/ once a year, and then only

in very specific circumstances.  It is your changing of the system time which triggers the

reloading, but it would probably never happen in reality on a production system).

> I couldn't figure out how to test your last guess because the context element in tomcat's
context.xml wouldn't accept the reloadable attribute.

That was only a wild unsubstantiated guess.
I expect someone else more qualified to shoot down that suggestion, just about... now.

> Thanks,

To unsubscribe, e-mail:
For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message