Hi Konstantin,

On Mon, 2010-01-11 at 05:19 +0300, Konstantin Kolinko wrote:
> 2010/1/11 Martin Grotzke <martin.grot...@javakaffee.de>:
> > On Mon, 2010-01-11 at 02:54 +0300, Konstantin Kolinko wrote:
> >> 2010/1/10 Martin Grotzke <martin.grot...@javakaffee.de>:
> >> > Hi,
> >> >
> >> > Jan 10, 2010 2:57:51 PM org.apache.catalina.connector.CoyoteAdapter 
> >> > service
> >> > SEVERE: An exception or error occurred in the container during the 
> >> > request processing
> >> > java.lang.NoClassDefFoundError: org/joda/time/format/ISODateTimeFormat
> >> >        at 
> >> > de.javakaffee.web.msm.serializer.javolution.JodaDateTimeFormat.<clinit>(JodaDateTimeFormat.java:35)
> >> >        at java.lang.Class.forName0(Native Method)
> >> >        at java.lang.Class.forName(Class.java:247)
> >>
> >> So, JodaDateTimeFormat was found and its <clinit> was called,
> >> but ISODateTimeFormat was not.
> > JodaDateTimeFormat is the joda DateTime serializer shipped with the
> > memcached-session-manager (msm), which should be used/activated if joda
> > is available in the webapp classpath.
> >
> > ISODateTimeFormat is a class provided by joda.
> >
> >>
> >> Where have you placed your joda jar?
> > The joda jar is placed in WEB-INF/lib of the application. I don't want
> > to have this in $CATALINA_HOME/lib as joda serialization shall only be
> > supported if it's required by the webapp.
> > The JodaDateTimeFormat comes with the msm jar located in tomcat's lib.
> >
> 
> That won't work.
> 
> A class loaded from Common classloader cannot depend on classes that
> are in the Webapp classloader.
> 
> Place them in the same place:
> either both in WEB-INF/lib, or both in $CATALINA_HOME/lib

Thanx for this simple description, now I got it.

A very simple test with my JodaDateTimeFormat placed in WEB-INF/lib is
working - looks good!


> 
> You may learn how java.lang.Class.forName() is called by the VM to
> load dependent classes, but there is a simple concern, that should be
> understandable:
> 
> - when a web application is stopped (undeployed), all its assets have
> to be removed from memory.
> - webapp classloader belongs to the application, and takes some steps
> to destroy itself, when the application is stopped
> - classloader knows, what classes it has already loaded
Simple, makes sense.

> 
> When JodaDateTimeFormat class belongs to the Common classloader, it
> will be loaded in memory as long as Tomcat is running, and thus cannot
> depend on classes in the Webapp which are relatively short-lived.
> 
> Implementation-wise that is class loader delegation model. The Webapp
> classloader is not a parent of the Common one.
Reading docs again now with your explanation and the delegation model in
mind I'd say that it's already in the docs :)

Thanx for your help,
cheers,
Martin


> 
> >>
> >> Also please read
> >> http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html
> > I've already done that, but I didn't find the information to solve this
> > issue. Also reading again didn't help ;-)
> >
> > Thanx && cheers,
> > Martin
> >
> 
> Best regards,
> Konstantin Kolinko
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
> 

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to