RE: Tomcat 3.3 contextAdmin issues

2001-08-20 Thread Costin Manolache

On 20 Aug 2001 02:01:12 +0200, Paulo Gaspar wrote:

 Your explanation sure helps understanding what functionality is intended
 for each tag. I can take a look at that too. It is easier for me to 
 understand the taglibs than the rest of Tomcat.
 =;o)

Well, I hope understanding the rest of tomcat is not that difficult, but
the goal of the tags was to hide tomcat implementation details ( or
tomcat itself ). A context tag can have different implementations,
maybe specific to other servlet containers - the admin interface will be
the same, just a different taglib code will be used.

BTW, nothing requires you to use the tags or jsp - but whatever you use,
please keep the implementation behind an interface similar with the
tags. ( i.e. similar name and behaviors ).


 In this case I am talking about the comments in the method
 org.apache.tomcat.core.ContextManager.shutdown()
 
 In this method's source code there are 2 blocks of cleanup code that 
 were commented out. The fact that they were not just removed and the 
 nature of a comment:
   remove the modules ( XXX do we need that ? )
 before one of those blocks makes me wonder how sure it is that they
 are correct.

The code that is commented out used to be part of the method, including
the one with XXX comment ( and the answer is - we don't need to remove
the modules ).

The idea is quite simple - shutdown() is symetrical with init(). If you
add any context manually ( for example EmbededTomcat.addContext() ), you
should also remove it when you stop ( if you want to ). If a module is
adding contexts - it should also remove them ( or leave them in and
don't add them back ).

That's probably where the bug is, I need to review ContextXmlReader and
AutoWebApp to make sure they remove the contexts on shutdown.

shutdown() followed by init() should bring you back to the same state as
you were before ( if no configuration change happened ). 

Now, that's the theory - or what seems to be the 'correct' behavior for
the core. 3.3 is mostly about making sure the core behaves in a well
defined way - better modules will follow, and we can fix modules easily
without all the headache of a major release. 

If you have any doubts about the ContextManager behavior - please speak
now, we may still be able to fix it. 

Regarding the module removal - again, whoever adds modules should also
remove them back, shutdown shouldn't mess with that ( since init doesn't
either ).

In future, some modules will be enhanced to deal 'nicely' with restarts,
and I plan to add support module reloading ( via a module, of course
:-). As I mentioned so many times, after 3.3 we shouldn't have to change
anything in the core, so new modules can rely on some known and well
defined behavior ( well defined doesn't mean perfect, but good enough
:-). 


 Specific questions, besides the above ContextManager.shutdown() 
 issue:
  - Why is it possible to add 2 or more contexts with the same name
and base path? It is a cleanup issue that this happens with the 
restart.jsp code, but shouldn't this kind of duplication also 
be prevented?

Contexts should be identified by hostname and base path. If we don't
check for that - it's a bug. BTW, the right way to fix the bug is to add
the check - not in the core, but in a module ( that can do other checks
during the addContext/contextInit phases ). Again, this can wait until
after 3.3, I don't think it's a major issue. 

  - To make a hot restart, it looks like modules should be restarted
too. Is this correct?

Modules should deal themself with the init/shutdown events, and restart.
Most existing modules do not need to be reloaded - but that can be done
too. I'm still investigating how to implement module restart, and hot
module add/remove. I don't think this can be done in 3.3, but in a set
of modules that can be released after 3.3 ( I have some code, but now I
want to focus on 3.3 and few other important pieces ).


  - When using restart.jsp, previously removed contexts (using the
admin pages) were not added back. Why?

Bug probably :-) Again, the right behavior is that whoever adds
something should take it back. 

  - Where are existing contexts detected and loaded? Is it on a 
module? And if yes, then which?

Contexts ( and modules ) are added in 2 ways:
- in applications embedding tomcat, by the application via calls to EmbededTomcat 
or ContextManager. 

- in standalone tomcat, by various configuration modules. Right now the list is:
ContextXmlReader
AutoWebApp.

The first will add modules declared in apps-XXX.xml and server.xml ( which 
shouldn't be used for contexts, that's only for backward compat ).

The second deals with webapps-like dirs ( you can define additional
dirs, very usefull for multiple virtual hosts ).

Thats' where you should check what happens on shutdown.

BTW, this review will help a lot - thank you very much. I think it's very
important to make sure the behavior is right in the first place, we can fix
the 

RE: Tomcat 3.3 contextAdmin issues

2001-08-19 Thread Paulo Gaspar

Answer inline:

 -Original Message-
 From: Costin Manolache [mailto:[EMAIL PROTECTED]]
 Sent: Saturday, August 18, 2001 8:29 PM
 
 On 18 Aug 2001 19:56:33 +0200, Paulo Gaspar wrote:

 ...

  The first two things that are really confusing are:
  - the existence of 2 lines of very similar classes 
(e.g.: TomcatAdmin and ContextAdmin) in the tadm
package at webapps\admin\WEB-INF\classes\tadm;
 
 Well, TomcatAdmin is the first tag I wrote, and it did a lot of things.
 Too many, actually, so I started to split it. ContextAdmin will focus on
 context tasks, TomcatAdmin for generic tomcat.
 
 Also, TomcatAdmin declares the ContextManager scripting variable, and
 that's a problem to be fixed - you can have only one tadm:admin in a
 page right now. 
 
Yes, I was thinking the same about that variable. I had to go around that
to improvise a context restart (by using % { % and % } %).

Your explanation sure helps understanding what functionality is intended
for each tag. I can take a look at that too. It is easier for me to 
understand the taglibs than the rest of Tomcat.
=;o)
 
  - and the fact that restart.jsp does not work as 
expected producing duplicate entries in the list 
presented by contextList.jsp.
 
 That's a bug. I'll take a look, I wrote restart.jsp mostly as a test -
 to make sure all modules are cleaning up after themself ( i.e. you do
 restart.jsp few times and check the thread count, memory use, etc - it
 should stay constant ). If some contexts are not removed - that must be
 fixed ( please add a bug so I'll remember ).

I will try (adding the bug).
 
  Looking at org.apache.tomcat.core.ContextManager did 
  not help a lot since its comments are not very clear
  either, as is the case of its shutdown() method where
  comments make me doubt about how cleanup should be done.
 
 Ok, what's not clear :-) ? As you know, I'm not very good at docs, but
 if you ask specific questions I may be able to answer ( and fix the
 comments along the way ).  

No one seems to be very good at docs on Tomcat. =;o)

In this case I am talking about the comments in the method
org.apache.tomcat.core.ContextManager.shutdown()

In this method's source code there are 2 blocks of cleanup code that 
were commented out. The fact that they were not just removed and the 
nature of a comment:
  remove the modules ( XXX do we need that ? )
before one of those blocks makes me wonder how sure it is that they
are correct.


  This restart thing probably has some relation with the
  work Costin is doing on EmbededTomcat - maybe the 
  information missing is the same.
 
 It has some relation, in the sense EmbeddedTomcat must be able to
 restart ( and it's using the same calls as restart.jsp ).

Yes, the cleanup issues are related.


Specific questions, besides the above ContextManager.shutdown() 
issue:
 - Why is it possible to add 2 or more contexts with the same name
   and base path? It is a cleanup issue that this happens with the 
   restart.jsp code, but shouldn't this kind of duplication also 
   be prevented?
 - To make a hot restart, it looks like modules should be restarted
   too. Is this correct?
 - When using restart.jsp, previously removed contexts (using the
   admin pages) were not added back. Why?
 - Where are existing contexts detected and loaded? Is it on a 
   module? And if yes, then which?

As you see from the above questions, I still ignore a lot.


Thanks a lot for your attention on this, Costin.


Have fun,
Paulo Gaspar




Re: Tomcat 3.3 contextAdmin issues

2001-08-18 Thread Costin Manolache

On 18 Aug 2001 19:56:33 +0200, Paulo Gaspar wrote:

 I have been trying to improve a bit on the admin 
 application, especially on the contextAdmin bit,
 tweaking its web pages/JSPs in order to add functionality
 and ease of use.

Great :-)

 I am especially interested on making it easier to restart
 individual applications, deploy or redeploy new 
 applications and restart the whole container trough this
 web interface.



 The first two things that are really confusing are:
 - the existence of 2 lines of very similar classes 
   (e.g.: TomcatAdmin and ContextAdmin) in the tadm
   package at webapps\admin\WEB-INF\classes\tadm;

Well, TomcatAdmin is the first tag I wrote, and it did a lot of things.
Too many, actually, so I started to split it. ContextAdmin will focus on
context tasks, TomcatAdmin for generic tomcat.

Also, TomcatAdmin declares the ContextManager scripting variable, and
that's a problem to be fixed - you can have only one tadm:admin in a
page right now. 


 - and the fact that restart.jsp does not work as 
   expected producing duplicate entries in the list 
   presented by contextList.jsp.

That's a bug. I'll take a look, I wrote restart.jsp mostly as a test -
to make sure all modules are cleaning up after themself ( i.e. you do
restart.jsp few times and check the thread count, memory use, etc - it
should stay constant ). If some contexts are not removed - that must be
fixed ( please add a bug so I'll remember ).


 Looking at org.apache.tomcat.core.ContextManager did 
 not help a lot since its comments are not very clear
 either, as is the case of its shutdown() method where
 comments make me doubt about how cleanup should be done.

Ok, what's not clear :-) ? As you know, I'm not very good at docs, but
if you ask specific questions I may be able to answer ( and fix the
comments allong the way ).  

 This restart thing probably has some relation with the
 work Costin is doing on EmbededTomcat - maybe the 
 information missing is the same.

It has some relation, in the sense EmbeddedTomcat must be able to
restart ( and it's using the same calls as restart.jsp ).

Costin