RE: Tomcat 6.0 documentation: is classloading description correct?

2010-06-17 Thread Peter_Ford
Caldarale, Charles R chuck.caldar...@unisys.com wrote on 06/16/2010
09:55:19 PM:

  From: peter_f...@blm.gov [mailto:peter_f...@blm.gov]
  Subject: Re: Tomcat 6.0 documentation: is classloading description
  correct?
 
  The docs say in one place that the order is one way (WebApp
  first, then Boot, System and Common, which is as I'd expect)

 Please document where it says that; make sure not to ignore the
 sentence: There are exceptions.  Also, don't assume that the
 complete list of exceptions is described in that paragraph rather
 than the bulleted list.

The exceptions it gives are the ones I'd expect - no overriding JRE
classes, servlet classes ignored, use of the endorsed override mechanism.
I'm really more interested in the non-exceptional case of simply loading my
application classes and those from third-party jars such as Apache Commons
packages.


  I need confirmation that that second part of the documentation
  is in error (or not, of course).

 All parts of the classloader doc appear to be correct to me, also
 confirmed by a quick glance at the code.

I don't see how that can be the case:

When a request to load a class from the web application's WebappX class
loader is processed, this class loader will look in the local repositories
first, instead of delegating before looking ... All other class loaders in
Tomcat 6 follow the usual delegation pattern.

But then it says, this, which describes a different search order:

Bootstrap classes of your JVM
System class loader classes (described above)
/WEB-INF/classes of your web application
/WEB-INF/lib/*.jar of your web application
$CATALINA_HOME/lib
$CATALINA_HOME/lib/*.jar

They can't *both* be right.

--Pete


 You might want to look at the API spec for the class of interest:
 http://tomcat.apache.org/tomcat-6.0-
 doc/api/org/apache/catalina/loader/WebappClassLoader.html

  - Chuck


 THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE
 PROPRIETARY MATERIAL and is thus for use only by the intended
 recipient. If you received this in error, please contact the sender
 and delete the e-mail and its attachments from all computers.


 -
 To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
 For additional commands, e-mail: users-h...@tomcat.apache.org



-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Tomcat 6.0 documentation: is classloading description correct?

2010-06-17 Thread Konstantin Kolinko
2010/6/16  peter_f...@blm.gov:

 Looking at section 10 of the 6.0 user guide, which describes classloading,
 the text makes perfect sense and matches the way I understand things work.
 However the summary at the end of the section Class Loader Definitions
 looks wrong; it basically says that the search order is...

 Bootstrap
 $CLASSPATH
 WEB-INF/classes
 WEB-INF/lib/*.jar
 $CATALINA_HOME/lib
 $CATALINA_HOME/lib/*.jar

 ...when my understanding is it should be...

 WEB-INF/classes
 WEB-INF/lib/*.jar
 Bootstrap
 $CLASSPATH
 $CATALINA_HOME/lib
 $CATALINA_HOME/lib/*.jar

 So, is the documentation just wrong, or have I misunderstood something?


The order is
 Bootstrap
 $CLASSPATH
 WEB-INF/classes
 WEB-INF/lib/*.jar
 $CATALINA_BASE/lib
 $CATALINA_BASE/lib/*.jar
 $CATALINA_HOME/lib
 $CATALINA_HOME/lib/*.jar
as documented.

Note, that many Bootstrap and $CLASSPATH classes are loaded at early
stages of Tomcat startup sequence, that is before classloading
hierarchy itself is created.   It would be a mess if those classes
were ignored.

That is why people should not play with $CLASSPATH, unless in certain
very rare cases.


If you have some documentation changes in your mind, the patches are
welcome. The sources are in webapps/docs/*.xml  .  Create a Bugzilla
issue and attach a diff file there (svn diff or an 'Unified diff'
(diff -u)).

Best regards,
Konstantin Kolinko

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Tomcat 6.0 documentation: is classloading description correct?

2010-06-17 Thread Rainer Jung

On 17.06.2010 16:37, Konstantin Kolinko wrote:

2010/6/16peter_f...@blm.gov:


Looking at section 10 of the 6.0 user guide, which describes classloading,
the text makes perfect sense and matches the way I understand things work.
However the summary at the end of the section Class Loader Definitions
looks wrong; it basically says that the search order is...

Bootstrap
$CLASSPATH
WEB-INF/classes
WEB-INF/lib/*.jar
$CATALINA_HOME/lib
$CATALINA_HOME/lib/*.jar

...when my understanding is it should be...

WEB-INF/classes
WEB-INF/lib/*.jar
Bootstrap
$CLASSPATH
$CATALINA_HOME/lib
$CATALINA_HOME/lib/*.jar

So, is the documentation just wrong, or have I misunderstood something?



The order is

Bootstrap
$CLASSPATH
WEB-INF/classes
WEB-INF/lib/*.jar
$CATALINA_BASE/lib
$CATALINA_BASE/lib/*.jar
$CATALINA_HOME/lib
$CATALINA_HOME/lib/*.jar

as documented.

Note, that many Bootstrap and $CLASSPATH classes are loaded at early
stages of Tomcat startup sequence, that is before classloading
hierarchy itself is created.   It would be a mess if those classes
were ignored.

That is why people should not play with $CLASSPATH, unless in certain
very rare cases.


If you have some documentation changes in your mind, the patches are
welcome. The sources are in webapps/docs/*.xml  .  Create a Bugzilla
issue and attach a diff file there (svn diff or an 'Unified diff'
(diff -u)).


I guess part of the confusion comes from the terminology parent and 
delegating.


The classloader used by the webapps is derived from the usual 
URLClassloader as an extension. In Tomcat land it's parent is the 
classloader that loads from the common lib directory.


The webapp classloader is not delegating first in the sense that it 
first tries to find classes via it's own super URLClassloader, before 
asking the parent common loader.


The URLClassloader in turn is the one, that first goes down to bootstrap 
and system/CLASSPATH before checking the configured URLs (WEB-INF). So 
in Tomcat terminology it's true, that the webapp classloader does only 
delegate (to common) if it can't find the class, but the webapp loader 
itself does delegate to bootstrap and system first.


(hope that's true and not too confusing ...)

Regards,

Rainer

-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Tomcat 6.0 documentation: is classloading description correct?

2010-06-17 Thread Peter_Ford
Ok, the problem is my misunderstanding of the process here. I thought
WebAppClassLoader always checked WEB-INF/lib before delegating; I see that
it actually delegates to the System loader first, then checks WEB-INF/lib,
and finally delegates to its own parent. So my comment earlier about they
can't both be right was of course wrong - not only *can* they be both
right, they *are* :)

This explains the technical problem I've been chasing; I'll have it fixed
in a jiffy now. Thanks all.

--Pete

Konstantin Kolinko knst.koli...@gmail.com wrote on 06/17/2010 08:37:56
AM:

 2010/6/16  peter_f...@blm.gov:
 
  Looking at section 10 of the 6.0 user guide, which describes
classloading,
  the text makes perfect sense and matches the way I understand things
work.
  However the summary at the end of the section Class Loader
Definitions
  looks wrong; it basically says that the search order is...
 
  Bootstrap
  $CLASSPATH
  WEB-INF/classes
  WEB-INF/lib/*.jar
  $CATALINA_HOME/lib
  $CATALINA_HOME/lib/*.jar
 
  ...when my understanding is it should be...
 
  WEB-INF/classes
  WEB-INF/lib/*.jar
  Bootstrap
  $CLASSPATH
  $CATALINA_HOME/lib
  $CATALINA_HOME/lib/*.jar
 
  So, is the documentation just wrong, or have I misunderstood something?
 

 The order is
  Bootstrap
  $CLASSPATH
  WEB-INF/classes
  WEB-INF/lib/*.jar
  $CATALINA_BASE/lib
  $CATALINA_BASE/lib/*.jar
  $CATALINA_HOME/lib
  $CATALINA_HOME/lib/*.jar
 as documented.

 Note, that many Bootstrap and $CLASSPATH classes are loaded at early
 stages of Tomcat startup sequence, that is before classloading
 hierarchy itself is created.   It would be a mess if those classes
 were ignored.

 That is why people should not play with $CLASSPATH, unless in certain
 very rare cases.


 If you have some documentation changes in your mind, the patches are
 welcome. The sources are in webapps/docs/*.xml  .  Create a Bugzilla
 issue and attach a diff file there (svn diff or an 'Unified diff'
 (diff -u)).

 Best regards,
 Konstantin Kolinko

 -
 To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
 For additional commands, e-mail: users-h...@tomcat.apache.org



-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Tomcat 6.0 documentation: is classloading description correct?

2010-06-16 Thread Gurkan Erdogdu
Use Class Loader Definitions carefully,

System - This class loader is normally initialized from the contents of the 
CLASSPATH environment variable.  
All such classes are visible to both Tomcat internal classes, and to web 
applications.  However, the standard Tomcat 6 startup scripts 
($CATALINA_HOME/bin/catalina.sh or %CATALINA_HOME%\bin\catalina.bat) totally 
ignore the 
contents of the CLASSPATH environment variable itself, and 
instead build the System class loader from the following repositories: 


I think that documentation is correct,


--Gurkan



From: peter_f...@blm.gov peter_f...@blm.gov
To: users@tomcat.apache.org
Sent: Wed, June 16, 2010 9:42:35 PM
Subject: Tomcat 6.0 documentation: is classloading description correct?


Looking at section 10 of the 6.0 user guide, which describes classloading,
the text makes perfect sense and matches the way I understand things work.
However the summary at the end of the section Class Loader Definitions
looks wrong; it basically says that the search order is...

Bootstrap
$CLASSPATH
WEB-INF/classes
WEB-INF/lib/*.jar
$CATALINA_HOME/lib
$CATALINA_HOME/lib/*.jar

...when my understanding is it should be...

WEB-INF/classes
WEB-INF/lib/*.jar
Bootstrap
$CLASSPATH
$CATALINA_HOME/lib
$CATALINA_HOME/lib/*.jar

So, is the documentation just wrong, or have I misunderstood something?


-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



Re: Tomcat 6.0 documentation: is classloading description correct?

2010-06-16 Thread Peter_Ford
When I wrote CLASSPATH I meant the classpath value that's built up by the
catalina.sh - I'm well aware that it creates this from clean. I think
you're missing the point; CLASSPATH is used to set the System classloader's
search path, sure - but the question is where that loader fits into the
loader search order used by Tomcat. The docs say in one place that the
order is one way (WebApp first, then Boot, System and Common, which is as
I'd expect) but in another place right after that says that it's Boot,
System, WebApp, Common (which I think is wrong). I need confirmation that
that second part of the documentation is in error (or not, of course).

Gurkan Erdogdu gurkanerdo...@yahoo.com wrote on 06/16/2010 03:04:08 PM:

 Use Class Loader Definitions carefully,

 System - This class loader is normally initialized from the contents
 of the CLASSPATH environment variable.
 All such classes are visible to both Tomcat internal classes, and to
 web applications.  However, the standard Tomcat 6 startup scripts
 ($CATALINA_HOME/bin/catalina.sh or %CATALINA_HOME%\bin\catalina.bat)
 totally ignore the
 contents of the CLASSPATH environment variable itself, and
 instead build the System class loader from the following repositories:


 I think that documentation is correct,


 --Gurkan


 
 From: peter_f...@blm.gov peter_f...@blm.gov
 To: users@tomcat.apache.org
 Sent: Wed, June 16, 2010 9:42:35 PM
 Subject: Tomcat 6.0 documentation: is classloading description correct?


 Looking at section 10 of the 6.0 user guide, which describes
classloading,
 the text makes perfect sense and matches the way I understand things
work.
 However the summary at the end of the section Class Loader Definitions
 looks wrong; it basically says that the search order is...

 Bootstrap
 $CLASSPATH
 WEB-INF/classes
 WEB-INF/lib/*.jar
 $CATALINA_HOME/lib
 $CATALINA_HOME/lib/*.jar

 ...when my understanding is it should be...

 WEB-INF/classes
 WEB-INF/lib/*.jar
 Bootstrap
 $CLASSPATH
 $CATALINA_HOME/lib
 $CATALINA_HOME/lib/*.jar

 So, is the documentation just wrong, or have I misunderstood something?


 -
 To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
 For additional commands, e-mail: users-h...@tomcat.apache.org



-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org



RE: Tomcat 6.0 documentation: is classloading description correct?

2010-06-16 Thread Caldarale, Charles R
 From: peter_f...@blm.gov [mailto:peter_f...@blm.gov]
 Subject: Re: Tomcat 6.0 documentation: is classloading description
 correct?
 
 The docs say in one place that the order is one way (WebApp 
 first, then Boot, System and Common, which is as I'd expect)

Please document where it says that; make sure not to ignore the sentence: 
There are exceptions.  Also, don't assume that the complete list of 
exceptions is described in that paragraph rather than the bulleted list.

 I need confirmation that that second part of the documentation 
 is in error (or not, of course).

All parts of the classloader doc appear to be correct to me, also confirmed by 
a quick glance at the code.

You might want to look at the API spec for the class of interest:
http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/loader/WebappClassLoader.html

 - Chuck


THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY 
MATERIAL and is thus for use only by the intended recipient. If you received 
this in error, please contact the sender and delete the e-mail and its 
attachments from all computers.


-
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org