tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tamir <>
Subject RE: ?? Class Loaders, Static Initializers, Open Files ??
Date Tue, 07 May 2002 07:35:30 GMT
Hi Tony,
Here is my notion:
What you're using is tomcat automatic class reloading. When you compile
class MyServlet tomcat
drop it's current class loader and creates a new one which loads all your
classes again.
I think, if you should try to remove you class XXX outside of
web-inf/classes and
put it tomcat_home/common/lib in a jar.
Then, tomcat won't reload your XXX class, and your static file will be ok.
try it.


-----Original Message-----
From: Tony LaPaso []
Sent: Tuesday, May 07, 2002 8:25 AM
Subject: ?? Class Loaders, Static Initializers, Open Files ??

Hi all,

This is a core Java language issue but its roots are in servlets.

I have a servlet (running on Tomcat v4.0.3), MyServlet, which
calls Class.forName("XXX") in it's init() method.

Now class XXX has a static initializer that opens a file for
output and keeps it open. Later, I change the code in MyServlet
and recompile it. The Tomcat notices the change and automatically
loads the new version of MyServlet, using a different class
loader than was used for the previous version.

But when the new version of MyServlet calls Class.forName("XXX"),
the static initializer in XXX cannot open the file because the
previous version has it open.

So even though the first class loader is being
"dropped/abandoned", there is still a class loaded by that class
loader (class XXX) that has a file open. And of course, I do not
have the code for XXX.

Is there any way to specify, either to the JVM or to Tomcat, that
the file opened by XXX's static initializer should be closed? I'm
guessing this is "just the way it works". The previous class
loader will be GCed, as will the previous version of MyServlet,
but the file opened by XXX stays open until the VM goes down...


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

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

View raw message