tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cox, Charlie" <c...@cincom.com>
Subject RE: ?? Class Loaders, Static Initializers, Open Files ??
Date Tue, 07 May 2002 13:05:04 GMT
you can move it to \common\lib which is loaded by a different class loader,
but then it will be visible to all contexts.

Using a static initializer like that will also cause problems if you try to
use the manager to control your app since manager drops the classloader and
creates a new one when you reload.

maybe instead of a static initializer, you can use a servlet's init() and
have it load on startup. This way you can use a class and utilize the
destroy() method to do your cleanup.

Charlie

> -----Original Message-----
> From: tamir [mailto:tamir@movious.com]
> Sent: Tuesday, May 07, 2002 3:36 AM
> To: 'Tomcat Users List'
> Subject: RE: ?? Class Loaders, Static Initializers, Open Files ??
> 
> 
> 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.
> 
> Tamir
> 
> -----Original Message-----
> From: Tony LaPaso [mailto:tlapaso@attbi.com]
> Sent: Tuesday, May 07, 2002 8:25 AM
> To: tomcat-user@jakarta.apache.org
> 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...
> 
> Thanks...
> 
> 
> 
> 
> 
> --
> To unsubscribe, e-mail:
> <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail:
> <mailto:tomcat-user-help@jakarta.apache.org>
> 
> --
> To unsubscribe, e-mail:   
> <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: 
> <mailto:tomcat-user-help@jakarta.apache.org>
> 

--
To unsubscribe, e-mail:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-user-help@jakarta.apache.org>


Mime
View raw message