You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Ned Seagoon <th...@hotmail.com> on 2001/02/28 13:02:50 UTC

Class reloading?

Hi guys,

Just wondering about the situation that arises when an Action class is 
changed in a running struts environment.

I was under the impression that a single instance of an action class is 
created and run inside multiple threads, yet if I recompile the class and 
re-run the action then those changes are reflected.

Is this peculiar to VisualAge for Java (which I am running under) or does 
this happen in every environment?

Actually, this applies to all classes in a project - can I just change them 
at will or do I need to do something more?

Doesn't Tomcat use a special class loader to reload changed servlet classes?

Regards
Ned


_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.


Re: Class reloading?

Posted by "Craig R. McClanahan" <Cr...@eng.sun.com>.
Johan Compagner wrote:

> > Tomcat 3.1 and 3.2 seem to reliably detect cases where the servlet class
> > you are actually calling has been changed, but they do not always seem
> > to catch the fact that other classes have been changed.
> >
> > Tomcat 4.0 uses a different mechanism that reliably catches *all*
> > changes to classes found in WEB-INF/classes.
>
> But that is not needed.
> It is nice in a development environment but what happens if i update de war file
> Is that detected and is it automaticly being extracted ect ect?
>

For updating a production app, Tomcat 3.x includes an "admin" application and Tomcat
4.0 includes a "manager" application that can be used to shut down the previous
version of a web app, and bring up a new one, without restarting Tomcat.  Neither
version of Tomcat currently does this automatically (and there are some JDK problems
that make replacing an existing JAR file harder than it should be).

>
> That is what's needed if you use tomcat for deployment also (in combo with apache)
>
> johan

Craig



Re: Class reloading?

Posted by Johan Compagner <jc...@j-com.nl>.
> Tomcat 3.1 and 3.2 seem to reliably detect cases where the servlet class
> you are actually calling has been changed, but they do not always seem
> to catch the fact that other classes have been changed.
> 
> Tomcat 4.0 uses a different mechanism that reliably catches *all*
> changes to classes found in WEB-INF/classes.

But that is not needed. 
It is nice in a development environment but what happens if i update de war file
Is that detected and is it automaticly being extracted ect ect?

That is what's needed if you use tomcat for deployment also (in combo with apache)

johan



Re: Class reloading?

Posted by "Craig R. McClanahan" <Cr...@eng.sun.com>.
David Winterfeldt wrote:

> Do all version of Tomcat do this?
>

In theory.

Tomcat 3.1 and 3.2 seem to reliably detect cases where the servlet class
you are actually calling has been changed, but they do not always seem
to catch the fact that other classes have been changed.

Tomcat 4.0 uses a different mechanism that reliably catches *all*
changes to classes found in WEB-INF/classes.

In all versions, the application reload only occurs if the changed class
had in fact been used by the application already.  If it hasn't been
loaded yet, there is no reason to restart the app, because no old
version of the class needs to be thrown away.

>
> David
>

Craig


>
> --- "Craig R. McClanahan"
> <Cr...@eng.sun.com> wrote:
> > Ned Seagoon wrote:
> >
> > > Hi guys,
> > >
> > > Just wondering about the situation that arises
> > when an Action class is
> > > changed in a running struts environment.
> > >
> > > I was under the impression that a single instance
> > of an action class is
> > > created and run inside multiple threads, yet if I
> > recompile the class and
> > > re-run the action then those changes are
> > reflected.
> > >
> > > Is this peculiar to VisualAge for Java (which I am
> > running under) or does
> > > this happen in every environment?
> > >
> > > Actually, this applies to all classes in a project
> > - can I just change them
> > > at will or do I need to do something more?
> > >
> > > Doesn't Tomcat use a special class loader to
> > reload changed servlet classes?
> > >
> > >
> >
> > Tomcat uses a special class loader, but it is global
> > to the entire web
> > app
> > rather than local to a particular class.  When
> > Tomcat recognizes that
> > you have
> > changed a class, it reloads the entire app
> > (destroying the old servlets,
> > initializing the new ones) and even saves your
> > sessions and session
> > attributes
> > if they implement Serializable.
> >
> > This capability is a feature of Tomcat that is
> > commonly implemented, but
> > it's
> > not in the servlet spec.
> >
> > > Regards
> > > Ned
> > >
> >
> > Craig
>
> __________________________________________________
> Do You Yahoo!?
> Get email at your own domain with Yahoo! Mail.
> http://personal.mail.yahoo.com/


Re: Class reloading?

Posted by David Winterfeldt <dw...@yahoo.com>.
Do all version of Tomcat do this?

David

--- "Craig R. McClanahan"
<Cr...@eng.sun.com> wrote:
> Ned Seagoon wrote:
> 
> > Hi guys,
> >
> > Just wondering about the situation that arises
> when an Action class is
> > changed in a running struts environment.
> >
> > I was under the impression that a single instance
> of an action class is
> > created and run inside multiple threads, yet if I
> recompile the class and
> > re-run the action then those changes are
> reflected.
> >
> > Is this peculiar to VisualAge for Java (which I am
> running under) or does
> > this happen in every environment?
> >
> > Actually, this applies to all classes in a project
> - can I just change them
> > at will or do I need to do something more?
> >
> > Doesn't Tomcat use a special class loader to
> reload changed servlet classes?
> >
> >
> 
> Tomcat uses a special class loader, but it is global
> to the entire web
> app
> rather than local to a particular class.  When
> Tomcat recognizes that
> you have
> changed a class, it reloads the entire app
> (destroying the old servlets,
> initializing the new ones) and even saves your
> sessions and session
> attributes
> if they implement Serializable.
> 
> This capability is a feature of Tomcat that is
> commonly implemented, but
> it's
> not in the servlet spec.
> 
> > Regards
> > Ned
> >
> 
> Craig


__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/

Re: Class reloading?

Posted by "Craig R. McClanahan" <Cr...@eng.sun.com>.
Ned Seagoon wrote:

> Hi guys,
>
> Just wondering about the situation that arises when an Action class is
> changed in a running struts environment.
>
> I was under the impression that a single instance of an action class is
> created and run inside multiple threads, yet if I recompile the class and
> re-run the action then those changes are reflected.
>
> Is this peculiar to VisualAge for Java (which I am running under) or does
> this happen in every environment?
>
> Actually, this applies to all classes in a project - can I just change them
> at will or do I need to do something more?
>
> Doesn't Tomcat use a special class loader to reload changed servlet classes?
>
>

Tomcat uses a special class loader, but it is global to the entire web
app
rather than local to a particular class.  When Tomcat recognizes that
you have
changed a class, it reloads the entire app (destroying the old servlets,
initializing the new ones) and even saves your sessions and session
attributes
if they implement Serializable.

This capability is a feature of Tomcat that is commonly implemented, but
it's
not in the servlet spec.

> Regards
> Ned
>

Craig